[{"data":1,"prerenderedAt":173210},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch05-html-biao-ge-lie-biao-yu-biao-dan":3,"wiki-doc-nav":329},{"id":4,"title":5,"body":6,"description":321,"extension":322,"meta":323,"navigation":324,"path":325,"seo":326,"stem":327,"__hash__":328},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":8,"toc":311},"minimark",[9,13,18,22,25,28,33,36,39,42,45,48,69,75,79,82,85,88,91,94,97,101,104,107,110,113,126,131,134,137,159,162,165,168,171,174,178,181,188,191,194,197,200,203,210,213,216,222,225,228,231,238,241,244,261,268,271,274,282,291,294,297,300,304,307],[10,11,5],"h1",{"id":12},"_5-html表格列表与表单",[14,15,17],"h2",{"id":16},"_51-表格标签","5.1 表格标签",[19,20,21],"p",{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,23,24],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,26,27],{},"②表格基本语法：",[29,30],"img",{"style":31,"src":32},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,34,35],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[29,37],{"style":31,"src":38},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,40,41],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[29,43],{"style":31,"src":44},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,46,47],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,49,50,54,55,57,58,61,62,64,65,68],{},[51,52,53],"code",{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[51,56,53],{},"内部必须拥有",[51,59,60],{},"\u003Ctr>","标签，一般位于第一行，",[51,63,53],{},"比",[51,66,67],{},"\u003Cth>","范围广",[19,70,71,74],{},[51,72,73],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,76,78],{"id":77},"_52-合并单元格","5.2 合并单元格",[19,80,81],{},"（1）合并单元格方式：",[19,83,84],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,86,87],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,89,90],{},"（2）目标单元格：",[19,92,93],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,95,96],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,98,100],{"id":99},"_53-列表标签","5.3 列表标签",[19,102,103],{},"（1）分类：无序列表、有序列表、自定义列表",[19,105,106],{},"①无序列表：",[29,108],{"style":31,"src":109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,111,112],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,114,115,118,119,122,123,125],{},[51,116,117],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[51,120,121],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[51,124,117],{},"中输入其他标签或文字是不对的",[19,127,128,130],{},[51,129,121],{},"之间相当于一个容器，可以容纳所有元素",[19,132,133],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,135,136],{},"在css中去除前边的小圆点采用如下代码:",[138,139,144],"pre",{"className":140,"code":141,"language":142,"meta":143,"style":143},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css","",[51,145,146],{"__ignoreMap":143},[147,148,151,155],"span",{"class":149,"line":150},"line",1,[147,152,154],{"class":153},"s9eBZ","list-style",[147,156,158],{"class":157},"sVt8B",": none;\n",[19,160,161],{},"②有序列表：",[29,163],{"style":31,"src":164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,166,167],{},"③自定义列表：",[29,169],{"style":31,"src":170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[29,172],{"style":31,"src":173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,175,177],{"id":176},"_54-表单标签","5.4 表单标签",[19,179,180],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,182,183,184,187],{},"（1）表单域：包含单元素的区域，",[51,185,186],{},"\u003Cform>","标签可以实现信息的收集和传递。",[29,189],{"style":31,"src":190},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,192,193],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,195,196],{},"表单元素提交必须有name属性",[19,198,199],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,201,202],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,204,205,206,209],{},"①",[51,207,208],{},"\u003Cinput>","输入表单元素",[29,211],{"style":31,"src":212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[29,214],{"style":31,"src":215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,217,218,219],{},"单选按钮：",[51,220,221],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[29,223],{"style":31,"src":224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,226,227],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[29,229],{"style":31,"src":230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,232,233,237],{},[234,235,236],"strong",{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,239,240],{},"②select下拉表单元素：可以节约页面控件",[29,242],{"style":31,"src":243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,245,246,249,250,253,254,257,258,260],{},[234,247,248],{},"注意点："," ",[51,251,252],{},"\u003Cselect>","中至少包含一对",[51,255,256],{},"\u003Coption>","；在",[51,259,256],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,262,263,264,267],{},"③",[51,265,266],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[29,269],{"style":31,"src":270},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,272,273],{},"3行20列",[14,275,277,278,281],{"id":276},"_55-lable标签","5.5 ",[51,279,280],{},"\u003Clable>","标签",[19,283,284,285,287,288,290],{},"它不是表单标签，但常常与表单标签搭配使用，",[51,286,280],{},"标签用于绑定一个表单标签，当点击",[51,289,280],{},"标签内的文本",[19,292,293],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[29,295],{"style":31,"src":296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[29,298],{"style":31,"src":299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,301,303],{"id":302},"_56-实例","5.6 实例",[29,305],{"style":31,"src":306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[308,309,310],"style",{},"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":143,"searchDepth":312,"depth":312,"links":313},2,[314,315,316,317,318,320],{"id":16,"depth":312,"text":17},{"id":77,"depth":312,"text":78},{"id":99,"depth":312,"text":100},{"id":176,"depth":312,"text":177},{"id":276,"depth":312,"text":319},"5.5 \u003Clable>标签",{"id":302,"depth":312,"text":303},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":5,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",[330,5436,6544,7964,10953,12304,13793,14881,23644,23656,24255,24281,24405,24646,24711,24729,24742,24789,24913,25082,25281,25461,25666,25802,25897,25934,25947,26257,26998,27706,27727,28747,30378,30529,30542,30554,30855,50667,50682,50699,50732,53603,76951,93095,93116,93229,93350,94120,94783,95144,95182,95288,95388,95431,95457,95518,97172,97273,97298,97789,98289,99369,99652,100394,100896,100908,102924,104586,106089,107787,109704,111623,113645,117115,117547,118010,118759,121703,122051,122073,122429,125736,125748,126151,126174,126321,126488,126692,126887,127444,128101,130032,131630,132279,133773,135204,136439,138133,139885,142295,142411,143346,143557,144442,145677,145905,145918,147073,149485,151853,155174,157651,159295,161072,163085,166137,168317,170844,173038],{"id":331,"title":332,"body":333,"description":143,"extension":322,"meta":5431,"navigation":324,"path":5432,"seo":5433,"stem":5434,"__hash__":5435},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":334,"toc":5403},[335,338,342,345,349,362,366,371,374,377,380,383,386,415,419,422,425,428,430,483,487,506,508,522,525,533,536,1398,1405,1422,1426,1517,1521,1527,1616,1620,1658,1662,1726,1730,1734,1740,1751,1755,1760,1764,1769,1773,1778,1782,1786,1791,2061,2066,2204,2209,2466,2469,2477,2481,2486,2589,2592,2898,2907,3008,3011,3014,3017,3020,3280,3285,3425,3428,3607,3610,3738,3741,3893,3897,3902,3905,3916,3924,3927,4034,4038,4042,4047,4097,4102,4107,4131,4136,4189,4192,4197,4374,4379,4664,4669,5066,5070,5075,5132,5137,5145,5148,5288,5291,5400],[10,336,332],{"id":337},"_1基础入门",[14,339,341],{"id":340},"_11注释","1.1注释",[19,343,344],{},"\u002F\u002F或者\u002F* *\u002F",[14,346,348],{"id":347},"_12命名","1.2命名",[350,351,352,356,359],"ol",{},[353,354,355],"li",{},"字母数字下划线",[353,357,358],{},"开头必须是字母或_",[353,360,361],{},"不能使用关键词",[14,363,365],{"id":364},"_13数据类型","1.3数据类型",[367,368,370],"h3",{"id":369},"_131整形","1.3.1整形",[19,372,373],{},"short 短整形 2",[19,375,376],{},"int 整形 4",[19,378,379],{},"long 长整形 win4 linux32位4 linux64位8",[19,381,382],{},"long long 长长整形 8",[19,384,385],{},"利用sizeof可以求数据类型占用的内存空间大小",[138,387,391],{"className":388,"code":389,"language":390,"meta":143,"style":143},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[51,392,393,408],{"__ignoreMap":143},[147,394,395,399,402,405],{"class":149,"line":150},[147,396,398],{"class":397},"szBVR","sizeof",[147,400,401],{"class":157},"(",[147,403,404],{"class":397},"int",[147,406,407],{"class":157},")\n",[147,409,410,412],{"class":149,"line":312},[147,411,398],{"class":397},[147,413,414],{"class":157},"(num)\n",[367,416,418],{"id":417},"_132浮点型","1.3.2浮点型",[19,420,421],{},"float 单精度 4节 7位有效数字",[19,423,424],{},"double 双精度 8节 15-16有效数字",[19,426,427],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,429,248],{},[138,431,433],{"className":388,"code":432,"language":390,"meta":143,"style":143},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[51,434,435,460],{"__ignoreMap":143},[147,436,437,440,443,446,450,453,456],{"class":149,"line":150},[147,438,439],{"class":397},"float",[147,441,442],{"class":157}," f1",[147,444,445],{"class":397},"=",[147,447,449],{"class":448},"sj4cs","3.14",[147,451,452],{"class":397},"f",[147,454,455],{"class":157},";",[147,457,459],{"class":458},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[147,461,462,464,467,469,472,475,478,480],{"class":149,"line":312},[147,463,439],{"class":397},[147,465,466],{"class":157}," f2",[147,468,445],{"class":397},[147,470,471],{"class":448},"3",[147,473,474],{"class":397},"e",[147,476,477],{"class":448},"2",[147,479,455],{"class":157},[147,481,482],{"class":458}," \u002F\u002F科学记数法\n",[367,484,486],{"id":485},"_133字符型","1.3.3字符型",[138,488,490],{"className":388,"code":489,"language":390,"meta":143,"style":143},"char ch='a'\n",[51,491,492],{"__ignoreMap":143},[147,493,494,497,500,502],{"class":149,"line":150},[147,495,496],{"class":397},"char",[147,498,499],{"class":157}," ch",[147,501,445],{"class":397},[147,503,505],{"class":504},"sZZnC","'a'\n",[19,507,248],{},[350,509,510,513,516,519],{},[353,511,512],{},"在显示字符型变量时，只能单引号，双引号x",[353,514,515],{},"单引号内只能一个字符，不能字符串",[353,517,518],{},"c和c++字符型变量只占用一个字符",[353,520,521],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,523,524],{},"ASCII码大致由以下两部分组成：",[350,526,527,530],{},[353,528,529],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[353,531,532],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,534,535],{},"ASCII码表格：",[537,538,539,582],"table",{},[540,541,542],"thead",{},[543,544,545,552,557,561,566,570,574,578],"tr",{},[546,547,548,551],"th",{},[234,549,550],{},"ASCII","值",[546,553,554],{},[234,555,556],{},"控制字符",[546,558,559,551],{},[234,560,550],{},[546,562,563],{},[234,564,565],{},"字符",[546,567,568,551],{},[234,569,550],{},[546,571,572],{},[234,573,565],{},[546,575,576,551],{},[234,577,550],{},[546,579,580],{},[234,581,565],{},[583,584,585,612,638,663,688,714,739,764,790,815,841,867,893,918,944,970,996,1020,1045,1070,1095,1120,1145,1170,1195,1220,1245,1271,1296,1321,1346,1372],"tbody",{},[543,586,587,591,594,597,600,603,606,609],{},[588,589,590],"td",{},"0",[588,592,593],{},"NUT",[588,595,596],{},"32",[588,598,599],{},"(space)",[588,601,602],{},"64",[588,604,605],{},"@",[588,607,608],{},"96",[588,610,611],{},"、",[543,613,614,617,620,623,626,629,632,635],{},[588,615,616],{},"1",[588,618,619],{},"SOH",[588,621,622],{},"33",[588,624,625],{},"!",[588,627,628],{},"65",[588,630,631],{},"A",[588,633,634],{},"97",[588,636,637],{},"a",[543,639,640,642,645,648,651,654,657,660],{},[588,641,477],{},[588,643,644],{},"STX",[588,646,647],{},"34",[588,649,650],{},"\"",[588,652,653],{},"66",[588,655,656],{},"B",[588,658,659],{},"98",[588,661,662],{},"b",[543,664,665,667,670,673,676,679,682,685],{},[588,666,471],{},[588,668,669],{},"ETX",[588,671,672],{},"35",[588,674,675],{},"#",[588,677,678],{},"67",[588,680,681],{},"C",[588,683,684],{},"99",[588,686,687],{},"c",[543,689,690,693,696,699,702,705,708,711],{},[588,691,692],{},"4",[588,694,695],{},"EOT",[588,697,698],{},"36",[588,700,701],{},"$",[588,703,704],{},"68",[588,706,707],{},"D",[588,709,710],{},"100",[588,712,713],{},"d",[543,715,716,719,722,725,728,731,734,737],{},[588,717,718],{},"5",[588,720,721],{},"ENQ",[588,723,724],{},"37",[588,726,727],{},"%",[588,729,730],{},"69",[588,732,733],{},"E",[588,735,736],{},"101",[588,738,474],{},[543,740,741,744,747,750,753,756,759,762],{},[588,742,743],{},"6",[588,745,746],{},"ACK",[588,748,749],{},"38",[588,751,752],{},"&",[588,754,755],{},"70",[588,757,758],{},"F",[588,760,761],{},"102",[588,763,452],{},[543,765,766,769,772,775,778,781,784,787],{},[588,767,768],{},"7",[588,770,771],{},"BEL",[588,773,774],{},"39",[588,776,777],{},",",[588,779,780],{},"71",[588,782,783],{},"G",[588,785,786],{},"103",[588,788,789],{},"g",[543,791,792,795,798,801,803,806,809,812],{},[588,793,794],{},"8",[588,796,797],{},"BS",[588,799,800],{},"40",[588,802,401],{},[588,804,805],{},"72",[588,807,808],{},"H",[588,810,811],{},"104",[588,813,814],{},"h",[543,816,817,820,823,826,829,832,835,838],{},[588,818,819],{},"9",[588,821,822],{},"HT",[588,824,825],{},"41",[588,827,828],{},")",[588,830,831],{},"73",[588,833,834],{},"I",[588,836,837],{},"105",[588,839,840],{},"i",[543,842,843,846,849,852,855,858,861,864],{},[588,844,845],{},"10",[588,847,848],{},"LF",[588,850,851],{},"42",[588,853,854],{},"*",[588,856,857],{},"74",[588,859,860],{},"J",[588,862,863],{},"106",[588,865,866],{},"j",[543,868,869,872,875,878,881,884,887,890],{},[588,870,871],{},"11",[588,873,874],{},"VT",[588,876,877],{},"43",[588,879,880],{},"+",[588,882,883],{},"75",[588,885,886],{},"K",[588,888,889],{},"107",[588,891,892],{},"k",[543,894,895,898,901,904,906,909,912,915],{},[588,896,897],{},"12",[588,899,900],{},"FF",[588,902,903],{},"44",[588,905,777],{},[588,907,908],{},"76",[588,910,911],{},"L",[588,913,914],{},"108",[588,916,917],{},"l",[543,919,920,923,926,929,932,935,938,941],{},[588,921,922],{},"13",[588,924,925],{},"CR",[588,927,928],{},"45",[588,930,931],{},"-",[588,933,934],{},"77",[588,936,937],{},"M",[588,939,940],{},"109",[588,942,943],{},"m",[543,945,946,949,952,955,958,961,964,967],{},[588,947,948],{},"14",[588,950,951],{},"SO",[588,953,954],{},"46",[588,956,957],{},".",[588,959,960],{},"78",[588,962,963],{},"N",[588,965,966],{},"110",[588,968,969],{},"n",[543,971,972,975,978,981,984,987,990,993],{},[588,973,974],{},"15",[588,976,977],{},"SI",[588,979,980],{},"47",[588,982,983],{},"\u002F",[588,985,986],{},"79",[588,988,989],{},"O",[588,991,992],{},"111",[588,994,995],{},"o",[543,997,998,1001,1004,1007,1009,1012,1015,1018],{},[588,999,1000],{},"16",[588,1002,1003],{},"DLE",[588,1005,1006],{},"48",[588,1008,590],{},[588,1010,1011],{},"80",[588,1013,1014],{},"P",[588,1016,1017],{},"112",[588,1019,19],{},[543,1021,1022,1025,1028,1031,1033,1036,1039,1042],{},[588,1023,1024],{},"17",[588,1026,1027],{},"DCI",[588,1029,1030],{},"49",[588,1032,616],{},[588,1034,1035],{},"81",[588,1037,1038],{},"Q",[588,1040,1041],{},"113",[588,1043,1044],{},"q",[543,1046,1047,1050,1053,1056,1058,1061,1064,1067],{},[588,1048,1049],{},"18",[588,1051,1052],{},"DC2",[588,1054,1055],{},"50",[588,1057,477],{},[588,1059,1060],{},"82",[588,1062,1063],{},"R",[588,1065,1066],{},"114",[588,1068,1069],{},"r",[543,1071,1072,1075,1078,1081,1083,1086,1089,1092],{},[588,1073,1074],{},"19",[588,1076,1077],{},"DC3",[588,1079,1080],{},"51",[588,1082,471],{},[588,1084,1085],{},"83",[588,1087,1088],{},"S",[588,1090,1091],{},"115",[588,1093,1094],{},"s",[543,1096,1097,1100,1103,1106,1108,1111,1114,1117],{},[588,1098,1099],{},"20",[588,1101,1102],{},"DC4",[588,1104,1105],{},"52",[588,1107,692],{},[588,1109,1110],{},"84",[588,1112,1113],{},"T",[588,1115,1116],{},"116",[588,1118,1119],{},"t",[543,1121,1122,1125,1128,1131,1133,1136,1139,1142],{},[588,1123,1124],{},"21",[588,1126,1127],{},"NAK",[588,1129,1130],{},"53",[588,1132,718],{},[588,1134,1135],{},"85",[588,1137,1138],{},"U",[588,1140,1141],{},"117",[588,1143,1144],{},"u",[543,1146,1147,1150,1153,1156,1158,1161,1164,1167],{},[588,1148,1149],{},"22",[588,1151,1152],{},"SYN",[588,1154,1155],{},"54",[588,1157,743],{},[588,1159,1160],{},"86",[588,1162,1163],{},"V",[588,1165,1166],{},"118",[588,1168,1169],{},"v",[543,1171,1172,1175,1178,1181,1183,1186,1189,1192],{},[588,1173,1174],{},"23",[588,1176,1177],{},"TB",[588,1179,1180],{},"55",[588,1182,768],{},[588,1184,1185],{},"87",[588,1187,1188],{},"W",[588,1190,1191],{},"119",[588,1193,1194],{},"w",[543,1196,1197,1200,1203,1206,1208,1211,1214,1217],{},[588,1198,1199],{},"24",[588,1201,1202],{},"CAN",[588,1204,1205],{},"56",[588,1207,794],{},[588,1209,1210],{},"88",[588,1212,1213],{},"X",[588,1215,1216],{},"120",[588,1218,1219],{},"x",[543,1221,1222,1225,1228,1231,1233,1236,1239,1242],{},[588,1223,1224],{},"25",[588,1226,1227],{},"EM",[588,1229,1230],{},"57",[588,1232,819],{},[588,1234,1235],{},"89",[588,1237,1238],{},"Y",[588,1240,1241],{},"121",[588,1243,1244],{},"y",[543,1246,1247,1250,1253,1256,1259,1262,1265,1268],{},[588,1248,1249],{},"26",[588,1251,1252],{},"SUB",[588,1254,1255],{},"58",[588,1257,1258],{},":",[588,1260,1261],{},"90",[588,1263,1264],{},"Z",[588,1266,1267],{},"122",[588,1269,1270],{},"z",[543,1272,1273,1276,1279,1282,1284,1287,1290,1293],{},[588,1274,1275],{},"27",[588,1277,1278],{},"ESC",[588,1280,1281],{},"59",[588,1283,455],{},[588,1285,1286],{},"91",[588,1288,1289],{},"[",[588,1291,1292],{},"123",[588,1294,1295],{},"{",[543,1297,1298,1301,1304,1307,1310,1313,1315,1318],{},[588,1299,1300],{},"28",[588,1302,1303],{},"FS",[588,1305,1306],{},"60",[588,1308,1309],{},"\u003C",[588,1311,1312],{},"92",[588,1314,983],{},[588,1316,1317],{},"124",[588,1319,1320],{},"|",[543,1322,1323,1326,1329,1332,1334,1337,1340,1343],{},[588,1324,1325],{},"29",[588,1327,1328],{},"GS",[588,1330,1331],{},"61",[588,1333,445],{},[588,1335,1336],{},"93",[588,1338,1339],{},"]",[588,1341,1342],{},"125",[588,1344,1345],{},"}",[543,1347,1348,1351,1354,1357,1360,1363,1366,1369],{},[588,1349,1350],{},"30",[588,1352,1353],{},"RS",[588,1355,1356],{},"62",[588,1358,1359],{},">",[588,1361,1362],{},"94",[588,1364,1365],{},"^",[588,1367,1368],{},"126",[588,1370,1371],{},"`",[543,1373,1374,1377,1380,1383,1386,1389,1392,1395],{},[588,1375,1376],{},"31",[588,1378,1379],{},"US",[588,1381,1382],{},"63",[588,1384,1385],{},"?",[588,1387,1388],{},"95",[588,1390,1391],{},"_",[588,1393,1394],{},"127",[588,1396,1397],{},"DEL",[19,1399,1400,1401,1404],{},"ASCII 码大致由以下",[234,1402,1403],{},"两部分组","成：",[1406,1407,1408,1415],"ul",{},[353,1409,1410,1411,1414],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[234,1412,1413],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[353,1416,1417,1418,1421],{},"ASCII 打印字符：数字 ",[234,1419,1420],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[367,1423,1425],{"id":1424},"_134转义字符","1.3.4转义字符",[138,1427,1429],{"className":388,"code":1428,"language":390,"meta":143,"style":143},"\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",[51,1430,1431,1436,1452,1467,1473,1487,1493],{"__ignoreMap":143},[147,1432,1433],{"class":149,"line":150},[147,1434,1435],{"class":458},"\u002F\u002F换行符\n",[147,1437,1438,1441,1444,1447,1449],{"class":149,"line":312},[147,1439,1440],{"class":157},"cout ",[147,1442,1443],{"class":397},"\u003C\u003C",[147,1445,1446],{"class":504},"\"hello world\u002Fn\"",[147,1448,455],{"class":157},[147,1450,1451],{"class":458}," \u002F\u002F就等同于如下：\n",[147,1453,1455,1457,1459,1462,1464],{"class":149,"line":1454},3,[147,1456,1440],{"class":157},[147,1458,1443],{"class":397},[147,1460,1461],{"class":504},"\"hello world\"",[147,1463,1443],{"class":397},[147,1465,1466],{"class":157},"endl;\n",[147,1468,1470],{"class":149,"line":1469},4,[147,1471,1472],{"class":458},"\u002F\u002F反斜杠\n",[147,1474,1476,1478,1480,1483,1485],{"class":149,"line":1475},5,[147,1477,1440],{"class":157},[147,1479,1443],{"class":397},[147,1481,1482],{"class":504},"\"\u002F\u002F\"",[147,1484,1443],{"class":397},[147,1486,1466],{"class":157},[147,1488,1490],{"class":149,"line":1489},6,[147,1491,1492],{"class":458},"\u002F\u002F水平制表符\n",[147,1494,1496,1498,1500,1503,1506,1509,1511,1514],{"class":149,"line":1495},7,[147,1497,1440],{"class":157},[147,1499,1443],{"class":397},[147,1501,1502],{"class":504},"\"aaaa",[147,1504,1505],{"class":448},"\\t",[147,1507,1508],{"class":504},"helloworld\"",[147,1510,1443],{"class":397},[147,1512,1513],{"class":157},"endl;",[147,1515,1516],{"class":458}," \u002F\u002F输出窗口时有对齐效果\n",[367,1518,1520],{"id":1519},"_135字符串型","1.3.5字符串型",[19,1522,1523,1524,1526],{},"char 变量名",[147,1525],{},"=\"字符串值\"",[138,1528,1530],{"className":388,"code":1529,"language":390,"meta":143,"style":143},"\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",[51,1531,1532,1537,1542,1547,1552,1566,1579,1584,1590,1602],{"__ignoreMap":143},[147,1533,1534],{"class":149,"line":150},[147,1535,1536],{"class":458},"\u002F\u002Fc风格字符串\n",[147,1538,1539],{"class":149,"line":312},[147,1540,1541],{"class":458},"\u002F\u002F注意事项：\n",[147,1543,1544],{"class":149,"line":1454},[147,1545,1546],{"class":458},"\u002F\u002F1.char字符串名[]\n",[147,1548,1549],{"class":149,"line":1469},[147,1550,1551],{"class":458},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[147,1553,1554,1556,1559,1561,1563],{"class":149,"line":1475},[147,1555,496],{"class":397},[147,1557,1558],{"class":157}," str[]",[147,1560,445],{"class":397},[147,1562,1461],{"class":504},[147,1564,1565],{"class":157},";\n",[147,1567,1568,1570,1572,1575,1577],{"class":149,"line":1489},[147,1569,1440],{"class":157},[147,1571,1443],{"class":397},[147,1573,1574],{"class":157},"str",[147,1576,1443],{"class":397},[147,1578,1466],{"class":157},[147,1580,1581],{"class":149,"line":1495},[147,1582,1583],{"class":458},"\u002F\u002Fc++风格字符串\n",[147,1585,1587],{"class":149,"line":1586},8,[147,1588,1589],{"class":458},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[147,1591,1593,1596,1598,1600],{"class":149,"line":1592},9,[147,1594,1595],{"class":157},"string str2",[147,1597,445],{"class":397},[147,1599,1461],{"class":504},[147,1601,1565],{"class":157},[147,1603,1605,1607,1609,1612,1614],{"class":149,"line":1604},10,[147,1606,1440],{"class":157},[147,1608,1443],{"class":397},[147,1610,1611],{"class":157},"str2",[147,1613,1443],{"class":397},[147,1615,1466],{"class":157},[367,1617,1619],{"id":1618},"_136布尔类型bool","1.3.6布尔类型bool",[138,1621,1623],{"className":388,"code":1622,"language":390,"meta":143,"style":143},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[51,1624,1625,1640],{"__ignoreMap":143},[147,1626,1627,1630,1633,1635,1638],{"class":149,"line":150},[147,1628,1629],{"class":397},"bool",[147,1631,1632],{"class":157}," flag",[147,1634,445],{"class":397},[147,1636,1637],{"class":448},"true",[147,1639,1565],{"class":157},[147,1641,1642,1645,1648,1651,1653,1655],{"class":149,"line":312},[147,1643,1644],{"class":157},"cout",[147,1646,1647],{"class":397},"\u003C\u003Csizeof",[147,1649,1650],{"class":157},"(flag)",[147,1652,1443],{"class":397},[147,1654,1513],{"class":157},[147,1656,1657],{"class":458}," \u002F\u002F查看布尔占内存空间\n",[14,1659,1661],{"id":1660},"_14键盘输入cin","1.4键盘输入cin",[138,1663,1665],{"className":388,"code":1664,"language":390,"meta":143,"style":143},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[51,1666,1667,1680,1697,1708],{"__ignoreMap":143},[147,1668,1669,1671,1674,1676,1678],{"class":149,"line":150},[147,1670,404],{"class":397},[147,1672,1673],{"class":157}," a",[147,1675,445],{"class":397},[147,1677,590],{"class":448},[147,1679,1565],{"class":157},[147,1681,1682,1684,1686,1689,1691,1693,1695],{"class":149,"line":312},[147,1683,1644],{"class":157},[147,1685,1443],{"class":397},[147,1687,1688],{"class":504},"\"请给整型变量a赋值\"",[147,1690,1443],{"class":397},[147,1692,637],{"class":157},[147,1694,1443],{"class":397},[147,1696,1466],{"class":157},[147,1698,1699,1702,1705],{"class":149,"line":1454},[147,1700,1701],{"class":157},"cin ",[147,1703,1704],{"class":397},">>",[147,1706,1707],{"class":157}," a;\n",[147,1709,1710,1712,1714,1717,1720,1722,1724],{"class":149,"line":1469},[147,1711,1440],{"class":157},[147,1713,1443],{"class":397},[147,1715,1716],{"class":504}," \"整型变量a=\"",[147,1718,1719],{"class":397}," \u003C\u003C",[147,1721,637],{"class":157},[147,1723,1443],{"class":397},[147,1725,1466],{"class":157},[14,1727,1729],{"id":1728},"_15运算符","1.5运算符",[367,1731,1733],{"id":1732},"_151算术运算符","1.5.1算术运算符",[19,1735,1736,1739],{},[29,1737],{"alt":143,"src":1738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[350,1741,1742,1745,1748],{},[353,1743,1744],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[353,1746,1747],{},"两个小数不可以做取模运算",[353,1749,1750],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[367,1752,1754],{"id":1753},"_152赋值运算符","1.5.2赋值运算符",[19,1756,1757],{},[29,1758],{"alt":143,"src":1759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[367,1761,1763],{"id":1762},"_153比较运算符","1.5.3比较运算符",[19,1765,1766],{},[29,1767],{"alt":143,"src":1768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[367,1770,1772],{"id":1771},"_154逻辑运算符","1.5.4逻辑运算符",[19,1774,1775],{},[29,1776],{"alt":143,"src":1777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,1779,1781],{"id":1780},"_16程序流程结构","1.6程序流程结构",[367,1783,1785],{"id":1784},"_161选择结构","1.6.1选择结构",[350,1787,1788],{},[353,1789,1790],{},"if语句\n单行、多行、多条件if语句",[138,1792,1794],{"className":388,"code":1793,"language":390,"meta":143,"style":143},"\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",[51,1795,1796,1801,1816,1821,1835,1840,1845,1854,1867,1871,1884,1889,1895,1900,1914,1919,1925,1946,1951,1965,1970,1999,2004,2021,2026,2031,2036,2050,2055],{"__ignoreMap":143},[147,1797,1798],{"class":149,"line":150},[147,1799,1800],{"class":458},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[147,1802,1803,1806,1809,1811,1814],{"class":149,"line":312},[147,1804,1805],{"class":397},"if",[147,1807,1808],{"class":157},"(score",[147,1810,1359],{"class":397},[147,1812,1813],{"class":448},"600",[147,1815,407],{"class":157},[147,1817,1818],{"class":149,"line":1454},[147,1819,1820],{"class":157},"{\n",[147,1822,1823,1826,1828,1831,1833],{"class":149,"line":1469},[147,1824,1825],{"class":157},"    cout",[147,1827,1443],{"class":397},[147,1829,1830],{"class":504},"'这是单行if语句'",[147,1832,1443],{"class":397},[147,1834,1466],{"class":157},[147,1836,1837],{"class":149,"line":1475},[147,1838,1839],{"class":157},"}\n",[147,1841,1842],{"class":149,"line":1489},[147,1843,1844],{"class":458},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[147,1846,1847,1849,1851],{"class":149,"line":1495},[147,1848,1701],{"class":157},[147,1850,1704],{"class":397},[147,1852,1853],{"class":157}," score\n",[147,1855,1856,1858,1860,1863,1865],{"class":149,"line":1586},[147,1857,1805],{"class":397},[147,1859,1808],{"class":157},[147,1861,1862],{"class":397},"\u003C=",[147,1864,1813],{"class":448},[147,1866,407],{"class":157},[147,1868,1869],{"class":149,"line":1592},[147,1870,1820],{"class":157},[147,1872,1873,1875,1877,1880,1882],{"class":149,"line":1604},[147,1874,1825],{"class":157},[147,1876,1704],{"class":397},[147,1878,1879],{"class":504},"\"小于等于600\"",[147,1881,1443],{"class":397},[147,1883,1466],{"class":157},[147,1885,1887],{"class":149,"line":1886},11,[147,1888,1839],{"class":157},[147,1890,1892],{"class":149,"line":1891},12,[147,1893,1894],{"class":397},"else\n",[147,1896,1898],{"class":149,"line":1897},13,[147,1899,1820],{"class":157},[147,1901,1903,1905,1907,1910,1912],{"class":149,"line":1902},14,[147,1904,1825],{"class":157},[147,1906,1704],{"class":397},[147,1908,1909],{"class":504},"\"大于600\"",[147,1911,1704],{"class":397},[147,1913,1466],{"class":157},[147,1915,1917],{"class":149,"line":1916},15,[147,1918,1839],{"class":157},[147,1920,1922],{"class":149,"line":1921},16,[147,1923,1924],{"class":458},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[147,1926,1928,1930,1933,1935,1937,1940,1942,1944],{"class":149,"line":1927},17,[147,1929,1805],{"class":397},[147,1931,1932],{"class":157}," (",[147,1934,590],{"class":448},[147,1936,1309],{"class":397},[147,1938,1939],{"class":157},"num",[147,1941,1309],{"class":397},[147,1943,710],{"class":448},[147,1945,407],{"class":157},[147,1947,1949],{"class":149,"line":1948},18,[147,1950,1820],{"class":157},[147,1952,1954,1956,1958,1961,1963],{"class":149,"line":1953},19,[147,1955,1825],{"class":157},[147,1957,1443],{"class":397},[147,1959,1960],{"class":504},"\"小于100\"",[147,1962,1443],{"class":397},[147,1964,1466],{"class":157},[147,1966,1968],{"class":149,"line":1967},20,[147,1969,1839],{"class":157},[147,1971,1973,1976,1979,1982,1985,1987,1990,1992,1994,1997],{"class":149,"line":1972},21,[147,1974,1975],{"class":397},"else",[147,1977,1978],{"class":397}," if",[147,1980,1981],{"class":157}," (nmu",[147,1983,1984],{"class":397},">=",[147,1986,710],{"class":448},[147,1988,1989],{"class":397},"&&",[147,1991,1939],{"class":157},[147,1993,1309],{"class":397},[147,1995,1996],{"class":448},"200",[147,1998,407],{"class":157},[147,2000,2002],{"class":149,"line":2001},22,[147,2003,1820],{"class":157},[147,2005,2007,2009,2011,2014,2016,2018],{"class":149,"line":2006},23,[147,2008,1825],{"class":157},[147,2010,1443],{"class":397},[147,2012,2013],{"class":504},"\"不小于100且小于200\"",[147,2015,1443],{"class":397},[147,2017,1513],{"class":157},[147,2019,2020],{"class":458}," \u002F\u002F可以无限else if,python中是elif：\n",[147,2022,2024],{"class":149,"line":2023},24,[147,2025,1839],{"class":157},[147,2027,2029],{"class":149,"line":2028},25,[147,2030,1894],{"class":397},[147,2032,2034],{"class":149,"line":2033},26,[147,2035,1820],{"class":157},[147,2037,2039,2041,2043,2046,2048],{"class":149,"line":2038},27,[147,2040,1825],{"class":157},[147,2042,1443],{"class":397},[147,2044,2045],{"class":504},"\"不小于200\"",[147,2047,1443],{"class":397},[147,2049,1466],{"class":157},[147,2051,2053],{"class":149,"line":2052},28,[147,2054,1839],{"class":157},[147,2056,2058],{"class":149,"line":2057},29,[147,2059,2060],{"class":458},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[350,2062,2063],{"start":312},[353,2064,2065],{},"三目运算符",[138,2067,2069],{"className":388,"code":2068,"language":390,"meta":143,"style":143},"\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",[51,2070,2071,2076,2081,2107,2129,2146,2151,2174,2189],{"__ignoreMap":143},[147,2072,2073],{"class":149,"line":150},[147,2074,2075],{"class":458},"\u002F\u002F创建三个变量a,b,c\n",[147,2077,2078],{"class":149,"line":312},[147,2079,2080],{"class":458},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[147,2082,2083,2085,2087,2089,2091,2094,2096,2098,2101,2103,2105],{"class":149,"line":1454},[147,2084,404],{"class":397},[147,2086,1673],{"class":157},[147,2088,445],{"class":397},[147,2090,1099],{"class":448},[147,2092,2093],{"class":157},",b",[147,2095,445],{"class":397},[147,2097,845],{"class":448},[147,2099,2100],{"class":157},",c",[147,2102,445],{"class":397},[147,2104,590],{"class":448},[147,2106,1565],{"class":157},[147,2108,2109,2111,2113,2116,2118,2120,2122,2124,2126],{"class":149,"line":1469},[147,2110,687],{"class":157},[147,2112,445],{"class":397},[147,2114,2115],{"class":157},"(a",[147,2117,1359],{"class":397},[147,2119,662],{"class":157},[147,2121,1385],{"class":397},[147,2123,637],{"class":157},[147,2125,1258],{"class":397},[147,2127,2128],{"class":157},"b)\n",[147,2130,2131,2133,2135,2138,2140,2142,2144],{"class":149,"line":1475},[147,2132,1644],{"class":157},[147,2134,1443],{"class":397},[147,2136,2137],{"class":504},"\"c=\"",[147,2139,1443],{"class":397},[147,2141,687],{"class":157},[147,2143,1443],{"class":397},[147,2145,1466],{"class":157},[147,2147,2148],{"class":149,"line":1489},[147,2149,2150],{"class":458},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[147,2152,2153,2155,2157,2159,2161,2163,2165,2168,2170,2172],{"class":149,"line":1495},[147,2154,2115],{"class":157},[147,2156,1359],{"class":397},[147,2158,662],{"class":157},[147,2160,1385],{"class":397},[147,2162,637],{"class":157},[147,2164,1258],{"class":397},[147,2166,2167],{"class":157},"b)",[147,2169,445],{"class":397},[147,2171,710],{"class":448},[147,2173,1565],{"class":157},[147,2175,2176,2178,2180,2182,2184,2186],{"class":149,"line":1586},[147,2177,1644],{"class":157},[147,2179,1443],{"class":397},[147,2181,637],{"class":157},[147,2183,1443],{"class":397},[147,2185,1513],{"class":157},[147,2187,2188],{"class":458}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[147,2190,2191,2193,2195,2197,2199,2201],{"class":149,"line":1592},[147,2192,1644],{"class":157},[147,2194,1443],{"class":397},[147,2196,662],{"class":157},[147,2198,1443],{"class":397},[147,2200,1513],{"class":157},[147,2202,2203],{"class":458}," \u002F\u002F10   a>b,b还是原值\n",[350,2205,2206],{"start":1454},[353,2207,2208],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[138,2210,2212],{"className":388,"code":2211,"language":390,"meta":143,"style":143},"\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",[51,2213,2214,2219,2227,2241,2251,2255,2269,2282,2292,2300,2305,2330,2351,2373,2394,2416,2437,2457,2462],{"__ignoreMap":143},[147,2215,2216],{"class":149,"line":150},[147,2217,2218],{"class":458},"\u002F\u002F案例-电影打分\n",[147,2220,2221,2224],{"class":149,"line":312},[147,2222,2223],{"class":397},"#include",[147,2225,2226],{"class":504},"\u003Ciostream>\n",[147,2228,2229,2232,2235,2239],{"class":149,"line":1454},[147,2230,2231],{"class":397},"using",[147,2233,2234],{"class":397}," namespace",[147,2236,2238],{"class":2237},"sScJk"," std",[147,2240,1565],{"class":157},[147,2242,2243,2245,2248],{"class":149,"line":1469},[147,2244,404],{"class":397},[147,2246,2247],{"class":2237}," main",[147,2249,2250],{"class":157},"()\n",[147,2252,2253],{"class":149,"line":1475},[147,2254,1820],{"class":157},[147,2256,2257,2260,2263,2265,2267],{"class":149,"line":1489},[147,2258,2259],{"class":397},"    int",[147,2261,2262],{"class":157}," score",[147,2264,445],{"class":397},[147,2266,590],{"class":448},[147,2268,1565],{"class":157},[147,2270,2271,2273,2275,2278,2280],{"class":149,"line":1495},[147,2272,1825],{"class":157},[147,2274,1443],{"class":397},[147,2276,2277],{"class":504},"\"电影打分：\"",[147,2279,1443],{"class":397},[147,2281,1466],{"class":157},[147,2283,2284,2287,2289],{"class":149,"line":1586},[147,2285,2286],{"class":157},"    cin",[147,2288,1704],{"class":397},[147,2290,2291],{"class":157},"score;\n",[147,2293,2294,2297],{"class":149,"line":1592},[147,2295,2296],{"class":397},"    switch",[147,2298,2299],{"class":157},"(score)\n",[147,2301,2302],{"class":149,"line":1604},[147,2303,2304],{"class":157},"    {\n",[147,2306,2307,2310,2313,2316,2318,2321,2323,2325,2328],{"class":149,"line":1886},[147,2308,2309],{"class":397},"        case",[147,2311,2312],{"class":448}," 10",[147,2314,2315],{"class":157},":cout",[147,2317,1443],{"class":397},[147,2319,2320],{"class":504},"\"经典\"",[147,2322,1443],{"class":397},[147,2324,1513],{"class":157},[147,2326,2327],{"class":397},"break",[147,2329,1565],{"class":157},[147,2331,2332,2334,2337,2339,2341,2343,2345,2347,2349],{"class":149,"line":1891},[147,2333,2309],{"class":397},[147,2335,2336],{"class":448}," 9",[147,2338,2315],{"class":157},[147,2340,1443],{"class":397},[147,2342,2320],{"class":504},[147,2344,1443],{"class":397},[147,2346,1513],{"class":157},[147,2348,2327],{"class":397},[147,2350,1565],{"class":157},[147,2352,2353,2355,2358,2360,2362,2365,2367,2369,2371],{"class":149,"line":1897},[147,2354,2309],{"class":397},[147,2356,2357],{"class":448}," 8",[147,2359,2315],{"class":157},[147,2361,1443],{"class":397},[147,2363,2364],{"class":504},"\"非常好\"",[147,2366,1443],{"class":397},[147,2368,1513],{"class":157},[147,2370,2327],{"class":397},[147,2372,1565],{"class":157},[147,2374,2375,2377,2380,2382,2384,2386,2388,2390,2392],{"class":149,"line":1902},[147,2376,2309],{"class":397},[147,2378,2379],{"class":448}," 7",[147,2381,2315],{"class":157},[147,2383,1443],{"class":397},[147,2385,2364],{"class":504},[147,2387,1443],{"class":397},[147,2389,1513],{"class":157},[147,2391,2327],{"class":397},[147,2393,1565],{"class":157},[147,2395,2396,2398,2401,2403,2405,2408,2410,2412,2414],{"class":149,"line":1916},[147,2397,2309],{"class":397},[147,2399,2400],{"class":448}," 6",[147,2402,2315],{"class":157},[147,2404,1443],{"class":397},[147,2406,2407],{"class":504},"\"一般\"",[147,2409,1443],{"class":397},[147,2411,1513],{"class":157},[147,2413,2327],{"class":397},[147,2415,1565],{"class":157},[147,2417,2418,2420,2423,2425,2427,2429,2431,2433,2435],{"class":149,"line":1921},[147,2419,2309],{"class":397},[147,2421,2422],{"class":448}," 5",[147,2424,2315],{"class":157},[147,2426,1443],{"class":397},[147,2428,2407],{"class":504},[147,2430,1443],{"class":397},[147,2432,1513],{"class":157},[147,2434,2327],{"class":397},[147,2436,1565],{"class":157},[147,2438,2439,2442,2444,2446,2449,2451,2453,2455],{"class":149,"line":1927},[147,2440,2441],{"class":397},"        default",[147,2443,2315],{"class":157},[147,2445,1443],{"class":397},[147,2447,2448],{"class":504},"\"烂片\"",[147,2450,1443],{"class":397},[147,2452,1513],{"class":157},[147,2454,2327],{"class":397},[147,2456,1565],{"class":157},[147,2458,2459],{"class":149,"line":1948},[147,2460,2461],{"class":157},"    }\n",[147,2463,2464],{"class":149,"line":1953},[147,2465,1839],{"class":157},[19,2467,2468],{},"if和switch区别：",[1406,2470,2471,2474],{},[353,2472,2473],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[353,2475,2476],{},"switch优点：结构清晰，执行效率高",[367,2478,2480],{"id":2479},"_162循环结构","1.6.2循环结构",[350,2482,2483],{},[353,2484,2485],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[138,2487,2489],{"className":388,"code":2488,"language":390,"meta":143,"style":143},"\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",[51,2490,2491,2496,2504,2508,2521,2535,2539,2559,2569,2573,2585],{"__ignoreMap":143},[147,2492,2493],{"class":149,"line":150},[147,2494,2495],{"class":458},"\u002F\u002F打印0-9数字\n",[147,2497,2498,2500,2502],{"class":149,"line":312},[147,2499,404],{"class":397},[147,2501,2247],{"class":2237},[147,2503,2250],{"class":157},[147,2505,2506],{"class":149,"line":1454},[147,2507,1820],{"class":157},[147,2509,2510,2512,2515,2517,2519],{"class":149,"line":1469},[147,2511,2259],{"class":397},[147,2513,2514],{"class":157}," num",[147,2516,445],{"class":397},[147,2518,590],{"class":448},[147,2520,1565],{"class":157},[147,2522,2523,2526,2529,2531,2533],{"class":149,"line":1475},[147,2524,2525],{"class":397},"    while",[147,2527,2528],{"class":157},"(num",[147,2530,1309],{"class":397},[147,2532,845],{"class":448},[147,2534,407],{"class":157},[147,2536,2537],{"class":149,"line":1489},[147,2538,2304],{"class":157},[147,2540,2541,2544,2547,2549,2551,2553,2556],{"class":149,"line":1495},[147,2542,2543],{"class":2237},"       std",[147,2545,2546],{"class":157},"::cout",[147,2548,1443],{"class":397},[147,2550,1939],{"class":157},[147,2552,1443],{"class":397},[147,2554,2555],{"class":2237},"std",[147,2557,2558],{"class":157},"::endl;\n",[147,2560,2561,2564,2567],{"class":149,"line":1586},[147,2562,2563],{"class":157},"        num",[147,2565,2566],{"class":397},"++",[147,2568,1565],{"class":157},[147,2570,2571],{"class":149,"line":1592},[147,2572,2461],{"class":157},[147,2574,2575,2578,2580,2583],{"class":149,"line":1604},[147,2576,2577],{"class":2237},"    system",[147,2579,401],{"class":157},[147,2581,2582],{"class":504},"\"pause\"",[147,2584,407],{"class":157},[147,2586,2587],{"class":149,"line":1886},[147,2588,1839],{"class":157},[19,2590,2591],{},"注意：写好循环条件，避免死循环情况",[138,2593,2595],{"className":388,"code":2594,"language":390,"meta":143,"style":143},"\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",[51,2596,2597,2602,2609,2616,2626,2634,2638,2643,2670,2675,2680,2688,2715,2720,2725,2738,2748,2752,2762,2767,2780,2785,2799,2804,2819,2823,2836,2840,2845,2849,2863,2871,2876,2882,2888,2893],{"__ignoreMap":143},[147,2598,2599],{"class":149,"line":150},[147,2600,2601],{"class":458},"\u002F\u002F循环结构-猜数字\n",[147,2603,2604,2606],{"class":149,"line":312},[147,2605,2223],{"class":397},[147,2607,2608],{"class":504}," \u003Ciostream>\n",[147,2610,2611,2613],{"class":149,"line":1454},[147,2612,2223],{"class":397},[147,2614,2615],{"class":504}," \u003Cctime>\n",[147,2617,2618,2620,2622,2624],{"class":149,"line":1469},[147,2619,2231],{"class":397},[147,2621,2234],{"class":397},[147,2623,2238],{"class":2237},[147,2625,1565],{"class":157},[147,2627,2628,2630,2632],{"class":149,"line":1475},[147,2629,404],{"class":397},[147,2631,2247],{"class":2237},[147,2633,2250],{"class":157},[147,2635,2636],{"class":149,"line":1489},[147,2637,1820],{"class":157},[147,2639,2640],{"class":149,"line":1495},[147,2641,2642],{"class":458},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[147,2644,2645,2648,2651,2654,2657,2659,2662,2664,2667],{"class":149,"line":1586},[147,2646,2647],{"class":2237},"    srand",[147,2649,2650],{"class":157},"((",[147,2652,2653],{"class":397},"unsigned",[147,2655,2656],{"class":397}," int",[147,2658,828],{"class":157},[147,2660,2661],{"class":2237},"time",[147,2663,401],{"class":157},[147,2665,2666],{"class":448},"NULL",[147,2668,2669],{"class":157},"));\n",[147,2671,2672],{"class":149,"line":1592},[147,2673,2674],{"emptyLinePlaceholder":324},"\n",[147,2676,2677],{"class":149,"line":1604},[147,2678,2679],{"class":458},"    \u002F\u002F1.系统生成随机数\n",[147,2681,2682,2685],{"class":149,"line":1886},[147,2683,2684],{"class":458},"    \u002F\u002Frand()%100",[147,2686,2687],{"class":458}," \u002F\u002F生成0-99的随机数\n",[147,2689,2690,2692,2694,2696,2699,2702,2704,2706,2708,2710,2712],{"class":149,"line":1891},[147,2691,2259],{"class":397},[147,2693,2514],{"class":157},[147,2695,445],{"class":397},[147,2697,2698],{"class":2237},"rand",[147,2700,2701],{"class":157},"()",[147,2703,727],{"class":397},[147,2705,710],{"class":448},[147,2707,880],{"class":397},[147,2709,616],{"class":448},[147,2711,455],{"class":157},[147,2713,2714],{"class":458}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[147,2716,2717],{"class":149,"line":1897},[147,2718,2719],{"class":458},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[147,2721,2722],{"class":149,"line":1902},[147,2723,2724],{"class":458},"    \u002F\u002F2.玩家猜测\n",[147,2726,2727,2729,2732,2734,2736],{"class":149,"line":1916},[147,2728,2259],{"class":397},[147,2730,2731],{"class":157}," val",[147,2733,445],{"class":397},[147,2735,590],{"class":448},[147,2737,1565],{"class":157},[147,2739,2740,2742,2744,2746],{"class":149,"line":1921},[147,2741,2525],{"class":397},[147,2743,1932],{"class":157},[147,2745,616],{"class":448},[147,2747,407],{"class":157},[147,2749,2750],{"class":149,"line":1927},[147,2751,2304],{"class":157},[147,2753,2754,2757,2759],{"class":149,"line":1948},[147,2755,2756],{"class":157},"        cin",[147,2758,1704],{"class":397},[147,2760,2761],{"class":157},"val;\n",[147,2763,2764],{"class":149,"line":1953},[147,2765,2766],{"class":458},"        \u002F\u002F3.判断玩家猜测\n",[147,2768,2769,2772,2775,2777],{"class":149,"line":1967},[147,2770,2771],{"class":397},"        if",[147,2773,2774],{"class":157},"(val",[147,2776,1309],{"class":397},[147,2778,2779],{"class":157},"num) \n",[147,2781,2782],{"class":149,"line":1972},[147,2783,2784],{"class":157},"        {\n",[147,2786,2787,2790,2792,2795,2797],{"class":149,"line":2001},[147,2788,2789],{"class":157},"            cout",[147,2791,1443],{"class":397},[147,2793,2794],{"class":504},"\"猜小了！\"",[147,2796,1443],{"class":397},[147,2798,1466],{"class":157},[147,2800,2801],{"class":149,"line":2006},[147,2802,2803],{"class":157},"        }\n",[147,2805,2806,2809,2811,2814,2816],{"class":149,"line":2023},[147,2807,2808],{"class":397},"        else",[147,2810,1978],{"class":397},[147,2812,2813],{"class":157}," (val",[147,2815,1359],{"class":397},[147,2817,2818],{"class":157},"num)\n",[147,2820,2821],{"class":149,"line":2028},[147,2822,2784],{"class":157},[147,2824,2825,2827,2829,2832,2834],{"class":149,"line":2033},[147,2826,2789],{"class":157},[147,2828,1443],{"class":397},[147,2830,2831],{"class":504},"\"猜大了！\"",[147,2833,1443],{"class":397},[147,2835,1466],{"class":157},[147,2837,2838],{"class":149,"line":2038},[147,2839,2803],{"class":157},[147,2841,2842],{"class":149,"line":2052},[147,2843,2844],{"class":397},"        else\n",[147,2846,2847],{"class":149,"line":2057},[147,2848,2784],{"class":157},[147,2850,2852,2854,2856,2859,2861],{"class":149,"line":2851},30,[147,2853,2789],{"class":157},[147,2855,1443],{"class":397},[147,2857,2858],{"class":504},"\"猜对了！\"",[147,2860,1443],{"class":397},[147,2862,1466],{"class":157},[147,2864,2866,2869],{"class":149,"line":2865},31,[147,2867,2868],{"class":397},"            break",[147,2870,1565],{"class":157},[147,2872,2874],{"class":149,"line":2873},32,[147,2875,2803],{"class":157},[147,2877,2879],{"class":149,"line":2878},33,[147,2880,2881],{"class":458},"        \u002F\u002F猜对 退出游戏\n",[147,2883,2885],{"class":149,"line":2884},34,[147,2886,2887],{"class":458},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[147,2889,2891],{"class":149,"line":2890},35,[147,2892,2461],{"class":157},[147,2894,2896],{"class":149,"line":2895},36,[147,2897,1839],{"class":157},[350,2899,2900],{"start":312},[353,2901,2902,2903,2906],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[234,2904,2905],{},"do...while会先执行一次循环语句","，在判断循环语句",[138,2908,2910],{"className":388,"code":2909,"language":390,"meta":143,"style":143},"\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",[51,2911,2912,2917,2925,2929,2941,2949,2953,2970,2977,2981,2994,3004],{"__ignoreMap":143},[147,2913,2914],{"class":149,"line":150},[147,2915,2916],{"class":458},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[147,2918,2919,2921,2923],{"class":149,"line":312},[147,2920,404],{"class":397},[147,2922,2247],{"class":2237},[147,2924,2250],{"class":157},[147,2926,2927],{"class":149,"line":1454},[147,2928,1820],{"class":157},[147,2930,2931,2933,2935,2937,2939],{"class":149,"line":1469},[147,2932,2259],{"class":397},[147,2934,2514],{"class":157},[147,2936,445],{"class":397},[147,2938,590],{"class":448},[147,2940,1565],{"class":157},[147,2942,2943,2946],{"class":149,"line":1475},[147,2944,2945],{"class":397},"    do",[147,2947,2948],{"class":157}," \n",[147,2950,2951],{"class":149,"line":1489},[147,2952,2304],{"class":157},[147,2954,2955,2958,2960,2962,2964,2966,2968],{"class":149,"line":1495},[147,2956,2957],{"class":2237},"        std",[147,2959,2546],{"class":157},[147,2961,1443],{"class":397},[147,2963,1939],{"class":157},[147,2965,1443],{"class":397},[147,2967,2555],{"class":2237},[147,2969,2558],{"class":157},[147,2971,2972,2974],{"class":149,"line":1586},[147,2973,2563],{"class":157},[147,2975,2976],{"class":397},"++\n",[147,2978,2979],{"class":149,"line":1592},[147,2980,2461],{"class":157},[147,2982,2983,2985,2987,2989,2991],{"class":149,"line":1604},[147,2984,2525],{"class":397},[147,2986,2528],{"class":157},[147,2988,1309],{"class":397},[147,2990,845],{"class":448},[147,2992,2993],{"class":157},");\n",[147,2995,2996,2998,3000,3002],{"class":149,"line":1886},[147,2997,2577],{"class":2237},[147,2999,401],{"class":157},[147,3001,2582],{"class":504},[147,3003,2993],{"class":157},[147,3005,3006],{"class":149,"line":1891},[147,3007,1839],{"class":157},[19,3009,3010],{},"案例-水仙花数",[19,3012,3013],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,3015,3016],{},"例如：1^3+5^3+3^3=153",[19,3018,3019],{},"请用do...while语句，求出所有3位数的水仙花数",[138,3021,3023],{"className":388,"code":3022,"language":390,"meta":143,"style":143},"#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",[51,3024,3025,3031,3041,3049,3053,3058,3070,3076,3080,3085,3101,3117,3133,3148,3167,3182,3230,3234,3246,3250,3258,3262,3276],{"__ignoreMap":143},[147,3026,3027,3029],{"class":149,"line":150},[147,3028,2223],{"class":397},[147,3030,2608],{"class":504},[147,3032,3033,3035,3037,3039],{"class":149,"line":312},[147,3034,2231],{"class":397},[147,3036,2234],{"class":397},[147,3038,2238],{"class":2237},[147,3040,1565],{"class":157},[147,3042,3043,3045,3047],{"class":149,"line":1454},[147,3044,404],{"class":397},[147,3046,2247],{"class":2237},[147,3048,2250],{"class":157},[147,3050,3051],{"class":149,"line":1469},[147,3052,1820],{"class":157},[147,3054,3055],{"class":149,"line":1475},[147,3056,3057],{"class":458},"    \u002F\u002F1.先打印所有三位数字\n",[147,3059,3060,3062,3064,3066,3068],{"class":149,"line":1489},[147,3061,2259],{"class":397},[147,3063,2514],{"class":157},[147,3065,445],{"class":397},[147,3067,710],{"class":448},[147,3069,1565],{"class":157},[147,3071,3072,3074],{"class":149,"line":1495},[147,3073,2945],{"class":397},[147,3075,2948],{"class":157},[147,3077,3078],{"class":149,"line":1586},[147,3079,2304],{"class":157},[147,3081,3082],{"class":149,"line":1592},[147,3083,3084],{"class":458},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[147,3086,3087,3090,3092,3094,3096,3098],{"class":149,"line":1604},[147,3088,3089],{"class":397},"        int",[147,3091,1673],{"class":157},[147,3093,445],{"class":397},[147,3095,590],{"class":448},[147,3097,455],{"class":157},[147,3099,3100],{"class":458}," \u002F\u002F个位\n",[147,3102,3103,3105,3108,3110,3112,3114],{"class":149,"line":1886},[147,3104,3089],{"class":397},[147,3106,3107],{"class":157}," b",[147,3109,445],{"class":397},[147,3111,590],{"class":448},[147,3113,455],{"class":157},[147,3115,3116],{"class":458}," \u002F\u002F十位\n",[147,3118,3119,3121,3124,3126,3128,3130],{"class":149,"line":1891},[147,3120,3089],{"class":397},[147,3122,3123],{"class":157}," c",[147,3125,445],{"class":397},[147,3127,590],{"class":448},[147,3129,455],{"class":157},[147,3131,3132],{"class":458}," \u002F\u002F百位\n",[147,3134,3135,3138,3140,3142,3144,3146],{"class":149,"line":1897},[147,3136,3137],{"class":157},"        a",[147,3139,445],{"class":397},[147,3141,1939],{"class":157},[147,3143,727],{"class":397},[147,3145,845],{"class":448},[147,3147,1565],{"class":157},[147,3149,3150,3153,3155,3157,3159,3161,3163,3165],{"class":149,"line":1902},[147,3151,3152],{"class":157},"        b",[147,3154,445],{"class":397},[147,3156,1939],{"class":157},[147,3158,983],{"class":397},[147,3160,845],{"class":448},[147,3162,727],{"class":397},[147,3164,845],{"class":448},[147,3166,1565],{"class":157},[147,3168,3169,3172,3174,3176,3178,3180],{"class":149,"line":1916},[147,3170,3171],{"class":157},"        c",[147,3173,445],{"class":397},[147,3175,1939],{"class":157},[147,3177,983],{"class":397},[147,3179,710],{"class":448},[147,3181,1565],{"class":157},[147,3183,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3221,3224,3227],{"class":149,"line":1921},[147,3185,2771],{"class":397},[147,3187,2115],{"class":157},[147,3189,854],{"class":397},[147,3191,637],{"class":157},[147,3193,854],{"class":397},[147,3195,637],{"class":157},[147,3197,880],{"class":397},[147,3199,662],{"class":157},[147,3201,854],{"class":397},[147,3203,662],{"class":157},[147,3205,854],{"class":397},[147,3207,662],{"class":157},[147,3209,880],{"class":397},[147,3211,687],{"class":157},[147,3213,854],{"class":397},[147,3215,687],{"class":157},[147,3217,854],{"class":397},[147,3219,3220],{"class":157},"c ",[147,3222,3223],{"class":397},"==",[147,3225,3226],{"class":157}," num)",[147,3228,3229],{"class":458}," \u002F\u002F如果是水仙花数，才打印\n",[147,3231,3232],{"class":149,"line":1927},[147,3233,2784],{"class":157},[147,3235,3236,3238,3240,3242,3244],{"class":149,"line":1948},[147,3237,2789],{"class":157},[147,3239,1443],{"class":397},[147,3241,1939],{"class":157},[147,3243,1443],{"class":397},[147,3245,1466],{"class":157},[147,3247,3248],{"class":149,"line":1953},[147,3249,2803],{"class":157},[147,3251,3252,3254,3256],{"class":149,"line":1967},[147,3253,2563],{"class":157},[147,3255,2566],{"class":397},[147,3257,1565],{"class":157},[147,3259,3260],{"class":149,"line":1972},[147,3261,2461],{"class":157},[147,3263,3264,3266,3269,3271,3274],{"class":149,"line":2001},[147,3265,2525],{"class":397},[147,3267,3268],{"class":157}," (num ",[147,3270,1309],{"class":397},[147,3272,3273],{"class":448}," 1000",[147,3275,2993],{"class":157},[147,3277,3278],{"class":149,"line":2006},[147,3279,1839],{"class":157},[350,3281,3282],{"start":1454},[353,3283,3284],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[138,3286,3288],{"className":388,"code":3287,"language":390,"meta":143,"style":143},"\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",[51,3289,3290,3295,3324,3328,3340,3344,3349,3360,3367,3371,3385,3389,3396,3400,3412,3421],{"__ignoreMap":143},[147,3291,3292],{"class":149,"line":150},[147,3293,3294],{"class":458},"\u002F\u002F从数字0-9打印\n",[147,3296,3297,3300,3302,3304,3307,3309,3311,3314,3316,3318,3320,3322],{"class":149,"line":312},[147,3298,3299],{"class":397},"for",[147,3301,401],{"class":157},[147,3303,404],{"class":397},[147,3305,3306],{"class":157}," i",[147,3308,445],{"class":397},[147,3310,590],{"class":448},[147,3312,3313],{"class":157},";i",[147,3315,1309],{"class":397},[147,3317,845],{"class":448},[147,3319,3313],{"class":157},[147,3321,2566],{"class":397},[147,3323,407],{"class":157},[147,3325,3326],{"class":149,"line":1454},[147,3327,1820],{"class":157},[147,3329,3330,3332,3334,3336,3338],{"class":149,"line":1469},[147,3331,1825],{"class":157},[147,3333,1443],{"class":397},[147,3335,840],{"class":157},[147,3337,1443],{"class":397},[147,3339,1466],{"class":157},[147,3341,3342],{"class":149,"line":1475},[147,3343,1839],{"class":157},[147,3345,3346],{"class":149,"line":1489},[147,3347,3348],{"class":458},"\u002F\u002F上式可以进行拆分\n",[147,3350,3351,3353,3355,3357],{"class":149,"line":1495},[147,3352,404],{"class":397},[147,3354,3306],{"class":157},[147,3356,445],{"class":397},[147,3358,3359],{"class":448},"0\n",[147,3361,3362,3364],{"class":149,"line":1586},[147,3363,3299],{"class":397},[147,3365,3366],{"class":157},"(;;;)\n",[147,3368,3369],{"class":149,"line":1592},[147,3370,1820],{"class":157},[147,3372,3373,3376,3379,3381,3383],{"class":149,"line":1604},[147,3374,3375],{"class":397},"    if",[147,3377,3378],{"class":157},"(i",[147,3380,1984],{"class":397},[147,3382,845],{"class":448},[147,3384,407],{"class":157},[147,3386,3387],{"class":149,"line":1886},[147,3388,2304],{"class":157},[147,3390,3391,3394],{"class":149,"line":1891},[147,3392,3393],{"class":397},"        break",[147,3395,1565],{"class":157},[147,3397,3398],{"class":149,"line":1897},[147,3399,2461],{"class":157},[147,3401,3402,3404,3406,3408,3410],{"class":149,"line":1902},[147,3403,1825],{"class":157},[147,3405,1443],{"class":397},[147,3407,840],{"class":157},[147,3409,1443],{"class":397},[147,3411,1466],{"class":157},[147,3413,3414,3417,3419],{"class":149,"line":1916},[147,3415,3416],{"class":157},"    i",[147,3418,2566],{"class":397},[147,3420,1565],{"class":157},[147,3422,3423],{"class":149,"line":1921},[147,3424,1839],{"class":157},[19,3426,3427],{},"小练习",[138,3429,3431],{"className":388,"code":3430,"language":390,"meta":143,"style":143},"#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",[51,3432,3433,3439,3449,3457,3461,3466,3471,3499,3503,3508,3513,3554,3558,3571,3575,3579,3583,3595,3599,3603],{"__ignoreMap":143},[147,3434,3435,3437],{"class":149,"line":150},[147,3436,2223],{"class":397},[147,3438,2226],{"class":504},[147,3440,3441,3443,3445,3447],{"class":149,"line":312},[147,3442,2231],{"class":397},[147,3444,2234],{"class":397},[147,3446,2238],{"class":2237},[147,3448,1565],{"class":157},[147,3450,3451,3453,3455],{"class":149,"line":1454},[147,3452,404],{"class":397},[147,3454,2247],{"class":2237},[147,3456,2250],{"class":157},[147,3458,3459],{"class":149,"line":1469},[147,3460,1820],{"class":157},[147,3462,3463],{"class":149,"line":1475},[147,3464,3465],{"class":458},"    \u002F\u002F敲桌子案例\n",[147,3467,3468],{"class":149,"line":1489},[147,3469,3470],{"class":458},"    \u002F\u002F1.先输出1-100的数字\n",[147,3472,3473,3476,3478,3480,3482,3484,3486,3489,3491,3493,3495,3497],{"class":149,"line":1495},[147,3474,3475],{"class":397},"    for",[147,3477,401],{"class":157},[147,3479,404],{"class":397},[147,3481,3306],{"class":157},[147,3483,445],{"class":397},[147,3485,616],{"class":448},[147,3487,3488],{"class":157},"; i",[147,3490,1862],{"class":397},[147,3492,710],{"class":448},[147,3494,3488],{"class":157},[147,3496,2566],{"class":397},[147,3498,407],{"class":157},[147,3500,3501],{"class":149,"line":1586},[147,3502,2304],{"class":157},[147,3504,3505],{"class":149,"line":1592},[147,3506,3507],{"class":458},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[147,3509,3510],{"class":149,"line":1604},[147,3511,3512],{"class":458},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[147,3514,3515,3517,3519,3521,3523,3525,3527,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552],{"class":149,"line":1886},[147,3516,2771],{"class":397},[147,3518,3378],{"class":157},[147,3520,727],{"class":397},[147,3522,768],{"class":448},[147,3524,3223],{"class":397},[147,3526,590],{"class":448},[147,3528,3529],{"class":397}," ||",[147,3531,3306],{"class":157},[147,3533,727],{"class":397},[147,3535,845],{"class":448},[147,3537,3223],{"class":397},[147,3539,768],{"class":448},[147,3541,3529],{"class":397},[147,3543,3306],{"class":157},[147,3545,983],{"class":397},[147,3547,845],{"class":448},[147,3549,3223],{"class":397},[147,3551,768],{"class":448},[147,3553,407],{"class":157},[147,3555,3556],{"class":149,"line":1891},[147,3557,2784],{"class":157},[147,3559,3560,3562,3564,3567,3569],{"class":149,"line":1897},[147,3561,2789],{"class":157},[147,3563,1443],{"class":397},[147,3565,3566],{"class":504},"\"敲桌子\"",[147,3568,1443],{"class":397},[147,3570,1466],{"class":157},[147,3572,3573],{"class":149,"line":1902},[147,3574,2803],{"class":157},[147,3576,3577],{"class":149,"line":1916},[147,3578,2844],{"class":397},[147,3580,3581],{"class":149,"line":1921},[147,3582,2784],{"class":157},[147,3584,3585,3587,3589,3591,3593],{"class":149,"line":1927},[147,3586,2789],{"class":157},[147,3588,1443],{"class":397},[147,3590,840],{"class":157},[147,3592,1443],{"class":397},[147,3594,1466],{"class":157},[147,3596,3597],{"class":149,"line":1948},[147,3598,2803],{"class":157},[147,3600,3601],{"class":149,"line":1953},[147,3602,2461],{"class":157},[147,3604,3605],{"class":149,"line":1967},[147,3606,1839],{"class":157},[19,3608,3609],{},"嵌套实现星图",[138,3611,3613],{"className":388,"code":3612,"language":390,"meta":143,"style":143},"#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",[51,3614,3615,3621,3631,3639,3643,3669,3673,3702,3706,3717,3721,3730,3734],{"__ignoreMap":143},[147,3616,3617,3619],{"class":149,"line":150},[147,3618,2223],{"class":397},[147,3620,2226],{"class":504},[147,3622,3623,3625,3627,3629],{"class":149,"line":312},[147,3624,2231],{"class":397},[147,3626,2234],{"class":397},[147,3628,2238],{"class":2237},[147,3630,1565],{"class":157},[147,3632,3633,3635,3637],{"class":149,"line":1454},[147,3634,404],{"class":397},[147,3636,2247],{"class":2237},[147,3638,2250],{"class":157},[147,3640,3641],{"class":149,"line":1469},[147,3642,1820],{"class":157},[147,3644,3645,3647,3649,3651,3653,3655,3657,3659,3661,3663,3665,3667],{"class":149,"line":1475},[147,3646,3475],{"class":397},[147,3648,1932],{"class":157},[147,3650,404],{"class":397},[147,3652,3306],{"class":157},[147,3654,445],{"class":397},[147,3656,590],{"class":448},[147,3658,3313],{"class":157},[147,3660,1309],{"class":397},[147,3662,845],{"class":448},[147,3664,3313],{"class":157},[147,3666,2566],{"class":397},[147,3668,407],{"class":157},[147,3670,3671],{"class":149,"line":1489},[147,3672,2304],{"class":157},[147,3674,3675,3678,3680,3682,3685,3687,3689,3692,3694,3696,3698,3700],{"class":149,"line":1495},[147,3676,3677],{"class":397},"        for",[147,3679,1932],{"class":157},[147,3681,404],{"class":397},[147,3683,3684],{"class":157}," j",[147,3686,445],{"class":397},[147,3688,590],{"class":448},[147,3690,3691],{"class":157},";j",[147,3693,1309],{"class":397},[147,3695,845],{"class":448},[147,3697,3691],{"class":157},[147,3699,2566],{"class":397},[147,3701,407],{"class":157},[147,3703,3704],{"class":149,"line":1586},[147,3705,2784],{"class":157},[147,3707,3708,3710,3712,3715],{"class":149,"line":1592},[147,3709,2789],{"class":157},[147,3711,1443],{"class":397},[147,3713,3714],{"class":504},"\"*\"",[147,3716,1565],{"class":157},[147,3718,3719],{"class":149,"line":1604},[147,3720,2803],{"class":157},[147,3722,3723,3726,3728],{"class":149,"line":1886},[147,3724,3725],{"class":157},"        cout",[147,3727,1443],{"class":397},[147,3729,1466],{"class":157},[147,3731,3732],{"class":149,"line":1891},[147,3733,2461],{"class":157},[147,3735,3736],{"class":149,"line":1897},[147,3737,1839],{"class":157},[19,3739,3740],{},"乘法口诀表",[138,3742,3744],{"className":388,"code":3743,"language":390,"meta":143,"style":143},"#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",[51,3745,3746,3752,3762,3770,3774,3800,3804,3829,3833,3873,3877,3885,3889],{"__ignoreMap":143},[147,3747,3748,3750],{"class":149,"line":150},[147,3749,2223],{"class":397},[147,3751,2608],{"class":504},[147,3753,3754,3756,3758,3760],{"class":149,"line":312},[147,3755,2231],{"class":397},[147,3757,2234],{"class":397},[147,3759,2238],{"class":2237},[147,3761,1565],{"class":157},[147,3763,3764,3766,3768],{"class":149,"line":1454},[147,3765,404],{"class":397},[147,3767,2247],{"class":2237},[147,3769,2250],{"class":157},[147,3771,3772],{"class":149,"line":1469},[147,3773,1820],{"class":157},[147,3775,3776,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798],{"class":149,"line":1475},[147,3777,3475],{"class":397},[147,3779,401],{"class":157},[147,3781,404],{"class":397},[147,3783,3306],{"class":157},[147,3785,445],{"class":397},[147,3787,616],{"class":448},[147,3789,3313],{"class":157},[147,3791,1309],{"class":397},[147,3793,845],{"class":448},[147,3795,3313],{"class":157},[147,3797,2566],{"class":397},[147,3799,407],{"class":157},[147,3801,3802],{"class":149,"line":1489},[147,3803,2304],{"class":157},[147,3805,3806,3808,3810,3812,3814,3816,3818,3820,3822,3825,3827],{"class":149,"line":1495},[147,3807,3677],{"class":397},[147,3809,401],{"class":157},[147,3811,404],{"class":397},[147,3813,3684],{"class":157},[147,3815,445],{"class":397},[147,3817,616],{"class":448},[147,3819,3691],{"class":157},[147,3821,1862],{"class":397},[147,3823,3824],{"class":157},"i;j",[147,3826,2566],{"class":397},[147,3828,407],{"class":157},[147,3830,3831],{"class":149,"line":1586},[147,3832,2784],{"class":157},[147,3834,3835,3837,3839,3841,3843,3845,3847,3849,3851,3854,3856,3858,3860,3862,3864,3867,3869,3871],{"class":149,"line":1592},[147,3836,2789],{"class":157},[147,3838,1443],{"class":397},[147,3840,866],{"class":157},[147,3842,1443],{"class":397},[147,3844,3714],{"class":504},[147,3846,1443],{"class":397},[147,3848,840],{"class":157},[147,3850,1443],{"class":397},[147,3852,3853],{"class":504},"\"=\"",[147,3855,1443],{"class":397},[147,3857,840],{"class":157},[147,3859,854],{"class":397},[147,3861,866],{"class":157},[147,3863,1443],{"class":397},[147,3865,3866],{"class":504},"'",[147,3868,1505],{"class":448},[147,3870,3866],{"class":504},[147,3872,1565],{"class":157},[147,3874,3875],{"class":149,"line":1604},[147,3876,2803],{"class":157},[147,3878,3879,3881,3883],{"class":149,"line":1886},[147,3880,3725],{"class":157},[147,3882,1443],{"class":397},[147,3884,1466],{"class":157},[147,3886,3887],{"class":149,"line":1891},[147,3888,2461],{"class":157},[147,3890,3891],{"class":149,"line":1897},[147,3892,1839],{"class":157},[367,3894,3896],{"id":3895},"_163跳出语句","1.6.3跳出语句",[350,3898,3899],{},[353,3900,3901],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,3903,3904],{},"break使用时机：",[1406,3906,3907,3910,3913],{},[353,3908,3909],{},"出现在switch条件语句中，作用是终止case并跳出switch",[353,3911,3912],{},"出现在循环结构中，作用是跳出当前的循环结构",[353,3914,3915],{},"出现在嵌套循环中，跳出最近的内层循环语句",[350,3917,3918,3921],{"start":312},[353,3919,3920],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[353,3922,3923],{},"goto语句\n语法：goto 标记;",[19,3925,3926],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[138,3928,3930],{"className":388,"code":3929,"language":390,"meta":143,"style":143},"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",[51,3931,3932,3940,3944,3957,3967,3980,3993,4006,4014,4030],{"__ignoreMap":143},[147,3933,3934,3936,3938],{"class":149,"line":150},[147,3935,404],{"class":397},[147,3937,2247],{"class":2237},[147,3939,2250],{"class":157},[147,3941,3942],{"class":149,"line":312},[147,3943,1820],{"class":157},[147,3945,3946,3948,3950,3953,3955],{"class":149,"line":1454},[147,3947,1825],{"class":157},[147,3949,1443],{"class":397},[147,3951,3952],{"class":504},"\"1\"",[147,3954,1443],{"class":397},[147,3956,1466],{"class":157},[147,3958,3959,3962,3965],{"class":149,"line":1469},[147,3960,3961],{"class":397},"    goto",[147,3963,3964],{"class":2237}," FLAG",[147,3966,1565],{"class":157},[147,3968,3969,3971,3973,3976,3978],{"class":149,"line":1475},[147,3970,1825],{"class":157},[147,3972,1443],{"class":397},[147,3974,3975],{"class":504},"\"2\"",[147,3977,1443],{"class":397},[147,3979,1466],{"class":157},[147,3981,3982,3984,3986,3989,3991],{"class":149,"line":1489},[147,3983,1825],{"class":157},[147,3985,1443],{"class":397},[147,3987,3988],{"class":504},"\"3\"",[147,3990,1443],{"class":397},[147,3992,1466],{"class":157},[147,3994,3995,3997,3999,4002,4004],{"class":149,"line":1495},[147,3996,1825],{"class":157},[147,3998,1443],{"class":397},[147,4000,4001],{"class":504},"\"4\"",[147,4003,1443],{"class":397},[147,4005,1466],{"class":157},[147,4007,4008,4011],{"class":149,"line":1586},[147,4009,4010],{"class":2237},"    FLAG",[147,4012,4013],{"class":157},":\n",[147,4015,4016,4018,4020,4023,4025,4027],{"class":149,"line":1592},[147,4017,1825],{"class":157},[147,4019,1443],{"class":397},[147,4021,4022],{"class":504},"\"5\"",[147,4024,1443],{"class":397},[147,4026,1513],{"class":157},[147,4028,4029],{"class":458},"\u002F\u002F跳过了2,3,4,直接到5\n",[147,4031,4032],{"class":149,"line":1604},[147,4033,1839],{"class":157},[14,4035,4037],{"id":4036},"_17数组","1.7数组",[367,4039,4041],{"id":4040},"_171一维数组","1.7.1一维数组",[350,4043,4044],{},[353,4045,4046],{},"一维数组定义方式",[537,4048,4049,4059],{},[540,4050,4051],{},[543,4052,4053,4056],{},[546,4054,4055],{},"方式",[546,4057,4058],{},"注意事项",[583,4060,4061,4075,4085],{},[543,4062,4063,4069],{},[588,4064,4065,4066,455],{},"数据类型 数组名",[147,4067,4068],{},"数组长度",[588,4070,4071,4072,4074],{},"这种方式是先定义再arr",[147,4073,840],{},"赋值",[543,4076,4077,4082],{},[588,4078,4065,4079,4081],{},[147,4080,4068],{},"={值1,值2....};",[588,4083,4084],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[543,4086,4087,4091],{},[588,4088,4065,4089,4081],{},[147,4090],{},[588,4092,4093,4094,4096],{},"int arr",[147,4095],{},";这是不正确的，按照这样的方式定义必须有初始长度",[350,4098,4099],{"start":312},[353,4100,4101],{},"一维数组数组名\n用途：",[1406,4103,4104],{},[353,4105,4106],{},"1.可以统计整个数组在内存中的长度：",[138,4108,4110],{"className":388,"code":4109,"language":390,"meta":143,"style":143},"sizeof(arr);\nsizeof(arr[0]);\n",[51,4111,4112,4119],{"__ignoreMap":143},[147,4113,4114,4116],{"class":149,"line":150},[147,4115,398],{"class":397},[147,4117,4118],{"class":157},"(arr);\n",[147,4120,4121,4123,4126,4128],{"class":149,"line":312},[147,4122,398],{"class":397},[147,4124,4125],{"class":157},"(arr[",[147,4127,590],{"class":448},[147,4129,4130],{"class":157},"]);\n",[1406,4132,4133],{},[353,4134,4135],{},"2.可以获取数组在内存中的首地址:",[138,4137,4139],{"className":388,"code":4138,"language":390,"meta":143,"style":143},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[51,4140,4141,4146,4159,4164],{"__ignoreMap":143},[147,4142,4143],{"class":149,"line":150},[147,4144,4145],{"class":458},"\u002F\u002F查看16进制的首地址\n",[147,4147,4148,4150,4152,4155,4157],{"class":149,"line":312},[147,4149,1644],{"class":157},[147,4151,1443],{"class":397},[147,4153,4154],{"class":157},"arr",[147,4156,1443],{"class":397},[147,4158,1466],{"class":157},[147,4160,4161],{"class":149,"line":1454},[147,4162,4163],{"class":458},"\u002F\u002F看10进制数\n",[147,4165,4166,4168,4170,4172,4174,4176,4178,4181,4183,4185,4187],{"class":149,"line":1469},[147,4167,1644],{"class":157},[147,4169,1443],{"class":397},[147,4171,401],{"class":157},[147,4173,404],{"class":397},[147,4175,828],{"class":157},[147,4177,752],{"class":397},[147,4179,4180],{"class":157},"arr[",[147,4182,590],{"class":448},[147,4184,1339],{"class":157},[147,4186,1443],{"class":397},[147,4188,1466],{"class":157},[19,4190,4191],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1406,4193,4194],{},[353,4195,4196],{},"1️⃣五只小猪称体重",[138,4198,4200],{"className":388,"code":4199,"language":390,"meta":143,"style":143},"#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",[51,4201,4202,4208,4218,4226,4230,4270,4283,4309,4313,4325,4329,4339,4343,4347,4360,4370],{"__ignoreMap":143},[147,4203,4204,4206],{"class":149,"line":150},[147,4205,2223],{"class":397},[147,4207,2226],{"class":504},[147,4209,4210,4212,4214,4216],{"class":149,"line":312},[147,4211,2231],{"class":397},[147,4213,2234],{"class":397},[147,4215,2238],{"class":2237},[147,4217,1565],{"class":157},[147,4219,4220,4222,4224],{"class":149,"line":1454},[147,4221,404],{"class":397},[147,4223,2247],{"class":2237},[147,4225,2250],{"class":157},[147,4227,4228],{"class":149,"line":1469},[147,4229,1820],{"class":157},[147,4231,4232,4234,4237,4239,4241,4243,4245,4248,4250,4253,4255,4257,4259,4262,4264,4267],{"class":149,"line":1475},[147,4233,2259],{"class":397},[147,4235,4236],{"class":157}," arr[",[147,4238,718],{"class":448},[147,4240,1339],{"class":157},[147,4242,445],{"class":397},[147,4244,1295],{"class":157},[147,4246,4247],{"class":448},"300",[147,4249,777],{"class":157},[147,4251,4252],{"class":448},"350",[147,4254,777],{"class":157},[147,4256,1996],{"class":448},[147,4258,777],{"class":157},[147,4260,4261],{"class":448},"400",[147,4263,777],{"class":157},[147,4265,4266],{"class":448},"250",[147,4268,4269],{"class":157},"};\n",[147,4271,4272,4274,4277,4279,4281],{"class":149,"line":1489},[147,4273,2259],{"class":397},[147,4275,4276],{"class":157}," tmp",[147,4278,445],{"class":397},[147,4280,590],{"class":448},[147,4282,1565],{"class":157},[147,4284,4285,4287,4289,4291,4293,4295,4297,4299,4301,4303,4305,4307],{"class":149,"line":1495},[147,4286,3475],{"class":397},[147,4288,1932],{"class":157},[147,4290,404],{"class":397},[147,4292,3306],{"class":157},[147,4294,445],{"class":397},[147,4296,590],{"class":448},[147,4298,3313],{"class":157},[147,4300,1309],{"class":397},[147,4302,718],{"class":448},[147,4304,3313],{"class":157},[147,4306,2566],{"class":397},[147,4308,407],{"class":157},[147,4310,4311],{"class":149,"line":1586},[147,4312,2304],{"class":157},[147,4314,4315,4317,4320,4322],{"class":149,"line":1592},[147,4316,2771],{"class":397},[147,4318,4319],{"class":157},"(tmp",[147,4321,1309],{"class":397},[147,4323,4324],{"class":157},"arr[i])\n",[147,4326,4327],{"class":149,"line":1604},[147,4328,2784],{"class":157},[147,4330,4331,4334,4336],{"class":149,"line":1886},[147,4332,4333],{"class":157},"            tmp",[147,4335,445],{"class":397},[147,4337,4338],{"class":157},"arr[i];\n",[147,4340,4341],{"class":149,"line":1891},[147,4342,2803],{"class":157},[147,4344,4345],{"class":149,"line":1897},[147,4346,2461],{"class":157},[147,4348,4349,4351,4353,4356,4358],{"class":149,"line":1902},[147,4350,1825],{"class":157},[147,4352,1443],{"class":397},[147,4354,4355],{"class":157},"tmp",[147,4357,1443],{"class":397},[147,4359,1466],{"class":157},[147,4361,4362,4365,4368],{"class":149,"line":1916},[147,4363,4364],{"class":397},"    return",[147,4366,4367],{"class":448}," 0",[147,4369,1565],{"class":157},[147,4371,4372],{"class":149,"line":1921},[147,4373,1839],{"class":157},[1406,4375,4376],{},[353,4377,4378],{},"2️⃣数组元素逆置",[138,4380,4382],{"className":388,"code":4381,"language":390,"meta":143,"style":143},"\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",[51,4383,4384,4389,4395,4405,4413,4417,4452,4468,4500,4513,4518,4523,4535,4545,4555,4560,4569,4579,4584,4589,4616,4620,4636,4640,4651,4660],{"__ignoreMap":143},[147,4385,4386],{"class":149,"line":150},[147,4387,4388],{"class":458},"\u002F\u002F元素逆置\n",[147,4390,4391,4393],{"class":149,"line":312},[147,4392,2223],{"class":397},[147,4394,2226],{"class":504},[147,4396,4397,4399,4401,4403],{"class":149,"line":1454},[147,4398,2231],{"class":397},[147,4400,2234],{"class":397},[147,4402,2238],{"class":2237},[147,4404,1565],{"class":157},[147,4406,4407,4409,4411],{"class":149,"line":1469},[147,4408,404],{"class":397},[147,4410,2247],{"class":2237},[147,4412,2250],{"class":157},[147,4414,4415],{"class":149,"line":1475},[147,4416,1820],{"class":157},[147,4418,4419,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450],{"class":149,"line":1489},[147,4420,4421],{"class":397},"   int",[147,4423,4236],{"class":157},[147,4425,718],{"class":448},[147,4427,1339],{"class":157},[147,4429,445],{"class":397},[147,4431,1295],{"class":157},[147,4433,616],{"class":448},[147,4435,777],{"class":157},[147,4437,477],{"class":448},[147,4439,777],{"class":157},[147,4441,471],{"class":448},[147,4443,777],{"class":157},[147,4445,692],{"class":448},[147,4447,777],{"class":157},[147,4449,718],{"class":448},[147,4451,4269],{"class":157},[147,4453,4454,4456,4459,4461,4463,4465],{"class":149,"line":1495},[147,4455,4421],{"class":397},[147,4457,4458],{"class":157}," start",[147,4460,445],{"class":397},[147,4462,590],{"class":448},[147,4464,455],{"class":157},[147,4466,4467],{"class":458},"\u002F\u002F起始下标\n",[147,4469,4470,4472,4475,4478,4481,4484,4486,4488,4491,4493,4495,4497],{"class":149,"line":1586},[147,4471,4421],{"class":397},[147,4473,4474],{"class":157}," end",[147,4476,4477],{"class":397},"=sizeof",[147,4479,4480],{"class":157},"(arr)",[147,4482,4483],{"class":397},"\u002Fsizeof",[147,4485,4125],{"class":157},[147,4487,590],{"class":448},[147,4489,4490],{"class":157},"])",[147,4492,931],{"class":397},[147,4494,616],{"class":448},[147,4496,455],{"class":157},[147,4498,4499],{"class":458},"\u002F\u002F结束下标\n",[147,4501,4502,4505,4508,4510],{"class":149,"line":1592},[147,4503,4504],{"class":397},"   while",[147,4506,4507],{"class":157}," (start",[147,4509,1309],{"class":397},[147,4511,4512],{"class":157},"end)\n",[147,4514,4515],{"class":149,"line":1604},[147,4516,4517],{"class":157},"   {\n",[147,4519,4520],{"class":149,"line":1886},[147,4521,4522],{"class":458},"    \u002F\u002F实现元素互换代码\n",[147,4524,4525,4527,4530,4532],{"class":149,"line":1891},[147,4526,2259],{"class":397},[147,4528,4529],{"class":157}," temp",[147,4531,445],{"class":397},[147,4533,4534],{"class":157},"arr[start];\n",[147,4536,4537,4540,4542],{"class":149,"line":1897},[147,4538,4539],{"class":157},"    arr[start]",[147,4541,445],{"class":397},[147,4543,4544],{"class":157},"arr[end];\n",[147,4546,4547,4550,4552],{"class":149,"line":1902},[147,4548,4549],{"class":157},"    arr[end]",[147,4551,445],{"class":397},[147,4553,4554],{"class":157},"temp;\n",[147,4556,4557],{"class":149,"line":1916},[147,4558,4559],{"class":458},"    \u002F\u002F下标更新\n",[147,4561,4562,4565,4567],{"class":149,"line":1921},[147,4563,4564],{"class":157},"    start",[147,4566,2566],{"class":397},[147,4568,1565],{"class":157},[147,4570,4571,4574,4577],{"class":149,"line":1927},[147,4572,4573],{"class":157},"    end",[147,4575,4576],{"class":397},"--",[147,4578,1565],{"class":157},[147,4580,4581],{"class":149,"line":1948},[147,4582,4583],{"class":157},"   }\n",[147,4585,4586],{"class":149,"line":1953},[147,4587,4588],{"class":458},"   \u002F\u002F输出逆置后的数组\n",[147,4590,4591,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614],{"class":149,"line":1967},[147,4592,4593],{"class":397},"   for",[147,4595,1932],{"class":157},[147,4597,404],{"class":397},[147,4599,3306],{"class":157},[147,4601,445],{"class":397},[147,4603,590],{"class":448},[147,4605,3313],{"class":157},[147,4607,1309],{"class":397},[147,4609,718],{"class":448},[147,4611,3313],{"class":157},[147,4613,2566],{"class":397},[147,4615,407],{"class":157},[147,4617,4618],{"class":149,"line":1972},[147,4619,4517],{"class":157},[147,4621,4622,4624,4626,4629,4631,4634],{"class":149,"line":2001},[147,4623,1825],{"class":157},[147,4625,1443],{"class":397},[147,4627,4628],{"class":157},"arr[i]",[147,4630,1443],{"class":397},[147,4632,4633],{"class":504},"\" \"",[147,4635,1565],{"class":157},[147,4637,4638],{"class":149,"line":2006},[147,4639,4583],{"class":157},[147,4641,4642,4645,4647,4649],{"class":149,"line":2023},[147,4643,4644],{"class":2237},"   system",[147,4646,401],{"class":157},[147,4648,2582],{"class":504},[147,4650,2993],{"class":157},[147,4652,4653,4656,4658],{"class":149,"line":2028},[147,4654,4655],{"class":397},"   return",[147,4657,4367],{"class":448},[147,4659,1565],{"class":157},[147,4661,4662],{"class":149,"line":2033},[147,4663,1839],{"class":157},[1406,4665,4666],{},[353,4667,4668],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[138,4670,4672],{"className":388,"code":4671,"language":390,"meta":143,"style":143},"\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",[51,4673,4674,4679,4685,4695,4703,4707,4759,4772,4798,4802,4816,4820,4825,4830,4860,4864,4869,4903,4907,4912,4932,4937,4949,4965,4980,4985,4989,4993,5006,5032,5036,5050,5054,5062],{"__ignoreMap":143},[147,4675,4676],{"class":149,"line":150},[147,4677,4678],{"class":458},"\u002F\u002F冒泡排序,升序\n",[147,4680,4681,4683],{"class":149,"line":312},[147,4682,2223],{"class":397},[147,4684,2226],{"class":504},[147,4686,4687,4689,4691,4693],{"class":149,"line":1454},[147,4688,2231],{"class":397},[147,4690,2234],{"class":397},[147,4692,2238],{"class":2237},[147,4694,1565],{"class":157},[147,4696,4697,4699,4701],{"class":149,"line":1469},[147,4698,404],{"class":397},[147,4700,2247],{"class":2237},[147,4702,2250],{"class":157},[147,4704,4705],{"class":149,"line":1475},[147,4706,1820],{"class":157},[147,4708,4709,4711,4713,4715,4718,4720,4723,4725,4727,4729,4731,4733,4735,4737,4739,4741,4743,4745,4747,4749,4751,4753,4755,4757],{"class":149,"line":1489},[147,4710,2259],{"class":397},[147,4712,4236],{"class":157},[147,4714,819],{"class":448},[147,4716,4717],{"class":157},"] ",[147,4719,445],{"class":397},[147,4721,4722],{"class":157}," {",[147,4724,692],{"class":448},[147,4726,777],{"class":157},[147,4728,477],{"class":448},[147,4730,777],{"class":157},[147,4732,794],{"class":448},[147,4734,777],{"class":157},[147,4736,590],{"class":448},[147,4738,777],{"class":157},[147,4740,718],{"class":448},[147,4742,777],{"class":157},[147,4744,768],{"class":448},[147,4746,777],{"class":157},[147,4748,616],{"class":448},[147,4750,777],{"class":157},[147,4752,471],{"class":448},[147,4754,777],{"class":157},[147,4756,819],{"class":448},[147,4758,4269],{"class":157},[147,4760,4761,4763,4765,4768,4770],{"class":149,"line":1495},[147,4762,1825],{"class":157},[147,4764,1443],{"class":397},[147,4766,4767],{"class":504},"\"排序前：\"",[147,4769,1443],{"class":397},[147,4771,1466],{"class":157},[147,4773,4774,4776,4778,4780,4782,4784,4786,4788,4790,4792,4794,4796],{"class":149,"line":1586},[147,4775,3475],{"class":397},[147,4777,1932],{"class":157},[147,4779,404],{"class":397},[147,4781,3306],{"class":157},[147,4783,445],{"class":397},[147,4785,590],{"class":448},[147,4787,3313],{"class":157},[147,4789,1309],{"class":397},[147,4791,819],{"class":448},[147,4793,3313],{"class":157},[147,4795,2566],{"class":397},[147,4797,407],{"class":157},[147,4799,4800],{"class":149,"line":1592},[147,4801,2304],{"class":157},[147,4803,4804,4806,4808,4810,4812,4814],{"class":149,"line":1604},[147,4805,3725],{"class":157},[147,4807,1443],{"class":397},[147,4809,4628],{"class":157},[147,4811,1443],{"class":397},[147,4813,4633],{"class":504},[147,4815,1565],{"class":157},[147,4817,4818],{"class":149,"line":1886},[147,4819,2461],{"class":157},[147,4821,4822],{"class":149,"line":1891},[147,4823,4824],{"class":458},"    \u002F\u002F开始冒泡排序\n",[147,4826,4827],{"class":149,"line":1897},[147,4828,4829],{"class":458},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[147,4831,4832,4834,4836,4838,4840,4842,4844,4846,4848,4850,4852,4854,4856,4858],{"class":149,"line":1902},[147,4833,3475],{"class":397},[147,4835,1932],{"class":157},[147,4837,404],{"class":397},[147,4839,3306],{"class":157},[147,4841,445],{"class":397},[147,4843,590],{"class":448},[147,4845,3313],{"class":157},[147,4847,1309],{"class":397},[147,4849,819],{"class":448},[147,4851,931],{"class":397},[147,4853,616],{"class":448},[147,4855,3313],{"class":157},[147,4857,2566],{"class":397},[147,4859,407],{"class":157},[147,4861,4862],{"class":149,"line":1916},[147,4863,2304],{"class":157},[147,4865,4866],{"class":149,"line":1921},[147,4867,4868],{"class":458},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[147,4870,4871,4873,4875,4877,4879,4881,4883,4885,4887,4889,4891,4893,4895,4897,4899,4901],{"class":149,"line":1927},[147,4872,3677],{"class":397},[147,4874,1932],{"class":157},[147,4876,404],{"class":397},[147,4878,3684],{"class":157},[147,4880,445],{"class":397},[147,4882,590],{"class":448},[147,4884,3691],{"class":157},[147,4886,1309],{"class":397},[147,4888,819],{"class":448},[147,4890,931],{"class":397},[147,4892,840],{"class":157},[147,4894,931],{"class":397},[147,4896,616],{"class":448},[147,4898,3691],{"class":157},[147,4900,2566],{"class":397},[147,4902,407],{"class":157},[147,4904,4905],{"class":149,"line":1948},[147,4906,2784],{"class":157},[147,4908,4909],{"class":149,"line":1953},[147,4910,4911],{"class":458},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[147,4913,4914,4917,4920,4922,4925,4927,4929],{"class":149,"line":1967},[147,4915,4916],{"class":397},"            if",[147,4918,4919],{"class":157},"(arr[j]",[147,4921,1359],{"class":397},[147,4923,4924],{"class":157},"arr[j",[147,4926,880],{"class":397},[147,4928,616],{"class":448},[147,4930,4931],{"class":157},"])\n",[147,4933,4934],{"class":149,"line":1972},[147,4935,4936],{"class":157},"            {\n",[147,4938,4939,4942,4944,4946],{"class":149,"line":2001},[147,4940,4941],{"class":397},"                int",[147,4943,4529],{"class":157},[147,4945,445],{"class":397},[147,4947,4948],{"class":157},"arr[j];\n",[147,4950,4951,4954,4956,4958,4960,4962],{"class":149,"line":2006},[147,4952,4953],{"class":157},"                arr[j]",[147,4955,445],{"class":397},[147,4957,4924],{"class":157},[147,4959,880],{"class":397},[147,4961,616],{"class":448},[147,4963,4964],{"class":157},"];\n",[147,4966,4967,4970,4972,4974,4976,4978],{"class":149,"line":2023},[147,4968,4969],{"class":157},"                arr[j",[147,4971,880],{"class":397},[147,4973,616],{"class":448},[147,4975,1339],{"class":157},[147,4977,445],{"class":397},[147,4979,4554],{"class":157},[147,4981,4982],{"class":149,"line":2028},[147,4983,4984],{"class":157},"            }\n",[147,4986,4987],{"class":149,"line":2033},[147,4988,2803],{"class":157},[147,4990,4991],{"class":149,"line":2038},[147,4992,2461],{"class":157},[147,4994,4995,4997,4999,5002,5004],{"class":149,"line":2052},[147,4996,1825],{"class":157},[147,4998,1443],{"class":397},[147,5000,5001],{"class":504},"\"排序后：\"",[147,5003,1443],{"class":397},[147,5005,1466],{"class":157},[147,5007,5008,5010,5012,5014,5016,5018,5020,5022,5024,5026,5028,5030],{"class":149,"line":2057},[147,5009,3475],{"class":397},[147,5011,1932],{"class":157},[147,5013,404],{"class":397},[147,5015,3306],{"class":157},[147,5017,445],{"class":397},[147,5019,590],{"class":448},[147,5021,3313],{"class":157},[147,5023,1309],{"class":397},[147,5025,819],{"class":448},[147,5027,3313],{"class":157},[147,5029,2566],{"class":397},[147,5031,407],{"class":157},[147,5033,5034],{"class":149,"line":2851},[147,5035,2304],{"class":157},[147,5037,5038,5040,5042,5044,5046,5048],{"class":149,"line":2865},[147,5039,3725],{"class":157},[147,5041,1443],{"class":397},[147,5043,4628],{"class":157},[147,5045,1443],{"class":397},[147,5047,4633],{"class":504},[147,5049,1565],{"class":157},[147,5051,5052],{"class":149,"line":2873},[147,5053,2461],{"class":157},[147,5055,5056,5058,5060],{"class":149,"line":2878},[147,5057,4364],{"class":397},[147,5059,4367],{"class":448},[147,5061,1565],{"class":157},[147,5063,5064],{"class":149,"line":2884},[147,5065,1839],{"class":157},[367,5067,5069],{"id":5068},"_172二维数组","1.7.2二维数组",[350,5071,5072],{},[353,5073,5074],{},"二维数组的四种定义方式",[537,5076,5077,5086],{},[540,5078,5079],{},[543,5080,5081,5084],{},[546,5082,5083],{},"序号",[546,5085,4055],{},[583,5087,5088,5098,5107,5116,5125],{},[543,5089,5090,5092],{},[588,5091,616],{},[588,5093,5094,5095,455],{},"数据类型 数组名[行数]",[147,5096,5097],{},"列数",[543,5099,5100,5102],{},[588,5101,477],{},[588,5103,5094,5104,5106],{},[147,5105,5097],{},"={ {数据1,数据2}，{数据3，数据4}... }",[543,5108,5109,5111],{},[588,5110,471],{},[588,5112,5094,5113,5115],{},[147,5114,5097],{},"={数据1,数据2,数据3...}",[543,5117,5118,5120],{},[588,5119,692],{},[588,5121,5122,5123,5115],{},"数据类型 数组名[]",[147,5124,5097],{},[543,5126,5127,5130],{},[588,5128,5129],{},"注意：不能只省略列数",[588,5131],{},[350,5133,5134],{"start":312},[353,5135,5136],{},"二维数组数组名",[1406,5138,5139,5142],{},[353,5140,5141],{},"1.查看二维数组所占内存空间",[353,5143,5144],{},"2.获取二维数组首地址",[19,5146,5147],{},"已知二维数组，求二维数组的行数与列数",[138,5149,5151],{"className":388,"code":5150,"language":390,"meta":143,"style":143},"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",[51,5152,5153,5161,5165,5183,5187,5205,5221,5226,5251,5284],{"__ignoreMap":143},[147,5154,5155,5157,5159],{"class":149,"line":150},[147,5156,404],{"class":397},[147,5158,2247],{"class":2237},[147,5160,2250],{"class":157},[147,5162,5163],{"class":149,"line":312},[147,5164,1820],{"class":157},[147,5166,5167,5169,5171,5173,5176,5178,5180],{"class":149,"line":1454},[147,5168,2259],{"class":397},[147,5170,4236],{"class":157},[147,5172,477],{"class":448},[147,5174,5175],{"class":157},"][",[147,5177,471],{"class":448},[147,5179,1339],{"class":157},[147,5181,5182],{"class":397},"=\n",[147,5184,5185],{"class":149,"line":1469},[147,5186,2304],{"class":157},[147,5188,5189,5192,5194,5196,5198,5200,5202],{"class":149,"line":1475},[147,5190,5191],{"class":157},"        {",[147,5193,616],{"class":448},[147,5195,777],{"class":157},[147,5197,477],{"class":448},[147,5199,777],{"class":157},[147,5201,471],{"class":448},[147,5203,5204],{"class":157},"},\n",[147,5206,5207,5209,5211,5213,5215,5217,5219],{"class":149,"line":1489},[147,5208,5191],{"class":157},[147,5210,692],{"class":448},[147,5212,777],{"class":157},[147,5214,718],{"class":448},[147,5216,777],{"class":157},[147,5218,743],{"class":448},[147,5220,1839],{"class":157},[147,5222,5223],{"class":149,"line":1495},[147,5224,5225],{"class":157},"    };\n",[147,5227,5228,5230,5232,5235,5237,5239,5241,5243,5245,5247,5249],{"class":149,"line":1586},[147,5229,1825],{"class":157},[147,5231,1443],{"class":397},[147,5233,5234],{"class":504},"\"二维数组的行数\"",[147,5236,1647],{"class":397},[147,5238,4480],{"class":157},[147,5240,4483],{"class":397},[147,5242,4125],{"class":157},[147,5244,590],{"class":448},[147,5246,4490],{"class":157},[147,5248,1443],{"class":397},[147,5250,1466],{"class":157},[147,5252,5253,5255,5257,5260,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280,5282],{"class":149,"line":1592},[147,5254,1825],{"class":157},[147,5256,1443],{"class":397},[147,5258,5259],{"class":504},"\"二维数组的列数\"",[147,5261,1647],{"class":397},[147,5263,4125],{"class":157},[147,5265,590],{"class":448},[147,5267,4490],{"class":157},[147,5269,4483],{"class":397},[147,5271,4125],{"class":157},[147,5273,590],{"class":448},[147,5275,5175],{"class":157},[147,5277,590],{"class":448},[147,5279,4490],{"class":157},[147,5281,1443],{"class":397},[147,5283,1466],{"class":157},[147,5285,5286],{"class":149,"line":1604},[147,5287,1839],{"class":157},[19,5289,5290],{},"查看二维数组首地址",[138,5292,5294],{"className":388,"code":5293,"language":390,"meta":143,"style":143},"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",[51,5295,5296,5313,5339,5364],{"__ignoreMap":143},[147,5297,5298,5300,5302,5305,5307,5309,5311],{"class":149,"line":150},[147,5299,1644],{"class":157},[147,5301,1443],{"class":397},[147,5303,5304],{"class":504},"\"二维数组首地址：\"",[147,5306,1443],{"class":397},[147,5308,4154],{"class":157},[147,5310,1443],{"class":397},[147,5312,1466],{"class":157},[147,5314,5315,5317,5319,5322,5324,5326,5328,5331,5333,5335,5337],{"class":149,"line":312},[147,5316,1644],{"class":157},[147,5318,1443],{"class":397},[147,5320,5321],{"class":504},"\"二维数组第一行的首地址：\"",[147,5323,1443],{"class":397},[147,5325,401],{"class":157},[147,5327,404],{"class":397},[147,5329,5330],{"class":157},")arr[",[147,5332,590],{"class":448},[147,5334,1339],{"class":157},[147,5336,1443],{"class":397},[147,5338,1466],{"class":157},[147,5340,5341,5343,5345,5348,5350,5352,5354,5356,5358,5360,5362],{"class":149,"line":1454},[147,5342,1644],{"class":157},[147,5344,1443],{"class":397},[147,5346,5347],{"class":504},"\"二维数组第二行的首地址：\"",[147,5349,1443],{"class":397},[147,5351,401],{"class":157},[147,5353,404],{"class":397},[147,5355,5330],{"class":157},[147,5357,616],{"class":448},[147,5359,1339],{"class":157},[147,5361,1443],{"class":397},[147,5363,1466],{"class":157},[147,5365,5366,5368,5370,5373,5375,5377,5379,5381,5383,5385,5387,5389,5391,5393,5395,5397],{"class":149,"line":1469},[147,5367,1644],{"class":157},[147,5369,1443],{"class":397},[147,5371,5372],{"class":504},"\"二维数组第一个元素的首地址:\"",[147,5374,1443],{"class":397},[147,5376,401],{"class":157},[147,5378,404],{"class":397},[147,5380,828],{"class":157},[147,5382,752],{"class":397},[147,5384,4180],{"class":157},[147,5386,590],{"class":448},[147,5388,5175],{"class":157},[147,5390,590],{"class":448},[147,5392,1339],{"class":157},[147,5394,1443],{"class":397},[147,5396,1513],{"class":157},[147,5398,5399],{"class":458},"\u002F\u002F对于数，要加取址符\n",[308,5401,5402],{},"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":143,"searchDepth":312,"depth":312,"links":5404},[5405,5406,5407,5415,5416,5422,5427],{"id":340,"depth":312,"text":341},{"id":347,"depth":312,"text":348},{"id":364,"depth":312,"text":365,"children":5408},[5409,5410,5411,5412,5413,5414],{"id":369,"depth":1454,"text":370},{"id":417,"depth":1454,"text":418},{"id":485,"depth":1454,"text":486},{"id":1424,"depth":1454,"text":1425},{"id":1519,"depth":1454,"text":1520},{"id":1618,"depth":1454,"text":1619},{"id":1660,"depth":312,"text":1661},{"id":1728,"depth":312,"text":1729,"children":5417},[5418,5419,5420,5421],{"id":1732,"depth":1454,"text":1733},{"id":1753,"depth":1454,"text":1754},{"id":1762,"depth":1454,"text":1763},{"id":1771,"depth":1454,"text":1772},{"id":1780,"depth":312,"text":1781,"children":5423},[5424,5425,5426],{"id":1784,"depth":1454,"text":1785},{"id":2479,"depth":1454,"text":2480},{"id":3895,"depth":1454,"text":3896},{"id":4036,"depth":312,"text":4037,"children":5428},[5429,5430],{"id":4040,"depth":1454,"text":4041},{"id":5068,"depth":1454,"text":5069},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":332,"description":143},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5437,"title":5438,"body":5439,"description":143,"extension":322,"meta":6539,"navigation":324,"path":6540,"seo":6541,"stem":6542,"__hash__":6543},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5440,"toc":6531},[5441,5444,5448,5456,5464,5467,5533,5537,5540,5616,5620,5623,5626,5629,5842,5846,5851,5915,5920,5987,5992,6083,6086,6191,6195,6198,6204,6348,6352,6355,6369,6372,6417,6420,6528],[10,5442,5438],{"id":5443},"_2函数",[14,5445,5447],{"id":5446},"_21函数概述","2.1函数概述",[350,5449,5450,5453],{},[353,5451,5452],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[353,5454,5455],{},"语法：",[138,5457,5462],{"className":5458,"code":5460,"language":5461,"meta":143},[5459],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[51,5463,5460],{"__ignoreMap":143},[19,5465,5466],{},"小案例",[138,5468,5470],{"className":388,"code":5469,"language":390,"meta":143,"style":143},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[51,5471,5472,5477,5501,5505,5522,5529],{"__ignoreMap":143},[147,5473,5474],{"class":149,"line":150},[147,5475,5476],{"class":458},"\u002F\u002Fnum1,num2形参\n",[147,5478,5479,5481,5484,5486,5488,5492,5494,5496,5499],{"class":149,"line":312},[147,5480,404],{"class":397},[147,5482,5483],{"class":2237}," add",[147,5485,401],{"class":157},[147,5487,404],{"class":397},[147,5489,5491],{"class":5490},"s4XuR"," num1",[147,5493,777],{"class":157},[147,5495,404],{"class":397},[147,5497,5498],{"class":5490}," num2",[147,5500,407],{"class":157},[147,5502,5503],{"class":149,"line":1454},[147,5504,1820],{"class":157},[147,5506,5507,5509,5512,5514,5517,5519],{"class":149,"line":1469},[147,5508,2259],{"class":397},[147,5510,5511],{"class":157}," sum",[147,5513,445],{"class":397},[147,5515,5516],{"class":157},"num1",[147,5518,880],{"class":397},[147,5520,5521],{"class":157},"num2;\n",[147,5523,5524,5526],{"class":149,"line":1475},[147,5525,4364],{"class":397},[147,5527,5528],{"class":157}," sum;\n",[147,5530,5531],{"class":149,"line":1489},[147,5532,1839],{"class":157},[14,5534,5536],{"id":5535},"_22函数调用","2.2函数调用",[19,5538,5539],{},"调用刚刚写的求和函数",[138,5541,5543],{"className":388,"code":5542,"language":390,"meta":143,"style":143},"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",[51,5544,5545,5553,5557,5562,5574,5586,5595,5600,5612],{"__ignoreMap":143},[147,5546,5547,5549,5551],{"class":149,"line":150},[147,5548,404],{"class":397},[147,5550,2247],{"class":2237},[147,5552,2250],{"class":157},[147,5554,5555],{"class":149,"line":312},[147,5556,1820],{"class":157},[147,5558,5559],{"class":149,"line":1454},[147,5560,5561],{"class":458},"    \u002F\u002Fa,b实参\n",[147,5563,5564,5566,5568,5570,5572],{"class":149,"line":1469},[147,5565,2259],{"class":397},[147,5567,1673],{"class":157},[147,5569,445],{"class":397},[147,5571,590],{"class":448},[147,5573,1565],{"class":157},[147,5575,5576,5578,5580,5582,5584],{"class":149,"line":1475},[147,5577,2259],{"class":397},[147,5579,3107],{"class":157},[147,5581,445],{"class":397},[147,5583,590],{"class":448},[147,5585,1565],{"class":157},[147,5587,5588,5590,5592],{"class":149,"line":1489},[147,5589,2286],{"class":157},[147,5591,1704],{"class":397},[147,5593,5594],{"class":157},"a,b;\n",[147,5596,5597],{"class":149,"line":1495},[147,5598,5599],{"class":458},"    \u002F\u002F调用函数时，实参值传给了形参\n",[147,5601,5602,5604,5606,5609],{"class":149,"line":1586},[147,5603,1825],{"class":157},[147,5605,1443],{"class":397},[147,5607,5608],{"class":2237},"add",[147,5610,5611],{"class":157},"(a,b);\n",[147,5613,5614],{"class":149,"line":1592},[147,5615,1839],{"class":157},[14,5617,5619],{"id":5618},"_23值传递","2.3值传递",[19,5621,5622],{},"值传递就是函数调用时实参将数值传给形参",[19,5624,5625],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,5627,5628],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[138,5630,5632],{"className":388,"code":5631,"language":390,"meta":143,"style":143},"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",[51,5633,5634,5656,5660,5673,5690,5708,5719,5728,5737,5750,5766,5782,5791,5795,5803,5807,5819,5831,5838],{"__ignoreMap":143},[147,5635,5636,5639,5642,5644,5646,5648,5650,5652,5654],{"class":149,"line":150},[147,5637,5638],{"class":397},"void",[147,5640,5641],{"class":2237}," swap",[147,5643,401],{"class":157},[147,5645,404],{"class":397},[147,5647,5491],{"class":5490},[147,5649,777],{"class":157},[147,5651,404],{"class":397},[147,5653,5498],{"class":5490},[147,5655,407],{"class":157},[147,5657,5658],{"class":149,"line":312},[147,5659,1820],{"class":157},[147,5661,5662,5664,5666,5669,5671],{"class":149,"line":1454},[147,5663,1825],{"class":157},[147,5665,1443],{"class":397},[147,5667,5668],{"class":504},"\"交换前：\"",[147,5670,1443],{"class":397},[147,5672,1466],{"class":157},[147,5674,5675,5677,5679,5682,5684,5686,5688],{"class":149,"line":1469},[147,5676,1825],{"class":157},[147,5678,1443],{"class":397},[147,5680,5681],{"class":504},"\"num1=\"",[147,5683,1443],{"class":397},[147,5685,5516],{"class":157},[147,5687,1443],{"class":397},[147,5689,1466],{"class":157},[147,5691,5692,5694,5696,5699,5701,5704,5706],{"class":149,"line":1475},[147,5693,1825],{"class":157},[147,5695,1443],{"class":397},[147,5697,5698],{"class":504},"\"num2=\"",[147,5700,1443],{"class":397},[147,5702,5703],{"class":157},"num2",[147,5705,1443],{"class":397},[147,5707,1466],{"class":157},[147,5709,5710,5712,5714,5716],{"class":149,"line":1489},[147,5711,2259],{"class":397},[147,5713,4529],{"class":157},[147,5715,445],{"class":397},[147,5717,5718],{"class":157},"num1;\n",[147,5720,5721,5724,5726],{"class":149,"line":1495},[147,5722,5723],{"class":157},"    num1",[147,5725,445],{"class":397},[147,5727,5521],{"class":157},[147,5729,5730,5733,5735],{"class":149,"line":1586},[147,5731,5732],{"class":157},"    num2",[147,5734,445],{"class":397},[147,5736,4554],{"class":157},[147,5738,5739,5741,5743,5746,5748],{"class":149,"line":1592},[147,5740,1825],{"class":157},[147,5742,1443],{"class":397},[147,5744,5745],{"class":504},"\"交换后：\"",[147,5747,1443],{"class":397},[147,5749,1466],{"class":157},[147,5751,5752,5754,5756,5758,5760,5762,5764],{"class":149,"line":1604},[147,5753,1825],{"class":157},[147,5755,1443],{"class":397},[147,5757,5681],{"class":504},[147,5759,1443],{"class":397},[147,5761,5516],{"class":157},[147,5763,1443],{"class":397},[147,5765,1466],{"class":157},[147,5767,5768,5770,5772,5774,5776,5778,5780],{"class":149,"line":1886},[147,5769,1825],{"class":157},[147,5771,1443],{"class":397},[147,5773,5698],{"class":504},[147,5775,1443],{"class":397},[147,5777,5703],{"class":157},[147,5779,1443],{"class":397},[147,5781,1466],{"class":157},[147,5783,5784,5786,5788],{"class":149,"line":1891},[147,5785,4364],{"class":397},[147,5787,455],{"class":157},[147,5789,5790],{"class":458},"\u002F\u002F或者不写\n",[147,5792,5793],{"class":149,"line":1897},[147,5794,1839],{"class":157},[147,5796,5797,5799,5801],{"class":149,"line":1902},[147,5798,404],{"class":397},[147,5800,2247],{"class":2237},[147,5802,2250],{"class":157},[147,5804,5805],{"class":149,"line":1916},[147,5806,1820],{"class":157},[147,5808,5809,5811,5813,5815,5817],{"class":149,"line":1921},[147,5810,2259],{"class":397},[147,5812,1673],{"class":157},[147,5814,445],{"class":397},[147,5816,845],{"class":448},[147,5818,1565],{"class":157},[147,5820,5821,5823,5825,5827,5829],{"class":149,"line":1927},[147,5822,2259],{"class":397},[147,5824,3107],{"class":157},[147,5826,445],{"class":397},[147,5828,1099],{"class":448},[147,5830,1565],{"class":157},[147,5832,5833,5836],{"class":149,"line":1948},[147,5834,5835],{"class":2237},"    swap",[147,5837,5611],{"class":157},[147,5839,5840],{"class":149,"line":1953},[147,5841,1839],{"class":157},[14,5843,5845],{"id":5844},"_24函数的常见形式","2.4函数的常见形式",[350,5847,5848],{},[353,5849,5850],{},"无参无返",[138,5852,5854],{"className":388,"code":5853,"language":390,"meta":143,"style":143},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[51,5855,5856,5865,5869,5882,5886,5894,5898,5903,5911],{"__ignoreMap":143},[147,5857,5858,5860,5863],{"class":149,"line":150},[147,5859,5638],{"class":397},[147,5861,5862],{"class":2237}," test01",[147,5864,2250],{"class":157},[147,5866,5867],{"class":149,"line":312},[147,5868,1820],{"class":157},[147,5870,5871,5873,5875,5878,5880],{"class":149,"line":1454},[147,5872,1825],{"class":157},[147,5874,1443],{"class":397},[147,5876,5877],{"class":504},"\"你好\"",[147,5879,1443],{"class":397},[147,5881,1466],{"class":157},[147,5883,5884],{"class":149,"line":1469},[147,5885,1839],{"class":157},[147,5887,5888,5890,5892],{"class":149,"line":1475},[147,5889,404],{"class":397},[147,5891,2247],{"class":2237},[147,5893,2250],{"class":157},[147,5895,5896],{"class":149,"line":1489},[147,5897,1820],{"class":157},[147,5899,5900],{"class":149,"line":1495},[147,5901,5902],{"class":458},"    \u002F\u002F函数调用\n",[147,5904,5905,5908],{"class":149,"line":1586},[147,5906,5907],{"class":2237},"    test01",[147,5909,5910],{"class":157},"();\n",[147,5912,5913],{"class":149,"line":1592},[147,5914,1839],{"class":157},[350,5916,5917],{"start":312},[353,5918,5919],{},"有参无返",[138,5921,5923],{"className":388,"code":5922,"language":390,"meta":143,"style":143},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[51,5924,5925,5940,5944,5956,5960,5968,5972,5983],{"__ignoreMap":143},[147,5926,5927,5929,5932,5934,5936,5938],{"class":149,"line":150},[147,5928,5638],{"class":397},[147,5930,5931],{"class":2237}," test02",[147,5933,401],{"class":157},[147,5935,404],{"class":397},[147,5937,1673],{"class":5490},[147,5939,407],{"class":157},[147,5941,5942],{"class":149,"line":312},[147,5943,1820],{"class":157},[147,5945,5946,5948,5950,5952,5954],{"class":149,"line":1454},[147,5947,1825],{"class":157},[147,5949,1443],{"class":397},[147,5951,5877],{"class":504},[147,5953,1443],{"class":397},[147,5955,1466],{"class":157},[147,5957,5958],{"class":149,"line":1469},[147,5959,1839],{"class":157},[147,5961,5962,5964,5966],{"class":149,"line":1475},[147,5963,404],{"class":397},[147,5965,2247],{"class":2237},[147,5967,2250],{"class":157},[147,5969,5970],{"class":149,"line":1489},[147,5971,1820],{"class":157},[147,5973,5974,5977,5979,5981],{"class":149,"line":1495},[147,5975,5976],{"class":2237},"    test02",[147,5978,401],{"class":157},[147,5980,710],{"class":448},[147,5982,2993],{"class":157},[147,5984,5985],{"class":149,"line":1586},[147,5986,1839],{"class":157},[350,5988,5989],{"start":1454},[353,5990,5991],{},"无参有返",[138,5993,5995],{"className":388,"code":5994,"language":390,"meta":143,"style":143},"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",[51,5996,5997,6006,6010,6022,6031,6035,6043,6047,6060,6079],{"__ignoreMap":143},[147,5998,5999,6001,6004],{"class":149,"line":150},[147,6000,404],{"class":397},[147,6002,6003],{"class":2237}," test03",[147,6005,2250],{"class":157},[147,6007,6008],{"class":149,"line":312},[147,6009,1820],{"class":157},[147,6011,6012,6014,6016,6018,6020],{"class":149,"line":1454},[147,6013,1825],{"class":157},[147,6015,1443],{"class":397},[147,6017,5877],{"class":504},[147,6019,1443],{"class":397},[147,6021,1466],{"class":157},[147,6023,6024,6026,6029],{"class":149,"line":1469},[147,6025,4364],{"class":397},[147,6027,6028],{"class":448}," 100",[147,6030,1565],{"class":157},[147,6032,6033],{"class":149,"line":1475},[147,6034,1839],{"class":157},[147,6036,6037,6039,6041],{"class":149,"line":1489},[147,6038,404],{"class":397},[147,6040,2247],{"class":2237},[147,6042,2250],{"class":157},[147,6044,6045],{"class":149,"line":1495},[147,6046,1820],{"class":157},[147,6048,6049,6051,6053,6055,6058],{"class":149,"line":1586},[147,6050,2259],{"class":397},[147,6052,5491],{"class":157},[147,6054,445],{"class":397},[147,6056,6057],{"class":2237},"test03",[147,6059,5910],{"class":157},[147,6061,6062,6064,6066,6068,6070,6072,6074,6076],{"class":149,"line":1592},[147,6063,1825],{"class":157},[147,6065,1443],{"class":397},[147,6067,5681],{"class":504},[147,6069,1443],{"class":397},[147,6071,5516],{"class":157},[147,6073,1443],{"class":397},[147,6075,1513],{"class":157},[147,6077,6078],{"class":458}," \u002F\u002F100\n",[147,6080,6081],{"class":149,"line":1604},[147,6082,1839],{"class":157},[19,6084,6085],{},"4.有参有返",[138,6087,6089],{"className":388,"code":6088,"language":390,"meta":143,"style":143},"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",[51,6090,6091,6106,6110,6123,6129,6133,6142,6146,6158,6172,6187],{"__ignoreMap":143},[147,6092,6093,6095,6098,6100,6102,6104],{"class":149,"line":150},[147,6094,404],{"class":397},[147,6096,6097],{"class":2237}," test04",[147,6099,401],{"class":157},[147,6101,404],{"class":397},[147,6103,1673],{"class":5490},[147,6105,407],{"class":157},[147,6107,6108],{"class":149,"line":312},[147,6109,1820],{"class":157},[147,6111,6112,6114,6116,6119,6121],{"class":149,"line":1454},[147,6113,1825],{"class":157},[147,6115,1443],{"class":397},[147,6117,6118],{"class":504},"\"hello\"",[147,6120,1443],{"class":397},[147,6122,1466],{"class":157},[147,6124,6125,6127],{"class":149,"line":1469},[147,6126,4364],{"class":397},[147,6128,1707],{"class":157},[147,6130,6131],{"class":149,"line":1475},[147,6132,1839],{"class":157},[147,6134,6135,6137,6140],{"class":149,"line":1489},[147,6136,404],{"class":397},[147,6138,6139],{"class":2237}," mian",[147,6141,2250],{"class":157},[147,6143,6144],{"class":149,"line":1495},[147,6145,1820],{"class":157},[147,6147,6148,6150,6152,6154,6156],{"class":149,"line":1586},[147,6149,2259],{"class":397},[147,6151,3107],{"class":157},[147,6153,445],{"class":397},[147,6155,616],{"class":448},[147,6157,1565],{"class":157},[147,6159,6160,6162,6164,6166,6169],{"class":149,"line":1592},[147,6161,2259],{"class":397},[147,6163,3123],{"class":157},[147,6165,445],{"class":397},[147,6167,6168],{"class":2237},"test04",[147,6170,6171],{"class":157},"(b);\n",[147,6173,6174,6176,6178,6180,6182,6184],{"class":149,"line":1604},[147,6175,1825],{"class":157},[147,6177,1443],{"class":397},[147,6179,687],{"class":157},[147,6181,1443],{"class":397},[147,6183,1513],{"class":157},[147,6185,6186],{"class":458}," \u002F\u002F1\n",[147,6188,6189],{"class":149,"line":1886},[147,6190,1839],{"class":157},[14,6192,6194],{"id":6193},"_25函数的声明","2.5函数的声明",[19,6196,6197],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,6199,6200,6201],{},"函数的",[234,6202,6203],{},"声明可以多次，但是函数的定义只能有一次",[138,6205,6207],{"className":388,"code":6206,"language":390,"meta":143,"style":143},"\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",[51,6208,6209,6214,6219,6244,6253,6257,6269,6281,6297,6301,6321,6325,6344],{"__ignoreMap":143},[147,6210,6211],{"class":149,"line":150},[147,6212,6213],{"class":458},"\u002F\u002F函数声明\n",[147,6215,6216],{"class":149,"line":312},[147,6217,6218],{"class":458},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[147,6220,6221,6223,6226,6228,6230,6232,6234,6236,6238,6241],{"class":149,"line":1454},[147,6222,404],{"class":397},[147,6224,6225],{"class":2237}," max",[147,6227,401],{"class":157},[147,6229,404],{"class":397},[147,6231,1673],{"class":5490},[147,6233,777],{"class":157},[147,6235,404],{"class":397},[147,6237,3107],{"class":5490},[147,6239,6240],{"class":157},");",[147,6242,6243],{"class":458},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[147,6245,6246,6248,6250],{"class":149,"line":1469},[147,6247,404],{"class":397},[147,6249,2247],{"class":2237},[147,6251,6252],{"class":157},"() \n",[147,6254,6255],{"class":149,"line":1475},[147,6256,1820],{"class":157},[147,6258,6259,6261,6263,6265,6267],{"class":149,"line":1489},[147,6260,2259],{"class":397},[147,6262,1673],{"class":157},[147,6264,445],{"class":397},[147,6266,845],{"class":448},[147,6268,1565],{"class":157},[147,6270,6271,6273,6275,6277,6279],{"class":149,"line":1495},[147,6272,2259],{"class":397},[147,6274,3107],{"class":157},[147,6276,445],{"class":397},[147,6278,1099],{"class":448},[147,6280,1565],{"class":157},[147,6282,6283,6285,6287,6290,6293,6295],{"class":149,"line":1586},[147,6284,1825],{"class":157},[147,6286,1443],{"class":397},[147,6288,6289],{"class":2237},"max",[147,6291,6292],{"class":157},"(a,b)",[147,6294,1443],{"class":397},[147,6296,1466],{"class":157},[147,6298,6299],{"class":149,"line":1592},[147,6300,1839],{"class":157},[147,6302,6303,6305,6307,6309,6311,6313,6315,6317,6319],{"class":149,"line":1604},[147,6304,404],{"class":397},[147,6306,6225],{"class":2237},[147,6308,401],{"class":157},[147,6310,404],{"class":397},[147,6312,1673],{"class":5490},[147,6314,777],{"class":157},[147,6316,404],{"class":397},[147,6318,3107],{"class":5490},[147,6320,407],{"class":157},[147,6322,6323],{"class":149,"line":1886},[147,6324,1820],{"class":157},[147,6326,6327,6329,6331,6333,6335,6337,6339,6341],{"class":149,"line":1891},[147,6328,4364],{"class":397},[147,6330,1673],{"class":157},[147,6332,1359],{"class":397},[147,6334,662],{"class":157},[147,6336,1385],{"class":397},[147,6338,637],{"class":157},[147,6340,1258],{"class":397},[147,6342,6343],{"class":157},"b;\n",[147,6345,6346],{"class":149,"line":1897},[147,6347,1839],{"class":157},[14,6349,6351],{"id":6350},"_26函数的分文件编写","2.6函数的分文件编写",[19,6353,6354],{},"4个步骤：",[1406,6356,6357,6360,6363,6366],{},[353,6358,6359],{},"1.创建后缀名为.h的头文件",[353,6361,6362],{},"2.创建后缀名为.cpp的源文件",[353,6364,6365],{},"3.在头文件中写函数的定义",[353,6367,6368],{},"4.在源文件中写函数的定义\n示例：",[19,6370,6371],{},"头文件：swap.h",[138,6373,6375],{"className":388,"code":6374,"language":390,"meta":143,"style":143},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[51,6376,6377,6383,6393,6397],{"__ignoreMap":143},[147,6378,6379,6381],{"class":149,"line":150},[147,6380,2223],{"class":397},[147,6382,2226],{"class":504},[147,6384,6385,6387,6389,6391],{"class":149,"line":312},[147,6386,2231],{"class":397},[147,6388,2234],{"class":397},[147,6390,2238],{"class":2237},[147,6392,1565],{"class":157},[147,6394,6395],{"class":149,"line":1454},[147,6396,6213],{"class":458},[147,6398,6399,6401,6403,6405,6407,6409,6411,6413,6415],{"class":149,"line":1469},[147,6400,5638],{"class":397},[147,6402,5641],{"class":2237},[147,6404,401],{"class":157},[147,6406,404],{"class":397},[147,6408,1673],{"class":5490},[147,6410,777],{"class":157},[147,6412,404],{"class":397},[147,6414,3107],{"class":5490},[147,6416,2993],{"class":157},[19,6418,6419],{},"源文件：swap.cpp",[138,6421,6423],{"className":388,"code":6422,"language":390,"meta":143,"style":143},"#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",[51,6424,6425,6432,6437,6457,6461,6472,6481,6490,6507,6524],{"__ignoreMap":143},[147,6426,6427,6429],{"class":149,"line":150},[147,6428,2223],{"class":397},[147,6430,6431],{"class":504}," \"swap.h\"\n",[147,6433,6434],{"class":149,"line":312},[147,6435,6436],{"class":458},"\u002F\u002F函数的定义\n",[147,6438,6439,6441,6443,6445,6447,6449,6451,6453,6455],{"class":149,"line":1454},[147,6440,5638],{"class":397},[147,6442,5641],{"class":2237},[147,6444,401],{"class":157},[147,6446,404],{"class":397},[147,6448,1673],{"class":5490},[147,6450,777],{"class":157},[147,6452,404],{"class":397},[147,6454,3107],{"class":5490},[147,6456,407],{"class":157},[147,6458,6459],{"class":149,"line":1469},[147,6460,1820],{"class":157},[147,6462,6463,6465,6467,6469],{"class":149,"line":1475},[147,6464,2259],{"class":397},[147,6466,4529],{"class":157},[147,6468,445],{"class":397},[147,6470,6471],{"class":157},"a;\n",[147,6473,6474,6477,6479],{"class":149,"line":1489},[147,6475,6476],{"class":157},"    a",[147,6478,445],{"class":397},[147,6480,6343],{"class":157},[147,6482,6483,6486,6488],{"class":149,"line":1495},[147,6484,6485],{"class":157},"    b",[147,6487,445],{"class":397},[147,6489,4554],{"class":157},[147,6491,6492,6494,6496,6499,6501,6503,6505],{"class":149,"line":1586},[147,6493,1825],{"class":157},[147,6495,1443],{"class":397},[147,6497,6498],{"class":504},"\"a=\"",[147,6500,1443],{"class":397},[147,6502,637],{"class":157},[147,6504,1443],{"class":397},[147,6506,1466],{"class":157},[147,6508,6509,6511,6513,6516,6518,6520,6522],{"class":149,"line":1592},[147,6510,1825],{"class":157},[147,6512,1443],{"class":397},[147,6514,6515],{"class":504},"\"b=\"",[147,6517,1443],{"class":397},[147,6519,662],{"class":157},[147,6521,1443],{"class":397},[147,6523,1466],{"class":157},[147,6525,6526],{"class":149,"line":1604},[147,6527,1839],{"class":157},[308,6529,6530],{},"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":143,"searchDepth":312,"depth":312,"links":6532},[6533,6534,6535,6536,6537,6538],{"id":5446,"depth":312,"text":5447},{"id":5535,"depth":312,"text":5536},{"id":5618,"depth":312,"text":5619},{"id":5844,"depth":312,"text":5845},{"id":6193,"depth":312,"text":6194},{"id":6350,"depth":312,"text":6351},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5438,"description":143},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6545,"title":6546,"body":6547,"description":6554,"extension":322,"meta":7959,"navigation":324,"path":7960,"seo":7961,"stem":7962,"__hash__":7963},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6548,"toc":7949},[6549,6552,6555,6559,6721,6725,6728,6731,6734,6737,6877,6881,6884,6887,6890,6955,6959,6964,7031,7034,7038,7041,7052,7057,7077,7080,7085,7104,7107,7111,7130,7133,7137,7372,7376,7379,7382,7385,7547,7550,7554,7557,7563,7946],[10,6550,6546],{"id":6551},"_3指针",[19,6553,6554],{},"通过指针保存一个地址，指针就是个地址",[14,6556,6558],{"id":6557},"_31定义指针","3.1定义指针",[138,6560,6562],{"className":388,"code":6561,"language":390,"meta":143,"style":143},"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",[51,6563,6564,6572,6576,6581,6593,6598,6606,6616,6634,6654,6658,6663,6668,6673,6687,6703,6717],{"__ignoreMap":143},[147,6565,6566,6568,6570],{"class":149,"line":150},[147,6567,404],{"class":397},[147,6569,2247],{"class":2237},[147,6571,2250],{"class":157},[147,6573,6574],{"class":149,"line":312},[147,6575,1820],{"class":157},[147,6577,6578],{"class":149,"line":1454},[147,6579,6580],{"class":458},"    \u002F\u002F1.定义指针\n",[147,6582,6583,6585,6587,6589,6591],{"class":149,"line":1469},[147,6584,2259],{"class":397},[147,6586,1673],{"class":157},[147,6588,445],{"class":397},[147,6590,845],{"class":448},[147,6592,1565],{"class":157},[147,6594,6595],{"class":149,"line":1475},[147,6596,6597],{"class":458},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[147,6599,6600,6603],{"class":149,"line":1489},[147,6601,6602],{"class":397},"    int*",[147,6604,6605],{"class":157},"p;\n",[147,6607,6608,6611,6614],{"class":149,"line":1495},[147,6609,6610],{"class":157},"    p",[147,6612,6613],{"class":397},"=&",[147,6615,6471],{"class":157},[147,6617,6618,6620,6622,6625,6628,6630,6632],{"class":149,"line":1586},[147,6619,1825],{"class":157},[147,6621,1443],{"class":397},[147,6623,6624],{"class":504},"\"a的地址为：\"",[147,6626,6627],{"class":397},"\u003C\u003C&",[147,6629,637],{"class":157},[147,6631,1443],{"class":397},[147,6633,1466],{"class":157},[147,6635,6636,6638,6640,6643,6645,6647,6649,6651],{"class":149,"line":1592},[147,6637,1825],{"class":157},[147,6639,1443],{"class":397},[147,6641,6642],{"class":504},"\"指针p为：\"",[147,6644,1443],{"class":397},[147,6646,19],{"class":157},[147,6648,1443],{"class":397},[147,6650,1513],{"class":157},[147,6652,6653],{"class":458},"\u002F\u002F指针p表示的就是a的地址\n",[147,6655,6656],{"class":149,"line":1604},[147,6657,2674],{"emptyLinePlaceholder":324},[147,6659,6660],{"class":149,"line":1886},[147,6661,6662],{"class":458},"    \u002F\u002F2.使用指针\n",[147,6664,6665],{"class":149,"line":1891},[147,6666,6667],{"class":458},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[147,6669,6670],{"class":149,"line":1897},[147,6671,6672],{"class":458},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[147,6674,6675,6678,6680,6682,6685],{"class":149,"line":1902},[147,6676,6677],{"class":397},"    *",[147,6679,19],{"class":157},[147,6681,445],{"class":397},[147,6683,6684],{"class":448},"1000",[147,6686,1565],{"class":157},[147,6688,6689,6691,6694,6696,6698,6700],{"class":149,"line":1916},[147,6690,1825],{"class":157},[147,6692,6693],{"class":397},"\u003C\u003C*",[147,6695,19],{"class":157},[147,6697,1443],{"class":397},[147,6699,1513],{"class":157},[147,6701,6702],{"class":458},"\u002F\u002F1000\n",[147,6704,6705,6707,6709,6711,6713,6715],{"class":149,"line":1921},[147,6706,1825],{"class":157},[147,6708,1443],{"class":397},[147,6710,637],{"class":157},[147,6712,1443],{"class":397},[147,6714,1513],{"class":157},[147,6716,6702],{"class":458},[147,6718,6719],{"class":149,"line":1927},[147,6720,1839],{"class":157},[14,6722,6724],{"id":6723},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,6726,6727],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,6729,6730],{},"在32位操作系统下：占用4个字节空间",[19,6732,6733],{},"在64位操作系统下：占用8个字节空间",[19,6735,6736],{},"上方是不管啥数据类型的",[138,6738,6740],{"className":388,"code":6739,"language":390,"meta":143,"style":143},"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",[51,6741,6742,6750,6754,6759,6771,6776,6781,6786,6799,6821,6847,6873],{"__ignoreMap":143},[147,6743,6744,6746,6748],{"class":149,"line":150},[147,6745,404],{"class":397},[147,6747,2247],{"class":2237},[147,6749,2250],{"class":157},[147,6751,6752],{"class":149,"line":312},[147,6753,1820],{"class":157},[147,6755,6756],{"class":149,"line":1454},[147,6757,6758],{"class":458},"    \u002F\u002F指针所占内存空间\n",[147,6760,6761,6763,6765,6767,6769],{"class":149,"line":1469},[147,6762,2259],{"class":397},[147,6764,1673],{"class":157},[147,6766,445],{"class":397},[147,6768,845],{"class":448},[147,6770,1565],{"class":157},[147,6772,6773],{"class":149,"line":1475},[147,6774,6775],{"class":458},"    \u002F\u002Fint *p;\n",[147,6777,6778],{"class":149,"line":1489},[147,6779,6780],{"class":458},"    \u002F\u002Fp=&a;\n",[147,6782,6783],{"class":149,"line":1495},[147,6784,6785],{"class":458},"    \u002F\u002F上述可以写为以下：\n",[147,6787,6788,6790,6793,6795,6797],{"class":149,"line":1586},[147,6789,2259],{"class":397},[147,6791,6792],{"class":397}," *",[147,6794,19],{"class":157},[147,6796,6613],{"class":397},[147,6798,6471],{"class":157},[147,6800,6801,6804,6806,6809,6811,6814,6816,6818],{"class":149,"line":1592},[147,6802,6803],{"class":157},"    cout ",[147,6805,1443],{"class":397},[147,6807,6808],{"class":504},"\"sizeof(int *)\"",[147,6810,1647],{"class":397},[147,6812,6813],{"class":157},"(p)",[147,6815,1443],{"class":397},[147,6817,1513],{"class":157},[147,6819,6820],{"class":458},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[147,6822,6823,6825,6827,6829,6831,6833,6835,6837,6839,6841,6844],{"class":149,"line":1604},[147,6824,6803],{"class":157},[147,6826,1443],{"class":397},[147,6828,6808],{"class":504},[147,6830,1647],{"class":397},[147,6832,401],{"class":157},[147,6834,404],{"class":397},[147,6836,6792],{"class":397},[147,6838,828],{"class":157},[147,6840,1443],{"class":397},[147,6842,6843],{"class":157},"endl",[147,6845,6846],{"class":458},"  \u002F\u002F4字节(32位的话)\n",[147,6848,6849,6851,6853,6856,6858,6860,6862,6864,6866,6868,6870],{"class":149,"line":1886},[147,6850,6803],{"class":157},[147,6852,1443],{"class":397},[147,6854,6855],{"class":504},"\"sizeof(char *)\"",[147,6857,1647],{"class":397},[147,6859,401],{"class":157},[147,6861,496],{"class":397},[147,6863,6792],{"class":397},[147,6865,828],{"class":157},[147,6867,1443],{"class":397},[147,6869,1513],{"class":157},[147,6871,6872],{"class":458}," \u002F\u002F4字节(32位的话)\n",[147,6874,6875],{"class":149,"line":1891},[147,6876,1839],{"class":157},[14,6878,6880],{"id":6879},"_33空指针","3.3空指针",[19,6882,6883],{},"空指针：指针变量指向内存中编号为0的空间",[19,6885,6886],{},"用途：初始化指针变量",[19,6888,6889],{},"注意：空指针指向的内存是不可以访问的",[138,6891,6893],{"className":388,"code":6892,"language":390,"meta":143,"style":143},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[51,6894,6895,6903,6907,6912,6926,6931,6946,6951],{"__ignoreMap":143},[147,6896,6897,6899,6901],{"class":149,"line":150},[147,6898,404],{"class":397},[147,6900,2247],{"class":2237},[147,6902,2250],{"class":157},[147,6904,6905],{"class":149,"line":312},[147,6906,1820],{"class":157},[147,6908,6909],{"class":149,"line":1454},[147,6910,6911],{"class":458},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[147,6913,6914,6916,6918,6920,6922,6924],{"class":149,"line":1469},[147,6915,2259],{"class":397},[147,6917,6792],{"class":397},[147,6919,19],{"class":157},[147,6921,445],{"class":397},[147,6923,2666],{"class":448},[147,6925,1565],{"class":157},[147,6927,6928],{"class":149,"line":1475},[147,6929,6930],{"class":458},"    \u002F\u002F2.空指针不能进行访问\n",[147,6932,6933,6935,6937,6939,6941,6943],{"class":149,"line":1489},[147,6934,6677],{"class":397},[147,6936,19],{"class":157},[147,6938,445],{"class":397},[147,6940,710],{"class":448},[147,6942,455],{"class":157},[147,6944,6945],{"class":458},"\u002F\u002F直接报错，压根不能访问\n",[147,6947,6948],{"class":149,"line":1495},[147,6949,6950],{"class":458},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[147,6952,6953],{"class":149,"line":1586},[147,6954,1839],{"class":157},[14,6956,6958],{"id":6957},"_34野指针","3.4野指针",[19,6960,6961],{},[234,6962,6963],{},"指针变量指向非法的内存空间",[138,6965,6967],{"className":388,"code":6966,"language":390,"meta":143,"style":143},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[51,6968,6969,6977,6981,7010,7015,7027],{"__ignoreMap":143},[147,6970,6971,6973,6975],{"class":149,"line":150},[147,6972,404],{"class":397},[147,6974,2247],{"class":2237},[147,6976,2250],{"class":157},[147,6978,6979],{"class":149,"line":312},[147,6980,1820],{"class":157},[147,6982,6983,6985,6987,6989,6991,6993,6995,6997,6999,7002,7005,7007],{"class":149,"line":1454},[147,6984,2259],{"class":397},[147,6986,6792],{"class":397},[147,6988,19],{"class":157},[147,6990,445],{"class":397},[147,6992,401],{"class":157},[147,6994,404],{"class":397},[147,6996,6792],{"class":397},[147,6998,828],{"class":157},[147,7000,7001],{"class":397},"0x",[147,7003,7004],{"class":448},"1100",[147,7006,455],{"class":157},[147,7008,7009],{"class":458}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[147,7011,7012],{"class":149,"line":1469},[147,7013,7014],{"class":458},"    \u002F\u002F访问野指针报错\n",[147,7016,7017,7019,7021,7023,7025],{"class":149,"line":1475},[147,7018,1825],{"class":157},[147,7020,6693],{"class":397},[147,7022,19],{"class":157},[147,7024,1443],{"class":397},[147,7026,1466],{"class":157},[147,7028,7029],{"class":149,"line":1489},[147,7030,1839],{"class":157},[19,7032,7033],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,7035,7037],{"id":7036},"_35const修饰指针","3.5const修饰指针",[19,7039,7040],{},"三种情况：",[1406,7042,7043,7046,7049],{},[353,7044,7045],{},"const修饰指针 常量指针",[353,7047,7048],{},"const修饰常量 指针常量",[353,7050,7051],{},"const即修饰指针，又修饰常量",[350,7053,7054],{},[353,7055,7056],{},"常量指针",[138,7058,7060],{"className":388,"code":7059,"language":390,"meta":143,"style":143},"const int *p=&a;\n",[51,7061,7062],{"__ignoreMap":143},[147,7063,7064,7067,7069,7071,7073,7075],{"class":149,"line":150},[147,7065,7066],{"class":397},"const",[147,7068,2656],{"class":397},[147,7070,6792],{"class":397},[147,7072,19],{"class":157},[147,7074,6613],{"class":397},[147,7076,6471],{"class":157},[19,7078,7079],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[350,7081,7082],{"start":312},[353,7083,7084],{},"指针常量",[138,7086,7088],{"className":388,"code":7087,"language":390,"meta":143,"style":143},"int *const p=&a;\n",[51,7089,7090],{"__ignoreMap":143},[147,7091,7092,7094,7097,7100,7102],{"class":149,"line":150},[147,7093,404],{"class":397},[147,7095,7096],{"class":397}," *const",[147,7098,7099],{"class":157}," p",[147,7101,6613],{"class":397},[147,7103,6471],{"class":157},[19,7105,7106],{},"指针的指向不可以改，指针指向的值可以改",[350,7108,7109],{"start":1454},[353,7110,7051],{},[138,7112,7114],{"className":388,"code":7113,"language":390,"meta":143,"style":143},"const int *const p=&a;\n",[51,7115,7116],{"__ignoreMap":143},[147,7117,7118,7120,7122,7124,7126,7128],{"class":149,"line":150},[147,7119,7066],{"class":397},[147,7121,2656],{"class":397},[147,7123,7096],{"class":397},[147,7125,7099],{"class":157},[147,7127,6613],{"class":397},[147,7129,6471],{"class":157},[19,7131,7132],{},"指针的指向和指针指向的值都不可以改变",[14,7134,7136],{"id":7135},"_36指针和数组","3.6指针和数组",[138,7138,7140],{"className":388,"code":7139,"language":390,"meta":143,"style":143},"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",[51,7141,7142,7150,7154,7159,7213,7234,7250,7266,7277,7294,7299,7313,7339,7343,7355,7364,7368],{"__ignoreMap":143},[147,7143,7144,7146,7148],{"class":149,"line":150},[147,7145,404],{"class":397},[147,7147,2247],{"class":2237},[147,7149,2250],{"class":157},[147,7151,7152],{"class":149,"line":312},[147,7153,1820],{"class":157},[147,7155,7156],{"class":149,"line":1454},[147,7157,7158],{"class":458},"    \u002F\u002F利用指针访问数组中的元素\n",[147,7160,7161,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189,7191,7193,7195,7197,7199,7201,7203,7205,7207,7209,7211],{"class":149,"line":1469},[147,7162,2259],{"class":397},[147,7164,4236],{"class":157},[147,7166,845],{"class":448},[147,7168,1339],{"class":157},[147,7170,445],{"class":397},[147,7172,1295],{"class":157},[147,7174,616],{"class":448},[147,7176,777],{"class":157},[147,7178,477],{"class":448},[147,7180,777],{"class":157},[147,7182,471],{"class":448},[147,7184,777],{"class":157},[147,7186,692],{"class":448},[147,7188,777],{"class":157},[147,7190,718],{"class":448},[147,7192,777],{"class":157},[147,7194,743],{"class":448},[147,7196,777],{"class":157},[147,7198,768],{"class":448},[147,7200,777],{"class":157},[147,7202,794],{"class":448},[147,7204,777],{"class":157},[147,7206,819],{"class":448},[147,7208,777],{"class":157},[147,7210,845],{"class":448},[147,7212,4269],{"class":157},[147,7214,7215,7217,7219,7222,7224,7226,7228,7230,7232],{"class":149,"line":1475},[147,7216,1825],{"class":157},[147,7218,1443],{"class":397},[147,7220,7221],{"class":504},"\"数组的第一个元素为：\"",[147,7223,1443],{"class":397},[147,7225,4180],{"class":157},[147,7227,590],{"class":448},[147,7229,1339],{"class":157},[147,7231,1443],{"class":397},[147,7233,1466],{"class":157},[147,7235,7236,7238,7240,7242,7244,7247],{"class":149,"line":1489},[147,7237,2259],{"class":397},[147,7239,6792],{"class":397},[147,7241,19],{"class":157},[147,7243,445],{"class":397},[147,7245,7246],{"class":157},"arr;",[147,7248,7249],{"class":458},"\u002F\u002F注意数才要加取地址符号&\n",[147,7251,7252,7254,7256,7258,7260,7262,7264],{"class":149,"line":1495},[147,7253,1825],{"class":157},[147,7255,1443],{"class":397},[147,7257,7221],{"class":504},[147,7259,6693],{"class":397},[147,7261,19],{"class":157},[147,7263,1443],{"class":397},[147,7265,1466],{"class":157},[147,7267,7268,7270,7272,7274],{"class":149,"line":1586},[147,7269,6610],{"class":157},[147,7271,2566],{"class":397},[147,7273,455],{"class":157},[147,7275,7276],{"class":458}," \u002F\u002F让指针向后偏移4个字节\n",[147,7278,7279,7281,7283,7286,7288,7290,7292],{"class":149,"line":1592},[147,7280,1825],{"class":157},[147,7282,1443],{"class":397},[147,7284,7285],{"class":504},"\"数组的第二个元素为：\"",[147,7287,6693],{"class":397},[147,7289,19],{"class":157},[147,7291,1443],{"class":397},[147,7293,1466],{"class":157},[147,7295,7296],{"class":149,"line":1604},[147,7297,7298],{"class":458},"    \u002F\u002F利用指针遍历数组\n",[147,7300,7301,7303,7305,7308,7310],{"class":149,"line":1886},[147,7302,2259],{"class":397},[147,7304,6792],{"class":397},[147,7306,7307],{"class":157},"p2",[147,7309,445],{"class":397},[147,7311,7312],{"class":157},"arr;\n",[147,7314,7315,7317,7319,7321,7323,7325,7327,7329,7331,7333,7335,7337],{"class":149,"line":1891},[147,7316,3475],{"class":397},[147,7318,1932],{"class":157},[147,7320,404],{"class":397},[147,7322,3306],{"class":157},[147,7324,445],{"class":397},[147,7326,590],{"class":448},[147,7328,3313],{"class":157},[147,7330,1309],{"class":397},[147,7332,845],{"class":448},[147,7334,3313],{"class":157},[147,7336,2566],{"class":397},[147,7338,407],{"class":157},[147,7340,7341],{"class":149,"line":1897},[147,7342,2304],{"class":157},[147,7344,7345,7347,7349,7351,7353],{"class":149,"line":1902},[147,7346,3725],{"class":157},[147,7348,6693],{"class":397},[147,7350,7307],{"class":157},[147,7352,1443],{"class":397},[147,7354,1466],{"class":157},[147,7356,7357,7360,7362],{"class":149,"line":1916},[147,7358,7359],{"class":157},"        p2",[147,7361,2566],{"class":397},[147,7363,1565],{"class":157},[147,7365,7366],{"class":149,"line":1921},[147,7367,2461],{"class":157},[147,7369,7370],{"class":149,"line":1927},[147,7371,1839],{"class":157},[14,7373,7375],{"id":7374},"_37指针和函数","3.7指针和函数",[19,7377,7378],{},"利用指针做函数参数，可以修改实参的值",[19,7380,7381],{},"值传递：只改变形参，不改变实参",[19,7383,7384],{},"地址传递：",[138,7386,7388],{"className":388,"code":7387,"language":390,"meta":143,"style":143},"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",[51,7389,7390,7415,7419,7431,7442,7452,7456,7464,7468,7480,7492,7497,7513,7528,7543],{"__ignoreMap":143},[147,7391,7392,7394,7396,7398,7400,7402,7405,7407,7409,7411,7413],{"class":149,"line":150},[147,7393,5638],{"class":397},[147,7395,5641],{"class":2237},[147,7397,401],{"class":157},[147,7399,404],{"class":397},[147,7401,6792],{"class":397},[147,7403,7404],{"class":5490},"p1",[147,7406,777],{"class":157},[147,7408,404],{"class":397},[147,7410,6792],{"class":397},[147,7412,7307],{"class":5490},[147,7414,407],{"class":157},[147,7416,7417],{"class":149,"line":312},[147,7418,1820],{"class":157},[147,7420,7421,7423,7425,7428],{"class":149,"line":1454},[147,7422,2259],{"class":397},[147,7424,4529],{"class":157},[147,7426,7427],{"class":397},"=*",[147,7429,7430],{"class":157},"p1;\n",[147,7432,7433,7435,7437,7439],{"class":149,"line":1469},[147,7434,6677],{"class":397},[147,7436,7404],{"class":157},[147,7438,7427],{"class":397},[147,7440,7441],{"class":157},"p2;\n",[147,7443,7444,7446,7448,7450],{"class":149,"line":1475},[147,7445,6677],{"class":397},[147,7447,7307],{"class":157},[147,7449,445],{"class":397},[147,7451,4554],{"class":157},[147,7453,7454],{"class":149,"line":1489},[147,7455,1839],{"class":157},[147,7457,7458,7460,7462],{"class":149,"line":1495},[147,7459,404],{"class":397},[147,7461,2247],{"class":2237},[147,7463,2250],{"class":157},[147,7465,7466],{"class":149,"line":1586},[147,7467,1820],{"class":157},[147,7469,7470,7472,7474,7476,7478],{"class":149,"line":1592},[147,7471,2259],{"class":397},[147,7473,1673],{"class":157},[147,7475,445],{"class":397},[147,7477,845],{"class":448},[147,7479,1565],{"class":157},[147,7481,7482,7484,7486,7488,7490],{"class":149,"line":1604},[147,7483,2259],{"class":397},[147,7485,3107],{"class":157},[147,7487,445],{"class":397},[147,7489,1099],{"class":448},[147,7491,1565],{"class":157},[147,7493,7494],{"class":149,"line":1886},[147,7495,7496],{"class":458},"    \u002F\u002F地址传递\n",[147,7498,7499,7501,7503,7505,7508,7510],{"class":149,"line":1891},[147,7500,5835],{"class":2237},[147,7502,401],{"class":157},[147,7504,752],{"class":397},[147,7506,7507],{"class":157},"a,",[147,7509,752],{"class":397},[147,7511,7512],{"class":157},"b);\n",[147,7514,7515,7517,7519,7521,7523,7525],{"class":149,"line":1897},[147,7516,1825],{"class":157},[147,7518,1443],{"class":397},[147,7520,637],{"class":157},[147,7522,1443],{"class":397},[147,7524,1513],{"class":157},[147,7526,7527],{"class":458},"\u002F\u002F20\n",[147,7529,7530,7532,7534,7536,7538,7540],{"class":149,"line":1902},[147,7531,1825],{"class":157},[147,7533,1443],{"class":397},[147,7535,662],{"class":157},[147,7537,1443],{"class":397},[147,7539,1513],{"class":157},[147,7541,7542],{"class":458},"\u002F\u002F10\n",[147,7544,7545],{"class":149,"line":1916},[147,7546,1839],{"class":157},[19,7548,7549],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,7551,7553],{"id":7552},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,7555,7556],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,7558,7559,7560,7562],{},"例如数组：int arr",[147,7561,845],{},"={4,3,6,9,1,2,10,8,7,5}",[138,7564,7566],{"className":388,"code":7565,"language":390,"meta":143,"style":143},"#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",[51,7567,7568,7574,7584,7608,7612,7643,7647,7681,7685,7703,7707,7718,7733,7748,7752,7756,7760,7764,7768,7776,7780,7785,7839,7851,7863,7868,7876,7880,7885,7910,7914,7929,7938,7942],{"__ignoreMap":143},[147,7569,7570,7572],{"class":149,"line":150},[147,7571,2223],{"class":397},[147,7573,2226],{"class":504},[147,7575,7576,7578,7580,7582],{"class":149,"line":312},[147,7577,2231],{"class":397},[147,7579,2234],{"class":397},[147,7581,2238],{"class":2237},[147,7583,1565],{"class":157},[147,7585,7586,7588,7591,7593,7595,7597,7599,7601,7603,7606],{"class":149,"line":1454},[147,7587,5638],{"class":397},[147,7589,7590],{"class":2237}," bubbleSort",[147,7592,401],{"class":157},[147,7594,404],{"class":397},[147,7596,6792],{"class":397},[147,7598,19],{"class":5490},[147,7600,777],{"class":157},[147,7602,404],{"class":397},[147,7604,7605],{"class":5490}," len",[147,7607,407],{"class":157},[147,7609,7610],{"class":149,"line":1469},[147,7611,1820],{"class":157},[147,7613,7614,7616,7618,7620,7622,7624,7626,7628,7630,7633,7635,7637,7639,7641],{"class":149,"line":1475},[147,7615,3475],{"class":397},[147,7617,401],{"class":157},[147,7619,404],{"class":397},[147,7621,3306],{"class":157},[147,7623,445],{"class":397},[147,7625,590],{"class":448},[147,7627,3313],{"class":157},[147,7629,1309],{"class":397},[147,7631,7632],{"class":157},"len",[147,7634,931],{"class":397},[147,7636,616],{"class":448},[147,7638,3313],{"class":157},[147,7640,2566],{"class":397},[147,7642,407],{"class":157},[147,7644,7645],{"class":149,"line":1489},[147,7646,2304],{"class":157},[147,7648,7649,7651,7653,7655,7657,7659,7661,7663,7665,7667,7669,7671,7673,7675,7677,7679],{"class":149,"line":1495},[147,7650,3677],{"class":397},[147,7652,401],{"class":157},[147,7654,404],{"class":397},[147,7656,3684],{"class":157},[147,7658,445],{"class":397},[147,7660,590],{"class":448},[147,7662,3691],{"class":157},[147,7664,1309],{"class":397},[147,7666,7632],{"class":157},[147,7668,931],{"class":397},[147,7670,840],{"class":157},[147,7672,931],{"class":397},[147,7674,616],{"class":448},[147,7676,3691],{"class":157},[147,7678,2566],{"class":397},[147,7680,407],{"class":157},[147,7682,7683],{"class":149,"line":1586},[147,7684,2784],{"class":157},[147,7686,7687,7689,7692,7694,7697,7699,7701],{"class":149,"line":1592},[147,7688,4916],{"class":397},[147,7690,7691],{"class":157},"(p[j]",[147,7693,1359],{"class":397},[147,7695,7696],{"class":157},"p[j",[147,7698,880],{"class":397},[147,7700,616],{"class":448},[147,7702,4931],{"class":157},[147,7704,7705],{"class":149,"line":1604},[147,7706,4936],{"class":157},[147,7708,7709,7711,7713,7715],{"class":149,"line":1886},[147,7710,4941],{"class":397},[147,7712,4529],{"class":157},[147,7714,445],{"class":397},[147,7716,7717],{"class":157},"p[j];\n",[147,7719,7720,7723,7725,7727,7729,7731],{"class":149,"line":1891},[147,7721,7722],{"class":157},"                p[j]",[147,7724,445],{"class":397},[147,7726,7696],{"class":157},[147,7728,880],{"class":397},[147,7730,616],{"class":448},[147,7732,4964],{"class":157},[147,7734,7735,7738,7740,7742,7744,7746],{"class":149,"line":1897},[147,7736,7737],{"class":157},"                p[j",[147,7739,880],{"class":397},[147,7741,616],{"class":448},[147,7743,1339],{"class":157},[147,7745,445],{"class":397},[147,7747,4554],{"class":157},[147,7749,7750],{"class":149,"line":1902},[147,7751,4984],{"class":157},[147,7753,7754],{"class":149,"line":1916},[147,7755,2803],{"class":157},[147,7757,7758],{"class":149,"line":1921},[147,7759,2461],{"class":157},[147,7761,7762],{"class":149,"line":1927},[147,7763,1839],{"class":157},[147,7765,7766],{"class":149,"line":1948},[147,7767,2674],{"emptyLinePlaceholder":324},[147,7769,7770,7772,7774],{"class":149,"line":1953},[147,7771,404],{"class":397},[147,7773,2247],{"class":2237},[147,7775,2250],{"class":157},[147,7777,7778],{"class":149,"line":1967},[147,7779,1820],{"class":157},[147,7781,7782],{"class":149,"line":1972},[147,7783,7784],{"class":458},"    \u002F\u002F 1.创建数组\n",[147,7786,7787,7789,7791,7793,7795,7797,7799,7801,7803,7805,7807,7809,7811,7813,7815,7817,7819,7821,7823,7825,7827,7829,7831,7833,7835,7837],{"class":149,"line":2001},[147,7788,2259],{"class":397},[147,7790,4236],{"class":157},[147,7792,845],{"class":448},[147,7794,1339],{"class":157},[147,7796,445],{"class":397},[147,7798,1295],{"class":157},[147,7800,692],{"class":448},[147,7802,777],{"class":157},[147,7804,471],{"class":448},[147,7806,777],{"class":157},[147,7808,743],{"class":448},[147,7810,777],{"class":157},[147,7812,819],{"class":448},[147,7814,777],{"class":157},[147,7816,616],{"class":448},[147,7818,777],{"class":157},[147,7820,477],{"class":448},[147,7822,777],{"class":157},[147,7824,845],{"class":448},[147,7826,777],{"class":157},[147,7828,794],{"class":448},[147,7830,777],{"class":157},[147,7832,768],{"class":448},[147,7834,777],{"class":157},[147,7836,718],{"class":448},[147,7838,4269],{"class":157},[147,7840,7841,7843,7845,7847,7849],{"class":149,"line":2006},[147,7842,2259],{"class":397},[147,7844,7605],{"class":157},[147,7846,445],{"class":397},[147,7848,845],{"class":448},[147,7850,1565],{"class":157},[147,7852,7853,7855,7857,7859,7861],{"class":149,"line":2023},[147,7854,2259],{"class":397},[147,7856,6792],{"class":397},[147,7858,19],{"class":157},[147,7860,445],{"class":397},[147,7862,7312],{"class":157},[147,7864,7865],{"class":149,"line":2028},[147,7866,7867],{"class":458},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[147,7869,7870,7873],{"class":149,"line":2033},[147,7871,7872],{"class":2237},"    bubbleSort",[147,7874,7875],{"class":157},"(p,len);\n",[147,7877,7878],{"class":149,"line":2038},[147,7879,2674],{"emptyLinePlaceholder":324},[147,7881,7882],{"class":149,"line":2052},[147,7883,7884],{"class":458},"    \u002F\u002F 3.打印排序后的数组\n",[147,7886,7887,7889,7891,7893,7895,7897,7899,7901,7903,7906,7908],{"class":149,"line":2057},[147,7888,3475],{"class":397},[147,7890,1932],{"class":157},[147,7892,404],{"class":397},[147,7894,3306],{"class":157},[147,7896,445],{"class":397},[147,7898,590],{"class":448},[147,7900,3488],{"class":157},[147,7902,1309],{"class":397},[147,7904,7905],{"class":157},"len; i",[147,7907,2566],{"class":397},[147,7909,407],{"class":157},[147,7911,7912],{"class":149,"line":2851},[147,7913,2304],{"class":157},[147,7915,7916,7918,7920,7922,7924,7927],{"class":149,"line":2865},[147,7917,3725],{"class":157},[147,7919,6693],{"class":397},[147,7921,19],{"class":157},[147,7923,1443],{"class":397},[147,7925,7926],{"class":504},"\"\"",[147,7928,1565],{"class":157},[147,7930,7931,7934,7936],{"class":149,"line":2873},[147,7932,7933],{"class":157},"        p",[147,7935,2566],{"class":397},[147,7937,1565],{"class":157},[147,7939,7940],{"class":149,"line":2878},[147,7941,2461],{"class":157},[147,7943,7944],{"class":149,"line":2884},[147,7945,1839],{"class":157},[308,7947,7948],{},"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":143,"searchDepth":312,"depth":312,"links":7950},[7951,7952,7953,7954,7955,7956,7957,7958],{"id":6557,"depth":312,"text":6558},{"id":6723,"depth":312,"text":6724},{"id":6879,"depth":312,"text":6880},{"id":6957,"depth":312,"text":6958},{"id":7036,"depth":312,"text":7037},{"id":7135,"depth":312,"text":7136},{"id":7374,"depth":312,"text":7375},{"id":7552,"depth":312,"text":7553},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6546,"description":6554},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7965,"title":7966,"body":7967,"description":7974,"extension":322,"meta":10948,"navigation":324,"path":10949,"seo":10950,"stem":10951,"__hash__":10952},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7968,"toc":10939},[7969,7972,7975,7979,7982,7985,7996,8334,8337,8341,8344,8351,8606,8610,8613,8616,8771,8775,8778,8781,8987,8991,8994,9297,9300,9308,9312,9315,9466,9468,9479,9536,9540,9545,10202,10210,10213,10307,10310,10930,10936],[10,7970,7966],{"id":7971},"_4结构体",[19,7973,7974],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,7976,7978],{"id":7977},"_41结构体定义与使用","4.1结构体定义与使用",[19,7980,7981],{},"语法：struct 结构体名 {结构体成员列表}；",[19,7983,7984],{},"通过结构体创建变量的方式：",[1406,7986,7987,7990,7993],{},[353,7988,7989],{},"struct 结构体名 变量名",[353,7991,7992],{},"struct 结构体名 变量名={成员1值，成员2值...}",[353,7994,7995],{},"定义结构体时顺便创建变量",[138,7997,7999],{"className":388,"code":7998,"language":390,"meta":143,"style":143},"#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",[51,8000,8001,8007,8017,8024,8029,8037,8041,8046,8050,8055,8060,8065,8072,8077,8084,8088,8095,8099,8103,8107,8111,8115,8119,8125,8129,8135,8143,8151,8155,8160,8165,8176,8181,8193,8204,8215,8220,8244,8249,8255,8282,8287,8293,8305,8317,8329],{"__ignoreMap":143},[147,8002,8003,8005],{"class":149,"line":150},[147,8004,2223],{"class":397},[147,8006,2226],{"class":504},[147,8008,8009,8011,8013,8015],{"class":149,"line":312},[147,8010,2231],{"class":397},[147,8012,2234],{"class":397},[147,8014,2238],{"class":2237},[147,8016,1565],{"class":157},[147,8018,8019,8021],{"class":149,"line":1454},[147,8020,2223],{"class":397},[147,8022,8023],{"class":504},"\u003Cstring>\n",[147,8025,8026],{"class":149,"line":1469},[147,8027,8028],{"class":458},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[147,8030,8031,8034],{"class":149,"line":1475},[147,8032,8033],{"class":397},"struct",[147,8035,8036],{"class":2237}," Student\n",[147,8038,8039],{"class":149,"line":1489},[147,8040,1820],{"class":157},[147,8042,8043],{"class":149,"line":1495},[147,8044,8045],{"class":458},"    \u002F\u002F成员列表\n",[147,8047,8048],{"class":149,"line":1586},[147,8049,2674],{"emptyLinePlaceholder":324},[147,8051,8052],{"class":149,"line":1592},[147,8053,8054],{"class":458},"    \u002F\u002F姓名\n",[147,8056,8057],{"class":149,"line":1604},[147,8058,8059],{"class":157},"    string name;\n",[147,8061,8062],{"class":149,"line":1886},[147,8063,8064],{"class":458},"    \u002F\u002F年龄\n",[147,8066,8067,8069],{"class":149,"line":1891},[147,8068,2259],{"class":397},[147,8070,8071],{"class":157}," age;\n",[147,8073,8074],{"class":149,"line":1897},[147,8075,8076],{"class":458},"    \u002F\u002F分数\n",[147,8078,8079,8081],{"class":149,"line":1902},[147,8080,2259],{"class":397},[147,8082,8083],{"class":157}," score;\n",[147,8085,8086],{"class":149,"line":1916},[147,8087,4269],{"class":157},[147,8089,8090,8092],{"class":149,"line":1921},[147,8091,8033],{"class":397},[147,8093,8094],{"class":2237}," School\n",[147,8096,8097],{"class":149,"line":1927},[147,8098,1820],{"class":157},[147,8100,8101],{"class":149,"line":1948},[147,8102,8045],{"class":458},[147,8104,8105],{"class":149,"line":1953},[147,8106,2674],{"emptyLinePlaceholder":324},[147,8108,8109],{"class":149,"line":1967},[147,8110,8054],{"class":458},[147,8112,8113],{"class":149,"line":1972},[147,8114,8059],{"class":157},[147,8116,8117],{"class":149,"line":2001},[147,8118,8064],{"class":458},[147,8120,8121,8123],{"class":149,"line":2006},[147,8122,2259],{"class":397},[147,8124,8071],{"class":157},[147,8126,8127],{"class":149,"line":2023},[147,8128,8076],{"class":458},[147,8130,8131,8133],{"class":149,"line":2028},[147,8132,2259],{"class":397},[147,8134,8083],{"class":157},[147,8136,8137,8140],{"class":149,"line":2033},[147,8138,8139],{"class":157},"} s3;",[147,8141,8142],{"class":458}," \u002F\u002F创建结构体时就创建了变量\n",[147,8144,8145,8147,8149],{"class":149,"line":2038},[147,8146,404],{"class":397},[147,8148,2247],{"class":2237},[147,8150,2250],{"class":157},[147,8152,8153],{"class":149,"line":2052},[147,8154,1820],{"class":157},[147,8156,8157],{"class":149,"line":2057},[147,8158,8159],{"class":458},"    \u002F\u002F2.通过学生类型创建具体学生\n",[147,8161,8162],{"class":149,"line":2851},[147,8163,8164],{"class":458},"    \u002F\u002F2.1 struct Student s1;\n",[147,8166,8167,8170,8173],{"class":149,"line":2865},[147,8168,8169],{"class":397},"    struct",[147,8171,8172],{"class":2237}," Student",[147,8174,8175],{"class":157}," s1;\n",[147,8177,8178],{"class":149,"line":2873},[147,8179,8180],{"class":458},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[147,8182,8183,8186,8188,8191],{"class":149,"line":2878},[147,8184,8185],{"class":157},"    s1.name",[147,8187,445],{"class":397},[147,8189,8190],{"class":504},"\"张三\"",[147,8192,1565],{"class":157},[147,8194,8195,8198,8200,8202],{"class":149,"line":2884},[147,8196,8197],{"class":157},"    s1.age",[147,8199,445],{"class":397},[147,8201,1049],{"class":448},[147,8203,1565],{"class":157},[147,8205,8206,8209,8211,8213],{"class":149,"line":2890},[147,8207,8208],{"class":157},"    s1.score",[147,8210,445],{"class":397},[147,8212,653],{"class":448},[147,8214,1565],{"class":157},[147,8216,8217],{"class":149,"line":2895},[147,8218,8219],{"class":458},"    \u002F\u002F输出结果\n",[147,8221,8223,8225,8227,8230,8232,8235,8237,8240,8242],{"class":149,"line":8222},37,[147,8224,1825],{"class":157},[147,8226,1443],{"class":397},[147,8228,8229],{"class":157},"s1.name",[147,8231,1443],{"class":397},[147,8233,8234],{"class":157},"s1.age",[147,8236,1443],{"class":397},[147,8238,8239],{"class":157},"s1.score",[147,8241,1443],{"class":397},[147,8243,1466],{"class":157},[147,8245,8247],{"class":149,"line":8246},38,[147,8248,2674],{"emptyLinePlaceholder":324},[147,8250,8252],{"class":149,"line":8251},39,[147,8253,8254],{"class":458},"    \u002F\u002F2.2 struct Student s2={...}\n",[147,8256,8258,8260,8262,8265,8267,8269,8272,8274,8276,8278,8280],{"class":149,"line":8257},40,[147,8259,8169],{"class":397},[147,8261,8172],{"class":2237},[147,8263,8264],{"class":157}," s2",[147,8266,445],{"class":397},[147,8268,1295],{"class":157},[147,8270,8271],{"class":504},"\"王五\"",[147,8273,777],{"class":157},[147,8275,1049],{"class":448},[147,8277,777],{"class":157},[147,8279,653],{"class":448},[147,8281,4269],{"class":157},[147,8283,8285],{"class":149,"line":8284},41,[147,8286,2674],{"emptyLinePlaceholder":324},[147,8288,8290],{"class":149,"line":8289},42,[147,8291,8292],{"class":458},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[147,8294,8296,8299,8301,8303],{"class":149,"line":8295},43,[147,8297,8298],{"class":157},"    s3.name",[147,8300,445],{"class":397},[147,8302,3952],{"class":504},[147,8304,1565],{"class":157},[147,8306,8308,8311,8313,8315],{"class":149,"line":8307},44,[147,8309,8310],{"class":157},"    s3.age",[147,8312,445],{"class":397},[147,8314,1049],{"class":448},[147,8316,1565],{"class":157},[147,8318,8320,8323,8325,8327],{"class":149,"line":8319},45,[147,8321,8322],{"class":157},"    s3.score",[147,8324,445],{"class":397},[147,8326,1099],{"class":448},[147,8328,1565],{"class":157},[147,8330,8332],{"class":149,"line":8331},46,[147,8333,1839],{"class":157},[19,8335,8336],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,8338,8340],{"id":8339},"_42结构体数组","4.2结构体数组",[19,8342,8343],{},"将自定义的结构体放入到数组中方便维护",[19,8345,8346,8347,8350],{},"语法：struct 结构体名 数组名",[147,8348,8349],{},"元素个数","={ {}，{},...{} };",[138,8352,8354],{"className":388,"code":8353,"language":390,"meta":143,"style":143},"#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",[51,8355,8356,8362,8372,8378,8383,8389,8393,8397,8403,8409,8413,8417,8425,8429,8434,8449,8453,8469,8485,8489,8494,8510,8525,8540,8545,8571,8575,8598,8602],{"__ignoreMap":143},[147,8357,8358,8360],{"class":149,"line":150},[147,8359,2223],{"class":397},[147,8361,2226],{"class":504},[147,8363,8364,8366,8368,8370],{"class":149,"line":312},[147,8365,2231],{"class":397},[147,8367,2234],{"class":397},[147,8369,2238],{"class":2237},[147,8371,1565],{"class":157},[147,8373,8374,8376],{"class":149,"line":1454},[147,8375,2223],{"class":397},[147,8377,8023],{"class":504},[147,8379,8380],{"class":149,"line":1469},[147,8381,8382],{"class":458},"\u002F\u002F1.定义结构体\n",[147,8384,8385,8387],{"class":149,"line":1475},[147,8386,8033],{"class":397},[147,8388,8036],{"class":2237},[147,8390,8391],{"class":149,"line":1489},[147,8392,1820],{"class":157},[147,8394,8395],{"class":149,"line":1495},[147,8396,8059],{"class":157},[147,8398,8399,8401],{"class":149,"line":1586},[147,8400,2259],{"class":397},[147,8402,8071],{"class":157},[147,8404,8405,8407],{"class":149,"line":1592},[147,8406,2259],{"class":397},[147,8408,8083],{"class":157},[147,8410,8411],{"class":149,"line":1604},[147,8412,2674],{"emptyLinePlaceholder":324},[147,8414,8415],{"class":149,"line":1886},[147,8416,4269],{"class":157},[147,8418,8419,8421,8423],{"class":149,"line":1891},[147,8420,404],{"class":397},[147,8422,2247],{"class":2237},[147,8424,2250],{"class":157},[147,8426,8427],{"class":149,"line":1897},[147,8428,1820],{"class":157},[147,8430,8431],{"class":149,"line":1902},[147,8432,8433],{"class":458},"    \u002F\u002F2.创建结构体数组\n",[147,8435,8436,8438,8440,8443,8445,8447],{"class":149,"line":1916},[147,8437,8169],{"class":397},[147,8439,8172],{"class":2237},[147,8441,8442],{"class":157}," stuArray[",[147,8444,477],{"class":448},[147,8446,1339],{"class":157},[147,8448,5182],{"class":397},[147,8450,8451],{"class":149,"line":1921},[147,8452,2304],{"class":157},[147,8454,8455,8457,8459,8461,8463,8465,8467],{"class":149,"line":1927},[147,8456,5191],{"class":157},[147,8458,8190],{"class":504},[147,8460,777],{"class":157},[147,8462,1049],{"class":448},[147,8464,777],{"class":157},[147,8466,710],{"class":448},[147,8468,5204],{"class":157},[147,8470,8471,8473,8475,8477,8479,8481,8483],{"class":149,"line":1948},[147,8472,5191],{"class":157},[147,8474,3952],{"class":504},[147,8476,777],{"class":157},[147,8478,974],{"class":448},[147,8480,777],{"class":157},[147,8482,974],{"class":448},[147,8484,1839],{"class":157},[147,8486,8487],{"class":149,"line":1953},[147,8488,2461],{"class":157},[147,8490,8491],{"class":149,"line":1967},[147,8492,8493],{"class":458},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[147,8495,8496,8499,8501,8504,8506,8508],{"class":149,"line":1972},[147,8497,8498],{"class":157},"    stuArray[",[147,8500,616],{"class":448},[147,8502,8503],{"class":157},"].name",[147,8505,445],{"class":397},[147,8507,3975],{"class":504},[147,8509,1565],{"class":157},[147,8511,8512,8514,8516,8519,8521,8523],{"class":149,"line":2001},[147,8513,8498],{"class":157},[147,8515,616],{"class":448},[147,8517,8518],{"class":157},"].age",[147,8520,445],{"class":397},[147,8522,477],{"class":448},[147,8524,1565],{"class":157},[147,8526,8527,8529,8531,8534,8536,8538],{"class":149,"line":2006},[147,8528,8498],{"class":157},[147,8530,616],{"class":448},[147,8532,8533],{"class":157},"].score",[147,8535,445],{"class":397},[147,8537,477],{"class":448},[147,8539,1565],{"class":157},[147,8541,8542],{"class":149,"line":2023},[147,8543,8544],{"class":458},"    \u002F\u002F4.遍历结构体数组\n",[147,8546,8547,8549,8551,8553,8555,8557,8559,8561,8563,8565,8567,8569],{"class":149,"line":2028},[147,8548,3475],{"class":397},[147,8550,1932],{"class":157},[147,8552,404],{"class":397},[147,8554,3306],{"class":157},[147,8556,445],{"class":397},[147,8558,590],{"class":448},[147,8560,3313],{"class":157},[147,8562,1309],{"class":397},[147,8564,477],{"class":448},[147,8566,3313],{"class":157},[147,8568,2566],{"class":397},[147,8570,407],{"class":157},[147,8572,8573],{"class":149,"line":2033},[147,8574,2304],{"class":157},[147,8576,8577,8579,8581,8584,8586,8589,8591,8594,8596],{"class":149,"line":2038},[147,8578,3725],{"class":157},[147,8580,1443],{"class":397},[147,8582,8583],{"class":157},"stuArray[i].name",[147,8585,1443],{"class":397},[147,8587,8588],{"class":157},"stuArray[i].age",[147,8590,1443],{"class":397},[147,8592,8593],{"class":157},"stuArray[i].score",[147,8595,1443],{"class":397},[147,8597,1466],{"class":157},[147,8599,8600],{"class":149,"line":2052},[147,8601,2461],{"class":157},[147,8603,8604],{"class":149,"line":2057},[147,8605,1839],{"class":157},[14,8607,8609],{"id":8608},"_43结构体指针","4.3结构体指针",[19,8611,8612],{},"作用：通过指针访问结构体中的成员",[19,8614,8615],{},"利用操作符->可以通过结构体指针访问结构体属性",[138,8617,8619],{"className":388,"code":8618,"language":390,"meta":143,"style":143},"#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",[51,8620,8621,8627,8637,8643,8647,8653,8657,8661,8667,8673,8677,8685,8689,8694,8719,8724,8739,8744,8767],{"__ignoreMap":143},[147,8622,8623,8625],{"class":149,"line":150},[147,8624,2223],{"class":397},[147,8626,2226],{"class":504},[147,8628,8629,8631,8633,8635],{"class":149,"line":312},[147,8630,2231],{"class":397},[147,8632,2234],{"class":397},[147,8634,2238],{"class":2237},[147,8636,1565],{"class":157},[147,8638,8639,8641],{"class":149,"line":1454},[147,8640,2223],{"class":397},[147,8642,8023],{"class":504},[147,8644,8645],{"class":149,"line":1469},[147,8646,8382],{"class":458},[147,8648,8649,8651],{"class":149,"line":1475},[147,8650,8033],{"class":397},[147,8652,8036],{"class":2237},[147,8654,8655],{"class":149,"line":1489},[147,8656,1820],{"class":157},[147,8658,8659],{"class":149,"line":1495},[147,8660,8059],{"class":157},[147,8662,8663,8665],{"class":149,"line":1586},[147,8664,2259],{"class":397},[147,8666,8071],{"class":157},[147,8668,8669,8671],{"class":149,"line":1592},[147,8670,2259],{"class":397},[147,8672,8083],{"class":157},[147,8674,8675],{"class":149,"line":1604},[147,8676,4269],{"class":157},[147,8678,8679,8681,8683],{"class":149,"line":1886},[147,8680,404],{"class":397},[147,8682,2247],{"class":2237},[147,8684,2250],{"class":157},[147,8686,8687],{"class":149,"line":1891},[147,8688,1820],{"class":157},[147,8690,8691],{"class":149,"line":1897},[147,8692,8693],{"class":458},"    \u002F\u002F创建学生结构体变量\n",[147,8695,8696,8698,8700,8703,8705,8707,8709,8711,8713,8715,8717],{"class":149,"line":1902},[147,8697,8169],{"class":397},[147,8699,8172],{"class":2237},[147,8701,8702],{"class":157}," s",[147,8704,445],{"class":397},[147,8706,1295],{"class":157},[147,8708,8190],{"class":504},[147,8710,777],{"class":157},[147,8712,1049],{"class":448},[147,8714,777],{"class":157},[147,8716,1996],{"class":448},[147,8718,4269],{"class":157},[147,8720,8721],{"class":149,"line":1916},[147,8722,8723],{"class":458},"    \u002F\u002F通过指针指向结构体变量\n",[147,8725,8726,8728,8730,8732,8734,8736],{"class":149,"line":1921},[147,8727,8169],{"class":397},[147,8729,8172],{"class":2237},[147,8731,6792],{"class":397},[147,8733,19],{"class":157},[147,8735,6613],{"class":397},[147,8737,8738],{"class":157},"s\n",[147,8740,8741],{"class":149,"line":1927},[147,8742,8743],{"class":458},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[147,8745,8746,8748,8750,8753,8755,8758,8760,8763,8765],{"class":149,"line":1948},[147,8747,1825],{"class":157},[147,8749,1443],{"class":397},[147,8751,8752],{"class":157},"p->name",[147,8754,1443],{"class":397},[147,8756,8757],{"class":157},"p->age",[147,8759,1443],{"class":397},[147,8761,8762],{"class":157},"p->score",[147,8764,1443],{"class":397},[147,8766,1466],{"class":157},[147,8768,8769],{"class":149,"line":1953},[147,8770,1839],{"class":157},[14,8772,8774],{"id":8773},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,8776,8777],{},"作用：结构体中的成员可以是另一个结构体",[19,8779,8780],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[138,8782,8784],{"className":388,"code":8783,"language":390,"meta":143,"style":143},"#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",[51,8785,8786,8792,8802,8808,8813,8821,8825,8829,8835,8841,8845,8850,8857,8861,8868,8872,8878,8883,8887,8895,8899,8904,8909,8914,8925,8937,8948,8961,8972,8983],{"__ignoreMap":143},[147,8787,8788,8790],{"class":149,"line":150},[147,8789,2223],{"class":397},[147,8791,2226],{"class":504},[147,8793,8794,8796,8798,8800],{"class":149,"line":312},[147,8795,2231],{"class":397},[147,8797,2234],{"class":397},[147,8799,2238],{"class":2237},[147,8801,1565],{"class":157},[147,8803,8804,8806],{"class":149,"line":1454},[147,8805,2223],{"class":397},[147,8807,8023],{"class":504},[147,8809,8810],{"class":149,"line":1469},[147,8811,8812],{"class":458},"\u002F\u002F定义学生结构体\n",[147,8814,8815,8817,8819],{"class":149,"line":1475},[147,8816,8033],{"class":397},[147,8818,8172],{"class":2237},[147,8820,2948],{"class":157},[147,8822,8823],{"class":149,"line":1489},[147,8824,1820],{"class":157},[147,8826,8827],{"class":149,"line":1495},[147,8828,8059],{"class":157},[147,8830,8831,8833],{"class":149,"line":1586},[147,8832,2259],{"class":397},[147,8834,8071],{"class":157},[147,8836,8837,8839],{"class":149,"line":1592},[147,8838,2259],{"class":397},[147,8840,8083],{"class":157},[147,8842,8843],{"class":149,"line":1604},[147,8844,1839],{"class":157},[147,8846,8847],{"class":149,"line":1886},[147,8848,8849],{"class":458},"\u002F\u002F定义老师结构体\n",[147,8851,8852,8854],{"class":149,"line":1891},[147,8853,8033],{"class":397},[147,8855,8856],{"class":2237}," Teacher\n",[147,8858,8859],{"class":149,"line":1897},[147,8860,1820],{"class":157},[147,8862,8863,8865],{"class":149,"line":1902},[147,8864,2259],{"class":397},[147,8866,8867],{"class":157}," id;\n",[147,8869,8870],{"class":149,"line":1916},[147,8871,8059],{"class":157},[147,8873,8874,8876],{"class":149,"line":1921},[147,8875,2259],{"class":397},[147,8877,8071],{"class":157},[147,8879,8880],{"class":149,"line":1927},[147,8881,8882],{"class":157},"    Student stu;\n",[147,8884,8885],{"class":149,"line":1948},[147,8886,1839],{"class":157},[147,8888,8889,8891,8893],{"class":149,"line":1953},[147,8890,404],{"class":397},[147,8892,2247],{"class":2237},[147,8894,6252],{"class":157},[147,8896,8897],{"class":149,"line":1967},[147,8898,1820],{"class":157},[147,8900,8901],{"class":149,"line":1972},[147,8902,8903],{"class":458},"    \u002F\u002F结构体嵌套结构体\n",[147,8905,8906],{"class":149,"line":2001},[147,8907,8908],{"class":458},"    \u002F\u002F创建老师\n",[147,8910,8911],{"class":149,"line":2006},[147,8912,8913],{"class":157},"    Teacher t;\n",[147,8915,8916,8919,8921,8923],{"class":149,"line":2023},[147,8917,8918],{"class":157},"    t.id",[147,8920,445],{"class":397},[147,8922,710],{"class":448},[147,8924,1565],{"class":157},[147,8926,8927,8930,8932,8935],{"class":149,"line":2028},[147,8928,8929],{"class":157},"    t.name",[147,8931,445],{"class":397},[147,8933,8934],{"class":504},"\"老王\"",[147,8936,1565],{"class":157},[147,8938,8939,8942,8944,8946],{"class":149,"line":2033},[147,8940,8941],{"class":157},"    t.age",[147,8943,445],{"class":397},[147,8945,1049],{"class":448},[147,8947,1565],{"class":157},[147,8949,8950,8953,8955,8958],{"class":149,"line":2038},[147,8951,8952],{"class":157},"    t.stu.name",[147,8954,445],{"class":397},[147,8956,8957],{"class":504},"\"小王\"",[147,8959,8960],{"class":157},"；\n",[147,8962,8963,8966,8968,8970],{"class":149,"line":2052},[147,8964,8965],{"class":157},"    t.stu.age",[147,8967,445],{"class":397},[147,8969,1099],{"class":448},[147,8971,1565],{"class":157},[147,8973,8974,8977,8979,8981],{"class":149,"line":2057},[147,8975,8976],{"class":157},"    t.stu.score",[147,8978,445],{"class":397},[147,8980,743],{"class":448},[147,8982,1565],{"class":157},[147,8984,8985],{"class":149,"line":2851},[147,8986,1839],{"class":157},[14,8988,8990],{"id":8989},"_45结构体做函数参数","4.5结构体做函数参数",[19,8992,8993],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[138,8995,8997],{"className":388,"code":8996,"language":390,"meta":143,"style":143},"#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",[51,8998,8999,9005,9015,9021,9027,9031,9035,9041,9047,9051,9056,9061,9078,9082,9115,9119,9124,9143,9147,9178,9182,9190,9194,9203,9215,9227,9239,9252,9260,9273,9285,9293],{"__ignoreMap":143},[147,9000,9001,9003],{"class":149,"line":150},[147,9002,2223],{"class":397},[147,9004,2226],{"class":504},[147,9006,9007,9009,9011,9013],{"class":149,"line":312},[147,9008,2231],{"class":397},[147,9010,2234],{"class":397},[147,9012,2238],{"class":2237},[147,9014,1565],{"class":157},[147,9016,9017,9019],{"class":149,"line":1454},[147,9018,2223],{"class":397},[147,9020,8023],{"class":504},[147,9022,9023,9025],{"class":149,"line":1469},[147,9024,8033],{"class":397},[147,9026,8036],{"class":2237},[147,9028,9029],{"class":149,"line":1475},[147,9030,1820],{"class":157},[147,9032,9033],{"class":149,"line":1489},[147,9034,8059],{"class":157},[147,9036,9037,9039],{"class":149,"line":1495},[147,9038,2259],{"class":397},[147,9040,8071],{"class":157},[147,9042,9043,9045],{"class":149,"line":1586},[147,9044,2259],{"class":397},[147,9046,8083],{"class":157},[147,9048,9049],{"class":149,"line":1592},[147,9050,4269],{"class":157},[147,9052,9053],{"class":149,"line":1604},[147,9054,9055],{"class":458},"\u002F\u002F打印学生信息的函数\n",[147,9057,9058],{"class":149,"line":1886},[147,9059,9060],{"class":458},"\u002F\u002F值传递\n",[147,9062,9063,9065,9068,9070,9072,9074,9076],{"class":149,"line":1891},[147,9064,5638],{"class":397},[147,9066,9067],{"class":2237}," printStudent1",[147,9069,401],{"class":157},[147,9071,8033],{"class":397},[147,9073,8172],{"class":2237},[147,9075,8702],{"class":5490},[147,9077,407],{"class":157},[147,9079,9080],{"class":149,"line":1897},[147,9081,1820],{"class":157},[147,9083,9084,9086,9088,9091,9093,9096,9098,9101,9103,9105,9107,9110,9112],{"class":149,"line":1902},[147,9085,6803],{"class":157},[147,9087,1443],{"class":397},[147,9089,9090],{"class":157}," s.name ",[147,9092,1443],{"class":397},[147,9094,9095],{"class":504}," \" \"",[147,9097,1719],{"class":397},[147,9099,9100],{"class":157}," s.age ",[147,9102,1443],{"class":397},[147,9104,9095],{"class":504},[147,9106,1719],{"class":397},[147,9108,9109],{"class":157}," s.score ",[147,9111,1443],{"class":397},[147,9113,9114],{"class":157}," endl;\n",[147,9116,9117],{"class":149,"line":1916},[147,9118,1839],{"class":157},[147,9120,9121],{"class":149,"line":1921},[147,9122,9123],{"class":458},"\u002F\u002F地址传递\n",[147,9125,9126,9128,9131,9133,9135,9137,9139,9141],{"class":149,"line":1927},[147,9127,5638],{"class":397},[147,9129,9130],{"class":2237}," printStudent2",[147,9132,401],{"class":157},[147,9134,8033],{"class":397},[147,9136,8172],{"class":2237},[147,9138,6792],{"class":397},[147,9140,1094],{"class":5490},[147,9142,407],{"class":157},[147,9144,9145],{"class":149,"line":1948},[147,9146,1820],{"class":157},[147,9148,9149,9151,9153,9156,9158,9160,9162,9165,9167,9169,9171,9174,9176],{"class":149,"line":1953},[147,9150,6803],{"class":157},[147,9152,1443],{"class":397},[147,9154,9155],{"class":157}," s->name ",[147,9157,1443],{"class":397},[147,9159,9095],{"class":504},[147,9161,1719],{"class":397},[147,9163,9164],{"class":157}," s->age ",[147,9166,1443],{"class":397},[147,9168,9095],{"class":504},[147,9170,1719],{"class":397},[147,9172,9173],{"class":157}," s->score ",[147,9175,1443],{"class":397},[147,9177,9114],{"class":157},[147,9179,9180],{"class":149,"line":1967},[147,9181,1839],{"class":157},[147,9183,9184,9186,9188],{"class":149,"line":1972},[147,9185,404],{"class":397},[147,9187,2247],{"class":2237},[147,9189,2250],{"class":157},[147,9191,9192],{"class":149,"line":2001},[147,9193,1820],{"class":157},[147,9195,9196,9198,9200],{"class":149,"line":2006},[147,9197,8169],{"class":397},[147,9199,8172],{"class":2237},[147,9201,9202],{"class":157}," s;\n",[147,9204,9205,9208,9210,9213],{"class":149,"line":2023},[147,9206,9207],{"class":157},"    s.name ",[147,9209,445],{"class":397},[147,9211,9212],{"class":504}," \"张三\"",[147,9214,1565],{"class":157},[147,9216,9217,9220,9222,9225],{"class":149,"line":2028},[147,9218,9219],{"class":157},"    s.age ",[147,9221,445],{"class":397},[147,9223,9224],{"class":448}," 20",[147,9226,1565],{"class":157},[147,9228,9229,9232,9234,9237],{"class":149,"line":2033},[147,9230,9231],{"class":157},"    s.score ",[147,9233,445],{"class":397},[147,9235,9236],{"class":448}," 85",[147,9238,1565],{"class":157},[147,9240,9241,9243,9245,9248,9250],{"class":149,"line":2038},[147,9242,1825],{"class":157},[147,9244,1443],{"class":397},[147,9246,9247],{"class":504},"\"值传递:\"",[147,9249,1443],{"class":397},[147,9251,1466],{"class":157},[147,9253,9254,9257],{"class":149,"line":2052},[147,9255,9256],{"class":2237},"    printStudent1",[147,9258,9259],{"class":157},"(s);\n",[147,9261,9262,9264,9266,9269,9271],{"class":149,"line":2057},[147,9263,1825],{"class":157},[147,9265,1443],{"class":397},[147,9267,9268],{"class":504},"\"地址传递:\"",[147,9270,1443],{"class":397},[147,9272,1466],{"class":157},[147,9274,9275,9278,9280,9282],{"class":149,"line":2851},[147,9276,9277],{"class":2237},"    printStudent2",[147,9279,401],{"class":157},[147,9281,752],{"class":397},[147,9283,9284],{"class":157},"s); \n",[147,9286,9287,9289,9291],{"class":149,"line":2865},[147,9288,4364],{"class":397},[147,9290,4367],{"class":448},[147,9292,1565],{"class":157},[147,9294,9295],{"class":149,"line":2873},[147,9296,1839],{"class":157},[19,9298,9299],{},"注意：",[1406,9301,9302,9305],{},[353,9303,9304],{},"1.先定义结构体，不要在函数中写结构体的定义",[353,9306,9307],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,9309,9311],{"id":9310},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,9313,9314],{},"用const防止误操作",[138,9316,9318],{"className":388,"code":9317,"language":390,"meta":143,"style":143},"#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",[51,9319,9320,9326,9336,9342,9347,9351,9355,9361,9367,9371,9387,9391,9414,9418,9426,9430,9451,9458,9462],{"__ignoreMap":143},[147,9321,9322,9324],{"class":149,"line":150},[147,9323,2223],{"class":397},[147,9325,2226],{"class":504},[147,9327,9328,9330,9332,9334],{"class":149,"line":312},[147,9329,2231],{"class":397},[147,9331,2234],{"class":397},[147,9333,2238],{"class":2237},[147,9335,1565],{"class":157},[147,9337,9338,9340],{"class":149,"line":1454},[147,9339,2223],{"class":397},[147,9341,8023],{"class":504},[147,9343,9344],{"class":149,"line":1469},[147,9345,9346],{"class":157},"sctuct Student\n",[147,9348,9349],{"class":149,"line":1475},[147,9350,1820],{"class":157},[147,9352,9353],{"class":149,"line":1489},[147,9354,8059],{"class":157},[147,9356,9357,9359],{"class":149,"line":1495},[147,9358,2259],{"class":397},[147,9360,8071],{"class":157},[147,9362,9363,9365],{"class":149,"line":1586},[147,9364,2259],{"class":397},[147,9366,8083],{"class":157},[147,9368,9369],{"class":149,"line":1592},[147,9370,4269],{"class":157},[147,9372,9373,9375,9378,9380,9383,9385],{"class":149,"line":1604},[147,9374,5638],{"class":397},[147,9376,9377],{"class":2237}," printStudents",[147,9379,401],{"class":157},[147,9381,9382],{"class":2237},"student",[147,9384,8702],{"class":5490},[147,9386,407],{"class":157},[147,9388,9389],{"class":149,"line":1886},[147,9390,1820],{"class":157},[147,9392,9393,9395,9397,9400,9402,9405,9407,9410,9412],{"class":149,"line":1891},[147,9394,1825],{"class":157},[147,9396,1443],{"class":397},[147,9398,9399],{"class":157},"s.name",[147,9401,1443],{"class":397},[147,9403,9404],{"class":157},"s.age",[147,9406,1443],{"class":397},[147,9408,9409],{"class":157},"s.score",[147,9411,1443],{"class":397},[147,9413,1466],{"class":157},[147,9415,9416],{"class":149,"line":1897},[147,9417,1839],{"class":157},[147,9419,9420,9422,9424],{"class":149,"line":1902},[147,9421,404],{"class":397},[147,9423,2247],{"class":2237},[147,9425,6252],{"class":157},[147,9427,9428],{"class":149,"line":1916},[147,9429,1820],{"class":157},[147,9431,9432,9435,9437,9439,9441,9443,9445,9447,9449],{"class":149,"line":1921},[147,9433,9434],{"class":157},"    Student s",[147,9436,445],{"class":397},[147,9438,1295],{"class":157},[147,9440,8190],{"class":504},[147,9442,777],{"class":157},[147,9444,1049],{"class":448},[147,9446,777],{"class":157},[147,9448,1049],{"class":448},[147,9450,4269],{"class":157},[147,9452,9453,9456],{"class":149,"line":1927},[147,9454,9455],{"class":2237},"    printStudent",[147,9457,9259],{"class":157},[147,9459,9460],{"class":149,"line":1948},[147,9461,2674],{"emptyLinePlaceholder":324},[147,9463,9464],{"class":149,"line":1953},[147,9465,1839],{"class":157},[19,9467,9299],{},[1406,9469,9470,9473,9476],{},[353,9471,9472],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[353,9474,9475],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[353,9477,9478],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[138,9480,9482],{"className":388,"code":9481,"language":390,"meta":143,"style":143},"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",[51,9483,9484,9503,9507,9512,9532],{"__ignoreMap":143},[147,9485,9486,9488,9490,9492,9494,9497,9499,9501],{"class":149,"line":150},[147,9487,5638],{"class":397},[147,9489,9377],{"class":2237},[147,9491,401],{"class":157},[147,9493,7066],{"class":397},[147,9495,9496],{"class":2237}," student",[147,9498,6792],{"class":397},[147,9500,1094],{"class":5490},[147,9502,407],{"class":157},[147,9504,9505],{"class":149,"line":312},[147,9506,1820],{"class":157},[147,9508,9509],{"class":149,"line":1454},[147,9510,9511],{"class":458},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[147,9513,9514,9516,9518,9520,9522,9524,9526,9528,9530],{"class":149,"line":1469},[147,9515,1825],{"class":157},[147,9517,1443],{"class":397},[147,9519,9399],{"class":157},[147,9521,1443],{"class":397},[147,9523,9404],{"class":157},[147,9525,1443],{"class":397},[147,9527,9409],{"class":157},[147,9529,1443],{"class":397},[147,9531,1466],{"class":157},[147,9533,9534],{"class":149,"line":1475},[147,9535,1839],{"class":157},[14,9537,9539],{"id":9538},"_47案例","4.7案例",[350,9541,9542],{},[353,9543,9544],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[138,9546,9548],{"className":388,"code":9547,"language":390,"meta":143,"style":143},"#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",[51,9549,9550,9556,9566,9572,9579,9583,9589,9593,9598,9604,9610,9614,9618,9624,9628,9633,9638,9651,9655,9660,9686,9690,9702,9729,9733,9745,9755,9759,9764,9793,9797,9809,9818,9845,9856,9866,9870,9874,9878,9883,9907,9911,9935,9939,9958,9984,9988,10013,10036,10060,10065,10070,10075,10084,10089,10095,10116,10122,10136,10142,10169,10178,10184,10192,10197],{"__ignoreMap":143},[147,9551,9552,9554],{"class":149,"line":150},[147,9553,2223],{"class":397},[147,9555,2226],{"class":504},[147,9557,9558,9560,9562,9564],{"class":149,"line":312},[147,9559,2231],{"class":397},[147,9561,2234],{"class":397},[147,9563,2238],{"class":2237},[147,9565,1565],{"class":157},[147,9567,9568,9570],{"class":149,"line":1454},[147,9569,2223],{"class":397},[147,9571,8023],{"class":504},[147,9573,9574,9576],{"class":149,"line":1469},[147,9575,2223],{"class":397},[147,9577,9578],{"class":504},"\u003Cctime>\n",[147,9580,9581],{"class":149,"line":1475},[147,9582,8812],{"class":458},[147,9584,9585,9587],{"class":149,"line":1489},[147,9586,8033],{"class":397},[147,9588,8036],{"class":2237},[147,9590,9591],{"class":149,"line":1495},[147,9592,1820],{"class":157},[147,9594,9595],{"class":149,"line":1586},[147,9596,9597],{"class":157},"    string sName;\n",[147,9599,9600,9602],{"class":149,"line":1592},[147,9601,2259],{"class":397},[147,9603,8071],{"class":157},[147,9605,9606,9608],{"class":149,"line":1604},[147,9607,2259],{"class":397},[147,9609,8083],{"class":157},[147,9611,9612],{"class":149,"line":1886},[147,9613,4269],{"class":157},[147,9615,9616],{"class":149,"line":1891},[147,9617,8849],{"class":458},[147,9619,9620,9622],{"class":149,"line":1897},[147,9621,8033],{"class":397},[147,9623,8856],{"class":2237},[147,9625,9626],{"class":149,"line":1902},[147,9627,1820],{"class":157},[147,9629,9630],{"class":149,"line":1916},[147,9631,9632],{"class":157},"    string tName;\n",[147,9634,9635],{"class":149,"line":1921},[147,9636,9637],{"class":458},"    \u002F\u002F学生数组\n",[147,9639,9640,9642,9644,9647,9649],{"class":149,"line":1927},[147,9641,8169],{"class":397},[147,9643,8172],{"class":2237},[147,9645,9646],{"class":157}," sArray[",[147,9648,718],{"class":448},[147,9650,4964],{"class":157},[147,9652,9653],{"class":149,"line":1948},[147,9654,4269],{"class":157},[147,9656,9657],{"class":149,"line":1953},[147,9658,9659],{"class":458},"\u002F\u002F给老师和学生赋值的函数\n",[147,9661,9662,9664,9667,9669,9671,9674,9677,9680,9682,9684],{"class":149,"line":1967},[147,9663,5638],{"class":397},[147,9665,9666],{"class":2237}," allocateSpace",[147,9668,401],{"class":157},[147,9670,8033],{"class":397},[147,9672,9673],{"class":2237}," Teacher",[147,9675,9676],{"class":5490}," tArray",[147,9678,9679],{"class":157},"[],",[147,9681,404],{"class":397},[147,9683,7605],{"class":5490},[147,9685,407],{"class":157},[147,9687,9688],{"class":149,"line":1972},[147,9689,1820],{"class":157},[147,9691,9692,9695,9697,9700],{"class":149,"line":2001},[147,9693,9694],{"class":157},"    string nameSeed",[147,9696,445],{"class":397},[147,9698,9699],{"class":504},"\"ABCDE\"",[147,9701,1565],{"class":157},[147,9703,9704,9706,9708,9710,9713,9715,9717,9720,9722,9725,9727],{"class":149,"line":2006},[147,9705,3475],{"class":397},[147,9707,1932],{"class":157},[147,9709,404],{"class":397},[147,9711,9712],{"class":157}," i ",[147,9714,445],{"class":397},[147,9716,4367],{"class":448},[147,9718,9719],{"class":157},"; i ",[147,9721,1309],{"class":397},[147,9723,9724],{"class":157}," len; i",[147,9726,2566],{"class":397},[147,9728,407],{"class":157},[147,9730,9731],{"class":149,"line":2023},[147,9732,2304],{"class":157},[147,9734,9735,9738,9740,9743],{"class":149,"line":2028},[147,9736,9737],{"class":157},"        tArray[i].tName ",[147,9739,445],{"class":397},[147,9741,9742],{"class":504}," \"Teacher_\"",[147,9744,1565],{"class":157},[147,9746,9747,9749,9752],{"class":149,"line":2033},[147,9748,9737],{"class":157},[147,9750,9751],{"class":397},"+=",[147,9753,9754],{"class":157},"nameSeed[i];\n",[147,9756,9757],{"class":149,"line":2038},[147,9758,2674],{"emptyLinePlaceholder":324},[147,9760,9761],{"class":149,"line":2052},[147,9762,9763],{"class":458},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[147,9765,9766,9768,9770,9772,9775,9777,9779,9782,9784,9786,9789,9791],{"class":149,"line":2057},[147,9767,3677],{"class":397},[147,9769,1932],{"class":157},[147,9771,404],{"class":397},[147,9773,9774],{"class":157}," j ",[147,9776,445],{"class":397},[147,9778,4367],{"class":448},[147,9780,9781],{"class":157},"; j ",[147,9783,1309],{"class":397},[147,9785,2422],{"class":448},[147,9787,9788],{"class":157},"; j",[147,9790,2566],{"class":397},[147,9792,407],{"class":157},[147,9794,9795],{"class":149,"line":2851},[147,9796,2784],{"class":157},[147,9798,9799,9802,9804,9807],{"class":149,"line":2865},[147,9800,9801],{"class":157},"            tArray[i].sArray[j].sName ",[147,9803,445],{"class":397},[147,9805,9806],{"class":504}," \"Student_\"",[147,9808,1565],{"class":157},[147,9810,9811,9813,9815],{"class":149,"line":2873},[147,9812,9801],{"class":157},[147,9814,9751],{"class":397},[147,9816,9817],{"class":157}," nameSeed[j];\n",[147,9819,9820,9823,9826,9828,9830,9832,9834,9836,9838,9840,9842],{"class":149,"line":2878},[147,9821,9822],{"class":397},"            int",[147,9824,9825],{"class":157}," random",[147,9827,445],{"class":397},[147,9829,2698],{"class":2237},[147,9831,2701],{"class":157},[147,9833,727],{"class":397},[147,9835,1306],{"class":448},[147,9837,880],{"class":397},[147,9839,800],{"class":448},[147,9841,455],{"class":157},[147,9843,9844],{"class":458},"\u002F\u002F40~99\n",[147,9846,9847,9850,9852,9854],{"class":149,"line":2884},[147,9848,9849],{"class":157},"            tArray[i].sArray[j].age ",[147,9851,445],{"class":397},[147,9853,9224],{"class":448},[147,9855,1565],{"class":157},[147,9857,9858,9861,9863],{"class":149,"line":2890},[147,9859,9860],{"class":157},"            tArray[i].sArray[j].score ",[147,9862,445],{"class":397},[147,9864,9865],{"class":157}," random;\n",[147,9867,9868],{"class":149,"line":2895},[147,9869,2803],{"class":157},[147,9871,9872],{"class":149,"line":8222},[147,9873,2461],{"class":157},[147,9875,9876],{"class":149,"line":8246},[147,9877,1839],{"class":157},[147,9879,9880],{"class":149,"line":8251},[147,9881,9882],{"class":458},"\u002F\u002F打印所有信息的函数\n",[147,9884,9885,9887,9890,9892,9894,9896,9898,9901,9903,9905],{"class":149,"line":8257},[147,9886,5638],{"class":397},[147,9888,9889],{"class":2237}," printInfo",[147,9891,401],{"class":157},[147,9893,8033],{"class":397},[147,9895,9673],{"class":2237},[147,9897,9676],{"class":5490},[147,9899,9900],{"class":157},"[], ",[147,9902,404],{"class":397},[147,9904,7605],{"class":5490},[147,9906,407],{"class":157},[147,9908,9909],{"class":149,"line":8284},[147,9910,1820],{"class":157},[147,9912,9913,9915,9917,9919,9921,9923,9925,9927,9929,9931,9933],{"class":149,"line":8289},[147,9914,3475],{"class":397},[147,9916,1932],{"class":157},[147,9918,404],{"class":397},[147,9920,9712],{"class":157},[147,9922,445],{"class":397},[147,9924,4367],{"class":448},[147,9926,9719],{"class":157},[147,9928,1309],{"class":397},[147,9930,9724],{"class":157},[147,9932,2566],{"class":397},[147,9934,407],{"class":157},[147,9936,9937],{"class":149,"line":8295},[147,9938,2304],{"class":157},[147,9940,9941,9944,9946,9949,9951,9954,9956],{"class":149,"line":8307},[147,9942,9943],{"class":157},"        cout ",[147,9945,1443],{"class":397},[147,9947,9948],{"class":504}," \"Teacher: \"",[147,9950,1719],{"class":397},[147,9952,9953],{"class":157}," tArray[i].tName ",[147,9955,1443],{"class":397},[147,9957,9114],{"class":157},[147,9959,9960,9962,9964,9966,9968,9970,9972,9974,9976,9978,9980,9982],{"class":149,"line":8319},[147,9961,3677],{"class":397},[147,9963,1932],{"class":157},[147,9965,404],{"class":397},[147,9967,9774],{"class":157},[147,9969,445],{"class":397},[147,9971,4367],{"class":448},[147,9973,9781],{"class":157},[147,9975,1309],{"class":397},[147,9977,2422],{"class":448},[147,9979,9788],{"class":157},[147,9981,2566],{"class":397},[147,9983,407],{"class":157},[147,9985,9986],{"class":149,"line":8331},[147,9987,2784],{"class":157},[147,9989,9991,9994,9996,9999,10001,10004,10006,10009,10011],{"class":149,"line":9990},47,[147,9992,9993],{"class":157},"            cout ",[147,9995,1443],{"class":397},[147,9997,9998],{"class":504}," \"",[147,10000,1505],{"class":448},[147,10002,10003],{"class":504},"Student: \"",[147,10005,1719],{"class":397},[147,10007,10008],{"class":157}," tArray[i].sArray[j].sName",[147,10010,1443],{"class":397},[147,10012,1466],{"class":157},[147,10014,10016,10018,10020,10022,10024,10027,10029,10032,10034],{"class":149,"line":10015},48,[147,10017,9993],{"class":157},[147,10019,1443],{"class":397},[147,10021,9998],{"class":504},[147,10023,1505],{"class":448},[147,10025,10026],{"class":504},"Age: \"",[147,10028,1719],{"class":397},[147,10030,10031],{"class":157}," tArray[i].sArray[j].age ",[147,10033,1443],{"class":397},[147,10035,9114],{"class":157},[147,10037,10039,10041,10043,10045,10047,10050,10052,10055,10057],{"class":149,"line":10038},49,[147,10040,9993],{"class":157},[147,10042,1443],{"class":397},[147,10044,9998],{"class":504},[147,10046,1505],{"class":448},[147,10048,10049],{"class":504},"Score: \"",[147,10051,1719],{"class":397},[147,10053,10054],{"class":157}," tArray[i].sArray[j].score ",[147,10056,1443],{"class":397},[147,10058,10059],{"class":157}," endl;   \n",[147,10061,10063],{"class":149,"line":10062},50,[147,10064,2803],{"class":157},[147,10066,10068],{"class":149,"line":10067},51,[147,10069,2461],{"class":157},[147,10071,10073],{"class":149,"line":10072},52,[147,10074,1839],{"class":157},[147,10076,10078,10080,10082],{"class":149,"line":10077},53,[147,10079,404],{"class":397},[147,10081,2247],{"class":2237},[147,10083,2250],{"class":157},[147,10085,10087],{"class":149,"line":10086},54,[147,10088,1820],{"class":157},[147,10090,10092],{"class":149,"line":10091},55,[147,10093,10094],{"class":458},"    \u002F\u002F随机数种子\n",[147,10096,10098,10100,10102,10104,10106,10108,10110,10112,10114],{"class":149,"line":10097},56,[147,10099,2647],{"class":2237},[147,10101,2650],{"class":157},[147,10103,2653],{"class":397},[147,10105,2656],{"class":397},[147,10107,828],{"class":157},[147,10109,2661],{"class":2237},[147,10111,401],{"class":157},[147,10113,2666],{"class":448},[147,10115,2669],{"class":157},[147,10117,10119],{"class":149,"line":10118},57,[147,10120,10121],{"class":458},"    \u002F\u002F1.创建3名老师的数组\n",[147,10123,10125,10127,10129,10132,10134],{"class":149,"line":10124},58,[147,10126,8169],{"class":397},[147,10128,9673],{"class":2237},[147,10130,10131],{"class":157}," tArray[",[147,10133,471],{"class":448},[147,10135,4964],{"class":157},[147,10137,10139],{"class":149,"line":10138},59,[147,10140,10141],{"class":458},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[147,10143,10145,10147,10150,10152,10155,10158,10160,10162,10165,10167],{"class":149,"line":10144},60,[147,10146,2259],{"class":397},[147,10148,10149],{"class":157}," len ",[147,10151,445],{"class":397},[147,10153,10154],{"class":397}," sizeof",[147,10156,10157],{"class":157},"(tArray) ",[147,10159,983],{"class":397},[147,10161,10154],{"class":397},[147,10163,10164],{"class":157},"(tArray[",[147,10166,590],{"class":448},[147,10168,4130],{"class":157},[147,10170,10172,10175],{"class":149,"line":10171},61,[147,10173,10174],{"class":2237},"    allocateSpace",[147,10176,10177],{"class":157},"(tArray, len);\n",[147,10179,10181],{"class":149,"line":10180},62,[147,10182,10183],{"class":458},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[147,10185,10187,10190],{"class":149,"line":10186},63,[147,10188,10189],{"class":2237},"    printInfo",[147,10191,10177],{"class":157},[147,10193,10195],{"class":149,"line":10194},64,[147,10196,2674],{"emptyLinePlaceholder":324},[147,10198,10200],{"class":149,"line":10199},65,[147,10201,1839],{"class":157},[350,10203,10204],{"start":312},[353,10205,10206,10209],{},[234,10207,10208],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,10211,10212],{},"五名英雄信息如下：",[138,10214,10218],{"className":10215,"code":10216,"language":10217,"meta":143,"style":143},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[51,10219,10220,10238,10255,10272,10289],{"__ignoreMap":143},[147,10221,10222,10224,10227,10229,10231,10233,10236],{"class":149,"line":150},[147,10223,5191],{"class":157},[147,10225,10226],{"class":504},"\"刘备\"",[147,10228,777],{"class":157},[147,10230,1174],{"class":448},[147,10232,777],{"class":157},[147,10234,10235],{"class":504},"\"男\"",[147,10237,5204],{"class":157},[147,10239,10240,10242,10245,10247,10249,10251,10253],{"class":149,"line":312},[147,10241,5191],{"class":157},[147,10243,10244],{"class":504},"\"关羽\"",[147,10246,777],{"class":157},[147,10248,1149],{"class":448},[147,10250,777],{"class":157},[147,10252,10235],{"class":504},[147,10254,5204],{"class":157},[147,10256,10257,10259,10262,10264,10266,10268,10270],{"class":149,"line":1454},[147,10258,5191],{"class":157},[147,10260,10261],{"class":504},"\"张飞\"",[147,10263,777],{"class":157},[147,10265,1099],{"class":448},[147,10267,777],{"class":157},[147,10269,10235],{"class":504},[147,10271,5204],{"class":157},[147,10273,10274,10276,10279,10281,10283,10285,10287],{"class":149,"line":1469},[147,10275,5191],{"class":157},[147,10277,10278],{"class":504},"\"赵云\"",[147,10280,777],{"class":157},[147,10282,1124],{"class":448},[147,10284,777],{"class":157},[147,10286,10235],{"class":504},[147,10288,5204],{"class":157},[147,10290,10291,10293,10296,10298,10300,10302,10305],{"class":149,"line":1475},[147,10292,5191],{"class":157},[147,10294,10295],{"class":504},"\"貂蝉\"",[147,10297,777],{"class":157},[147,10299,1074],{"class":448},[147,10301,777],{"class":157},[147,10303,10304],{"class":504},"\"女\"",[147,10306,5204],{"class":157},[19,10308,10309],{},"代码：",[138,10311,10313],{"className":388,"code":10312,"language":390,"meta":143,"style":143},"#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",[51,10314,10315,10321,10331,10337,10344,10348,10352,10358,10363,10367,10372,10395,10399,10424,10428,10461,10466,10495,10500,10515,10541,10561,10566,10571,10575,10579,10584,10606,10610,10634,10638,10700,10704,10708,10716,10720,10725,10736,10740,10756,10772,10788,10804,10820,10824,10844,10866,10871,10884,10891,10896,10902,10907,10920,10926],{"__ignoreMap":143},[147,10316,10317,10319],{"class":149,"line":150},[147,10318,2223],{"class":397},[147,10320,2226],{"class":504},[147,10322,10323,10325,10327,10329],{"class":149,"line":312},[147,10324,2231],{"class":397},[147,10326,2234],{"class":397},[147,10328,2238],{"class":2237},[147,10330,1565],{"class":157},[147,10332,10333,10335],{"class":149,"line":1454},[147,10334,2223],{"class":397},[147,10336,8023],{"class":504},[147,10338,10339,10341],{"class":149,"line":1469},[147,10340,8033],{"class":397},[147,10342,10343],{"class":2237}," Sanguo\n",[147,10345,10346],{"class":149,"line":1475},[147,10347,1820],{"class":157},[147,10349,10350],{"class":149,"line":1489},[147,10351,8059],{"class":157},[147,10353,10354,10356],{"class":149,"line":1495},[147,10355,2259],{"class":397},[147,10357,8071],{"class":157},[147,10359,10360],{"class":149,"line":1586},[147,10361,10362],{"class":157},"    string gender;\n",[147,10364,10365],{"class":149,"line":1592},[147,10366,4269],{"class":157},[147,10368,10369],{"class":149,"line":1604},[147,10370,10371],{"class":458},"\u002F\u002F定义排序函数\n",[147,10373,10374,10376,10378,10380,10383,10385,10387,10389,10391,10393],{"class":149,"line":1886},[147,10375,5638],{"class":397},[147,10377,7590],{"class":2237},[147,10379,401],{"class":157},[147,10381,10382],{"class":2237},"Sanguo",[147,10384,6792],{"class":397},[147,10386,1094],{"class":5490},[147,10388,777],{"class":157},[147,10390,404],{"class":397},[147,10392,7605],{"class":5490},[147,10394,407],{"class":157},[147,10396,10397],{"class":149,"line":1891},[147,10398,1820],{"class":157},[147,10400,10401,10403,10405,10407,10409,10411,10413,10415,10417,10420,10422],{"class":149,"line":1897},[147,10402,3475],{"class":397},[147,10404,401],{"class":157},[147,10406,404],{"class":397},[147,10408,3306],{"class":157},[147,10410,445],{"class":397},[147,10412,590],{"class":448},[147,10414,3313],{"class":157},[147,10416,1309],{"class":397},[147,10418,10419],{"class":157},"len;i",[147,10421,2566],{"class":397},[147,10423,407],{"class":157},[147,10425,10426],{"class":149,"line":1902},[147,10427,2304],{"class":157},[147,10429,10430,10433,10435,10437,10439,10441,10443,10445,10447,10449,10451,10453,10455,10457,10459],{"class":149,"line":1916},[147,10431,10432],{"class":397},"     for",[147,10434,1932],{"class":157},[147,10436,404],{"class":397},[147,10438,3684],{"class":157},[147,10440,445],{"class":397},[147,10442,590],{"class":448},[147,10444,3691],{"class":157},[147,10446,1309],{"class":397},[147,10448,7632],{"class":157},[147,10450,931],{"class":397},[147,10452,616],{"class":448},[147,10454,931],{"class":397},[147,10456,3824],{"class":157},[147,10458,2566],{"class":397},[147,10460,407],{"class":157},[147,10462,10463],{"class":149,"line":1921},[147,10464,10465],{"class":157},"     {\n",[147,10467,10468,10471,10474,10476,10479,10481,10484,10486,10488,10490,10492],{"class":149,"line":1927},[147,10469,10470],{"class":397},"         if",[147,10472,10473],{"class":157}," ((s",[147,10475,880],{"class":397},[147,10477,10478],{"class":157},"j)->age ",[147,10480,1359],{"class":397},[147,10482,10483],{"class":157}," (s",[147,10485,880],{"class":397},[147,10487,866],{"class":157},[147,10489,880],{"class":397},[147,10491,616],{"class":448},[147,10493,10494],{"class":157},")->age)\n",[147,10496,10497],{"class":149,"line":1948},[147,10498,10499],{"class":157},"         {\n",[147,10501,10502,10505,10507,10510,10512],{"class":149,"line":1953},[147,10503,10504],{"class":157},"             Sanguo temp",[147,10506,7427],{"class":397},[147,10508,10509],{"class":157},"(s",[147,10511,880],{"class":397},[147,10513,10514],{"class":157},"j);\n",[147,10516,10517,10520,10522,10524,10527,10529,10531,10533,10535,10537,10539],{"class":149,"line":1967},[147,10518,10519],{"class":397},"             *",[147,10521,10509],{"class":157},[147,10523,880],{"class":397},[147,10525,10526],{"class":157},"j)",[147,10528,7427],{"class":397},[147,10530,10509],{"class":157},[147,10532,880],{"class":397},[147,10534,866],{"class":157},[147,10536,880],{"class":397},[147,10538,616],{"class":448},[147,10540,2993],{"class":157},[147,10542,10543,10545,10547,10549,10551,10553,10555,10557,10559],{"class":149,"line":1972},[147,10544,10519],{"class":397},[147,10546,10509],{"class":157},[147,10548,880],{"class":397},[147,10550,866],{"class":157},[147,10552,880],{"class":397},[147,10554,616],{"class":448},[147,10556,828],{"class":157},[147,10558,445],{"class":397},[147,10560,4554],{"class":157},[147,10562,10563],{"class":149,"line":2001},[147,10564,10565],{"class":157},"         }\n",[147,10567,10568],{"class":149,"line":2006},[147,10569,10570],{"class":157},"     }\n",[147,10572,10573],{"class":149,"line":2023},[147,10574,2461],{"class":157},[147,10576,10577],{"class":149,"line":2028},[147,10578,1839],{"class":157},[147,10580,10581],{"class":149,"line":2033},[147,10582,10583],{"class":458},"\u002F\u002F定义打印函数\n",[147,10585,10586,10588,10590,10592,10594,10596,10598,10600,10602,10604],{"class":149,"line":2038},[147,10587,5638],{"class":397},[147,10589,9889],{"class":2237},[147,10591,401],{"class":157},[147,10593,10382],{"class":2237},[147,10595,6792],{"class":397},[147,10597,1094],{"class":5490},[147,10599,777],{"class":157},[147,10601,404],{"class":397},[147,10603,7605],{"class":5490},[147,10605,407],{"class":157},[147,10607,10608],{"class":149,"line":2052},[147,10609,1820],{"class":157},[147,10611,10612,10614,10616,10618,10620,10622,10624,10626,10628,10630,10632],{"class":149,"line":2057},[147,10613,3475],{"class":397},[147,10615,1932],{"class":157},[147,10617,404],{"class":397},[147,10619,3306],{"class":157},[147,10621,445],{"class":397},[147,10623,590],{"class":448},[147,10625,3313],{"class":157},[147,10627,1309],{"class":397},[147,10629,10419],{"class":157},[147,10631,2566],{"class":397},[147,10633,407],{"class":157},[147,10635,10636],{"class":149,"line":2851},[147,10637,2304],{"class":157},[147,10639,10640,10642,10644,10646,10648,10651,10653,10655,10657,10660,10662,10664,10666,10669,10671,10673,10675,10678,10680,10682,10684,10687,10689,10691,10693,10696,10698],{"class":149,"line":2865},[147,10641,3725],{"class":157},[147,10643,1443],{"class":397},[147,10645,650],{"class":504},[147,10647,1505],{"class":448},[147,10649,10650],{"class":504},"姓名：\"",[147,10652,1443],{"class":397},[147,10654,10509],{"class":157},[147,10656,880],{"class":397},[147,10658,10659],{"class":157},"i)->name",[147,10661,1443],{"class":397},[147,10663,650],{"class":504},[147,10665,1505],{"class":448},[147,10667,10668],{"class":504},"年龄：\"",[147,10670,1443],{"class":397},[147,10672,10509],{"class":157},[147,10674,880],{"class":397},[147,10676,10677],{"class":157},"i)->age",[147,10679,1443],{"class":397},[147,10681,650],{"class":504},[147,10683,1505],{"class":448},[147,10685,10686],{"class":504},"性别：\"",[147,10688,1443],{"class":397},[147,10690,10509],{"class":157},[147,10692,880],{"class":397},[147,10694,10695],{"class":157},"i)->gender",[147,10697,1443],{"class":397},[147,10699,1466],{"class":157},[147,10701,10702],{"class":149,"line":2873},[147,10703,2461],{"class":157},[147,10705,10706],{"class":149,"line":2878},[147,10707,1839],{"class":157},[147,10709,10710,10712,10714],{"class":149,"line":2884},[147,10711,404],{"class":397},[147,10713,2247],{"class":2237},[147,10715,2250],{"class":157},[147,10717,10718],{"class":149,"line":2890},[147,10719,1820],{"class":157},[147,10721,10722],{"class":149,"line":2895},[147,10723,10724],{"class":458},"    \u002F\u002F定义结构体变量\n",[147,10726,10727,10730,10732,10734],{"class":149,"line":8222},[147,10728,10729],{"class":157},"    Sanguo s1[",[147,10731,718],{"class":448},[147,10733,1339],{"class":157},[147,10735,5182],{"class":397},[147,10737,10738],{"class":149,"line":8246},[147,10739,2304],{"class":157},[147,10741,10742,10744,10746,10748,10750,10752,10754],{"class":149,"line":8251},[147,10743,5191],{"class":157},[147,10745,10226],{"class":504},[147,10747,777],{"class":157},[147,10749,1174],{"class":448},[147,10751,777],{"class":157},[147,10753,10235],{"class":504},[147,10755,5204],{"class":157},[147,10757,10758,10760,10762,10764,10766,10768,10770],{"class":149,"line":8257},[147,10759,5191],{"class":157},[147,10761,10244],{"class":504},[147,10763,777],{"class":157},[147,10765,1149],{"class":448},[147,10767,777],{"class":157},[147,10769,10235],{"class":504},[147,10771,5204],{"class":157},[147,10773,10774,10776,10778,10780,10782,10784,10786],{"class":149,"line":8284},[147,10775,5191],{"class":157},[147,10777,10261],{"class":504},[147,10779,777],{"class":157},[147,10781,1099],{"class":448},[147,10783,777],{"class":157},[147,10785,10235],{"class":504},[147,10787,5204],{"class":157},[147,10789,10790,10792,10794,10796,10798,10800,10802],{"class":149,"line":8289},[147,10791,5191],{"class":157},[147,10793,10278],{"class":504},[147,10795,777],{"class":157},[147,10797,1124],{"class":448},[147,10799,777],{"class":157},[147,10801,10235],{"class":504},[147,10803,5204],{"class":157},[147,10805,10806,10808,10810,10812,10814,10816,10818],{"class":149,"line":8295},[147,10807,5191],{"class":157},[147,10809,10295],{"class":504},[147,10811,777],{"class":157},[147,10813,1074],{"class":448},[147,10815,777],{"class":157},[147,10817,10304],{"class":504},[147,10819,5204],{"class":157},[147,10821,10822],{"class":149,"line":8307},[147,10823,5225],{"class":157},[147,10825,10826,10828,10830,10832,10835,10837,10840,10842],{"class":149,"line":8319},[147,10827,2259],{"class":397},[147,10829,7605],{"class":157},[147,10831,4477],{"class":397},[147,10833,10834],{"class":157},"(s1)",[147,10836,4483],{"class":397},[147,10838,10839],{"class":157},"(s1[",[147,10841,590],{"class":448},[147,10843,4130],{"class":157},[147,10845,10846,10849,10851,10854,10856,10859,10862,10864],{"class":149,"line":8331},[147,10847,10848],{"class":157},"    Sanguo ",[147,10850,854],{"class":397},[147,10852,10853],{"class":157},"s ",[147,10855,445],{"class":397},[147,10857,10858],{"class":397}," &",[147,10860,10861],{"class":157},"s1[",[147,10863,590],{"class":448},[147,10865,4964],{"class":157},[147,10867,10868],{"class":149,"line":9990},[147,10869,10870],{"class":458},"    \u002F\u002F排序前：\n",[147,10872,10873,10875,10877,10880,10882],{"class":149,"line":10015},[147,10874,6803],{"class":157},[147,10876,1443],{"class":397},[147,10878,10879],{"class":504}," \"排序前：\"",[147,10881,1719],{"class":397},[147,10883,9114],{"class":157},[147,10885,10886,10888],{"class":149,"line":10038},[147,10887,10189],{"class":2237},[147,10889,10890],{"class":157},"(s,len);\n",[147,10892,10893],{"class":149,"line":10062},[147,10894,10895],{"class":458},"    \u002F\u002F调用排序函数\n",[147,10897,10898,10900],{"class":149,"line":10067},[147,10899,7872],{"class":2237},[147,10901,10890],{"class":157},[147,10903,10904],{"class":149,"line":10072},[147,10905,10906],{"class":458},"    \u002F\u002F排序后\n",[147,10908,10909,10911,10913,10916,10918],{"class":149,"line":10077},[147,10910,6803],{"class":157},[147,10912,1443],{"class":397},[147,10914,10915],{"class":504}," \"排序后：\"",[147,10917,1719],{"class":397},[147,10919,9114],{"class":157},[147,10921,10922,10924],{"class":149,"line":10086},[147,10923,10189],{"class":2237},[147,10925,10890],{"class":157},[147,10927,10928],{"class":149,"line":10091},[147,10929,1839],{"class":157},[19,10931,10932,10933,10935],{},"注意：使用指针时直接用传首地址**&s",[147,10934,590],{},"**",[308,10937,10938],{},"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":143,"searchDepth":312,"depth":312,"links":10940},[10941,10942,10943,10944,10945,10946,10947],{"id":7977,"depth":312,"text":7978},{"id":8339,"depth":312,"text":8340},{"id":8608,"depth":312,"text":8609},{"id":8773,"depth":312,"text":8774},{"id":8989,"depth":312,"text":8990},{"id":9310,"depth":312,"text":9311},{"id":9538,"depth":312,"text":9539},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7966,"description":7974},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10954,"title":10955,"body":10956,"description":143,"extension":322,"meta":12299,"navigation":324,"path":12300,"seo":12301,"stem":12302,"__hash__":12303},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10957,"toc":12293},[10958,10961,10965,10971,10985,10990,10993,10997,11004,11010,11013,11020,11026,11031,11034,11037,11040,11604,11607,11621,11625,11630,11646,11786,11789,11795,11798,11803,11811,11919,11922,11927,11930,11935,11938,11944,11947,12290],[10,10959,10955],{"id":10960},"_5程序内存模型",[14,10962,10964],{"id":10963},"_51内存分区模型","5.1内存分区模型",[19,10966,10967,10968],{},"C++程序在执行时，将内存大方向划分为",[234,10969,10970],{},"4个区域",[1406,10972,10973,10976,10979,10982],{},[353,10974,10975],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[353,10977,10978],{},"全局区：存放全局变量和静态变量以及常量",[353,10980,10981],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[353,10983,10984],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,10986,10987],{},[234,10988,10989],{},"内存四区意义：",[19,10991,10992],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[367,10994,10996],{"id":10995},"_511程序运行前","5.1.1程序运行前",[19,10998,10999,11000,11003],{},"​\t在程序编译后，生成了exe可执行程序，",[234,11001,11002],{},"未执行该程序前","分为两个区域",[19,11005,11006,11007],{},"​\t",[234,11008,11009],{},"代码区：",[19,11011,11012],{},"​\t\t存放 CPU 执行的机器指令",[19,11014,11015,11016,11019],{},"​\t\t代码区是",[234,11017,11018],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,11021,11015,11022,11025],{},[234,11023,11024],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,11027,11006,11028],{},[234,11029,11030],{},"全局区：",[19,11032,11033],{},"​\t\t全局变量和静态变量存放在此.",[19,11035,11036],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,11038,11039],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[138,11041,11043],{"className":388,"code":11042,"language":390,"meta":143,"style":143},"\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",[51,11044,11045,11050,11063,11076,11080,11085,11100,11115,11119,11128,11132,11137,11150,11163,11167,11172,11198,11224,11228,11255,11281,11285,11290,11306,11321,11325,11351,11377,11381,11406,11431,11435,11461,11487,11491,11507,11522,11548,11574,11578,11588,11592,11600],{"__ignoreMap":143},[147,11046,11047],{"class":149,"line":150},[147,11048,11049],{"class":458},"\u002F\u002F全局变量\n",[147,11051,11052,11054,11057,11059,11061],{"class":149,"line":312},[147,11053,404],{"class":397},[147,11055,11056],{"class":157}," g_a ",[147,11058,445],{"class":397},[147,11060,2312],{"class":448},[147,11062,1565],{"class":157},[147,11064,11065,11067,11070,11072,11074],{"class":149,"line":1454},[147,11066,404],{"class":397},[147,11068,11069],{"class":157}," g_b ",[147,11071,445],{"class":397},[147,11073,2312],{"class":448},[147,11075,1565],{"class":157},[147,11077,11078],{"class":149,"line":1469},[147,11079,2674],{"emptyLinePlaceholder":324},[147,11081,11082],{"class":149,"line":1475},[147,11083,11084],{"class":458},"\u002F\u002F全局常量\n",[147,11086,11087,11089,11091,11094,11096,11098],{"class":149,"line":1489},[147,11088,7066],{"class":397},[147,11090,2656],{"class":397},[147,11092,11093],{"class":157}," c_g_a ",[147,11095,445],{"class":397},[147,11097,2312],{"class":448},[147,11099,1565],{"class":157},[147,11101,11102,11104,11106,11109,11111,11113],{"class":149,"line":1495},[147,11103,7066],{"class":397},[147,11105,2656],{"class":397},[147,11107,11108],{"class":157}," c_g_b ",[147,11110,445],{"class":397},[147,11112,2312],{"class":448},[147,11114,1565],{"class":157},[147,11116,11117],{"class":149,"line":1586},[147,11118,2674],{"emptyLinePlaceholder":324},[147,11120,11121,11123,11125],{"class":149,"line":1592},[147,11122,404],{"class":397},[147,11124,2247],{"class":2237},[147,11126,11127],{"class":157},"() {\n",[147,11129,11130],{"class":149,"line":1604},[147,11131,2674],{"emptyLinePlaceholder":324},[147,11133,11134],{"class":149,"line":1886},[147,11135,11136],{"class":458},"    \u002F\u002F局部变量\n",[147,11138,11139,11141,11144,11146,11148],{"class":149,"line":1891},[147,11140,2259],{"class":397},[147,11142,11143],{"class":157}," a ",[147,11145,445],{"class":397},[147,11147,2312],{"class":448},[147,11149,1565],{"class":157},[147,11151,11152,11154,11157,11159,11161],{"class":149,"line":1897},[147,11153,2259],{"class":397},[147,11155,11156],{"class":157}," b ",[147,11158,445],{"class":397},[147,11160,2312],{"class":448},[147,11162,1565],{"class":157},[147,11164,11165],{"class":149,"line":1902},[147,11166,2674],{"emptyLinePlaceholder":324},[147,11168,11169],{"class":149,"line":1916},[147,11170,11171],{"class":458},"    \u002F\u002F打印地址\n",[147,11173,11174,11176,11178,11181,11183,11185,11187,11189,11191,11194,11196],{"class":149,"line":1921},[147,11175,6803],{"class":157},[147,11177,1443],{"class":397},[147,11179,11180],{"class":504}," \"局部变量a地址为： \"",[147,11182,1719],{"class":397},[147,11184,1932],{"class":157},[147,11186,404],{"class":397},[147,11188,828],{"class":157},[147,11190,752],{"class":397},[147,11192,11193],{"class":157},"a ",[147,11195,1443],{"class":397},[147,11197,9114],{"class":157},[147,11199,11200,11202,11204,11207,11209,11211,11213,11215,11217,11220,11222],{"class":149,"line":1927},[147,11201,6803],{"class":157},[147,11203,1443],{"class":397},[147,11205,11206],{"class":504}," \"局部变量b地址为： \"",[147,11208,1719],{"class":397},[147,11210,1932],{"class":157},[147,11212,404],{"class":397},[147,11214,828],{"class":157},[147,11216,752],{"class":397},[147,11218,11219],{"class":157},"b ",[147,11221,1443],{"class":397},[147,11223,9114],{"class":157},[147,11225,11226],{"class":149,"line":1948},[147,11227,2674],{"emptyLinePlaceholder":324},[147,11229,11230,11232,11234,11237,11239,11242,11244,11246,11248,11251,11253],{"class":149,"line":1953},[147,11231,6803],{"class":157},[147,11233,1443],{"class":397},[147,11235,11236],{"class":504}," \"全局变量g_a地址为： \"",[147,11238,1719],{"class":397},[147,11240,11241],{"class":157},"  (",[147,11243,404],{"class":397},[147,11245,828],{"class":157},[147,11247,752],{"class":397},[147,11249,11250],{"class":157},"g_a ",[147,11252,1443],{"class":397},[147,11254,9114],{"class":157},[147,11256,11257,11259,11261,11264,11266,11268,11270,11272,11274,11277,11279],{"class":149,"line":1967},[147,11258,6803],{"class":157},[147,11260,1443],{"class":397},[147,11262,11263],{"class":504}," \"全局变量g_b地址为： \"",[147,11265,1719],{"class":397},[147,11267,11241],{"class":157},[147,11269,404],{"class":397},[147,11271,828],{"class":157},[147,11273,752],{"class":397},[147,11275,11276],{"class":157},"g_b ",[147,11278,1443],{"class":397},[147,11280,9114],{"class":157},[147,11282,11283],{"class":149,"line":1972},[147,11284,2674],{"emptyLinePlaceholder":324},[147,11286,11287],{"class":149,"line":2001},[147,11288,11289],{"class":458},"    \u002F\u002F静态变量\n",[147,11291,11292,11295,11297,11300,11302,11304],{"class":149,"line":2006},[147,11293,11294],{"class":397},"    static",[147,11296,2656],{"class":397},[147,11298,11299],{"class":157}," s_a ",[147,11301,445],{"class":397},[147,11303,2312],{"class":448},[147,11305,1565],{"class":157},[147,11307,11308,11310,11312,11315,11317,11319],{"class":149,"line":2023},[147,11309,11294],{"class":397},[147,11311,2656],{"class":397},[147,11313,11314],{"class":157}," s_b ",[147,11316,445],{"class":397},[147,11318,2312],{"class":448},[147,11320,1565],{"class":157},[147,11322,11323],{"class":149,"line":2028},[147,11324,2674],{"emptyLinePlaceholder":324},[147,11326,11327,11329,11331,11334,11336,11338,11340,11342,11344,11347,11349],{"class":149,"line":2033},[147,11328,6803],{"class":157},[147,11330,1443],{"class":397},[147,11332,11333],{"class":504}," \"静态变量s_a地址为： \"",[147,11335,1719],{"class":397},[147,11337,1932],{"class":157},[147,11339,404],{"class":397},[147,11341,828],{"class":157},[147,11343,752],{"class":397},[147,11345,11346],{"class":157},"s_a ",[147,11348,1443],{"class":397},[147,11350,9114],{"class":157},[147,11352,11353,11355,11357,11360,11362,11364,11366,11368,11370,11373,11375],{"class":149,"line":2038},[147,11354,6803],{"class":157},[147,11356,1443],{"class":397},[147,11358,11359],{"class":504}," \"静态变量s_b地址为： \"",[147,11361,1719],{"class":397},[147,11363,1932],{"class":157},[147,11365,404],{"class":397},[147,11367,828],{"class":157},[147,11369,752],{"class":397},[147,11371,11372],{"class":157},"s_b ",[147,11374,1443],{"class":397},[147,11376,9114],{"class":157},[147,11378,11379],{"class":149,"line":2052},[147,11380,2674],{"emptyLinePlaceholder":324},[147,11382,11383,11385,11387,11390,11392,11394,11396,11398,11400,11402,11404],{"class":149,"line":2057},[147,11384,6803],{"class":157},[147,11386,1443],{"class":397},[147,11388,11389],{"class":504}," \"字符串常量地址为： \"",[147,11391,1719],{"class":397},[147,11393,1932],{"class":157},[147,11395,404],{"class":397},[147,11397,828],{"class":157},[147,11399,752],{"class":397},[147,11401,1461],{"class":504},[147,11403,1719],{"class":397},[147,11405,9114],{"class":157},[147,11407,11408,11410,11412,11414,11416,11418,11420,11422,11424,11427,11429],{"class":149,"line":2851},[147,11409,6803],{"class":157},[147,11411,1443],{"class":397},[147,11413,11389],{"class":504},[147,11415,1719],{"class":397},[147,11417,1932],{"class":157},[147,11419,404],{"class":397},[147,11421,828],{"class":157},[147,11423,752],{"class":397},[147,11425,11426],{"class":504},"\"hello world1\"",[147,11428,1719],{"class":397},[147,11430,9114],{"class":157},[147,11432,11433],{"class":149,"line":2865},[147,11434,2674],{"emptyLinePlaceholder":324},[147,11436,11437,11439,11441,11444,11446,11448,11450,11452,11454,11457,11459],{"class":149,"line":2873},[147,11438,6803],{"class":157},[147,11440,1443],{"class":397},[147,11442,11443],{"class":504}," \"全局常量c_g_a地址为： \"",[147,11445,1719],{"class":397},[147,11447,1932],{"class":157},[147,11449,404],{"class":397},[147,11451,828],{"class":157},[147,11453,752],{"class":397},[147,11455,11456],{"class":157},"c_g_a ",[147,11458,1443],{"class":397},[147,11460,9114],{"class":157},[147,11462,11463,11465,11467,11470,11472,11474,11476,11478,11480,11483,11485],{"class":149,"line":2878},[147,11464,6803],{"class":157},[147,11466,1443],{"class":397},[147,11468,11469],{"class":504}," \"全局常量c_g_b地址为： \"",[147,11471,1719],{"class":397},[147,11473,1932],{"class":157},[147,11475,404],{"class":397},[147,11477,828],{"class":157},[147,11479,752],{"class":397},[147,11481,11482],{"class":157},"c_g_b ",[147,11484,1443],{"class":397},[147,11486,9114],{"class":157},[147,11488,11489],{"class":149,"line":2884},[147,11490,2674],{"emptyLinePlaceholder":324},[147,11492,11493,11496,11498,11501,11503,11505],{"class":149,"line":2890},[147,11494,11495],{"class":397},"    const",[147,11497,2656],{"class":397},[147,11499,11500],{"class":157}," c_l_a ",[147,11502,445],{"class":397},[147,11504,2312],{"class":448},[147,11506,1565],{"class":157},[147,11508,11509,11511,11513,11516,11518,11520],{"class":149,"line":2895},[147,11510,11495],{"class":397},[147,11512,2656],{"class":397},[147,11514,11515],{"class":157}," c_l_b ",[147,11517,445],{"class":397},[147,11519,2312],{"class":448},[147,11521,1565],{"class":157},[147,11523,11524,11526,11528,11531,11533,11535,11537,11539,11541,11544,11546],{"class":149,"line":8222},[147,11525,6803],{"class":157},[147,11527,1443],{"class":397},[147,11529,11530],{"class":504}," \"局部常量c_l_a地址为： \"",[147,11532,1719],{"class":397},[147,11534,1932],{"class":157},[147,11536,404],{"class":397},[147,11538,828],{"class":157},[147,11540,752],{"class":397},[147,11542,11543],{"class":157},"c_l_a ",[147,11545,1443],{"class":397},[147,11547,9114],{"class":157},[147,11549,11550,11552,11554,11557,11559,11561,11563,11565,11567,11570,11572],{"class":149,"line":8246},[147,11551,6803],{"class":157},[147,11553,1443],{"class":397},[147,11555,11556],{"class":504}," \"局部常量c_l_b地址为： \"",[147,11558,1719],{"class":397},[147,11560,1932],{"class":157},[147,11562,404],{"class":397},[147,11564,828],{"class":157},[147,11566,752],{"class":397},[147,11568,11569],{"class":157},"c_l_b ",[147,11571,1443],{"class":397},[147,11573,9114],{"class":157},[147,11575,11576],{"class":149,"line":8251},[147,11577,2674],{"emptyLinePlaceholder":324},[147,11579,11580,11582,11584,11586],{"class":149,"line":8257},[147,11581,2577],{"class":2237},[147,11583,401],{"class":157},[147,11585,2582],{"class":504},[147,11587,2993],{"class":157},[147,11589,11590],{"class":149,"line":8284},[147,11591,2674],{"emptyLinePlaceholder":324},[147,11593,11594,11596,11598],{"class":149,"line":8289},[147,11595,4364],{"class":397},[147,11597,4367],{"class":448},[147,11599,1565],{"class":157},[147,11601,11602],{"class":149,"line":8295},[147,11603,1839],{"class":157},[19,11605,11606],{},"总结：",[1406,11608,11609,11612,11615,11618],{},[353,11610,11611],{},"c++中程序运行前分为全局区和代码区",[353,11613,11614],{},"代码区特点是共享和只读",[353,11616,11617],{},"全局区中存放全局变量、静态变量、常量",[353,11619,11620],{},"常量区中存放const修饰的全局常量和字符串常量",[367,11622,11624],{"id":11623},"_512程序运行后","5.1.2程序运行后",[350,11626,11627],{},[353,11628,11629],{},"栈区：",[1406,11631,11632,11639],{},[353,11633,11634,11635,11638],{},"由编译器自动分配释放, 存放",[234,11636,11637],{},"函数的参数值,局部变量","等",[353,11640,11641,11642,11645],{},"注意事项：",[234,11643,11644],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[138,11647,11649],{"className":388,"code":11648,"language":390,"meta":143,"style":143},"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",[51,11650,11651,11662,11666,11681,11693,11697,11701,11709,11714,11729,11747,11764,11774,11782],{"__ignoreMap":143},[147,11652,11653,11655,11657,11660],{"class":149,"line":150},[147,11654,404],{"class":397},[147,11656,6792],{"class":397},[147,11658,11659],{"class":2237}," func",[147,11661,2250],{"class":157},[147,11663,11664],{"class":149,"line":312},[147,11665,1820],{"class":157},[147,11667,11668,11670,11672,11674,11676,11678],{"class":149,"line":1454},[147,11669,2259],{"class":397},[147,11671,11143],{"class":157},[147,11673,445],{"class":397},[147,11675,2312],{"class":448},[147,11677,455],{"class":157},[147,11679,11680],{"class":458}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[147,11682,11683,11685,11687,11690],{"class":149,"line":1469},[147,11684,4364],{"class":397},[147,11686,10858],{"class":397},[147,11688,11689],{"class":157},"a;",[147,11691,11692],{"class":458}," \u002F\u002F放回局部变量的地址\n",[147,11694,11695],{"class":149,"line":1475},[147,11696,1839],{"class":157},[147,11698,11699],{"class":149,"line":1489},[147,11700,2674],{"emptyLinePlaceholder":324},[147,11702,11703,11705,11707],{"class":149,"line":1495},[147,11704,404],{"class":397},[147,11706,2247],{"class":2237},[147,11708,11127],{"class":157},[147,11710,11711],{"class":149,"line":1586},[147,11712,11713],{"class":458},"    \u002F\u002F接受func的返回值\n",[147,11715,11716,11718,11720,11723,11725,11727],{"class":149,"line":1592},[147,11717,2259],{"class":397},[147,11719,6792],{"class":397},[147,11721,11722],{"class":157},"p ",[147,11724,445],{"class":397},[147,11726,11659],{"class":2237},[147,11728,5910],{"class":157},[147,11730,11731,11733,11735,11737,11739,11741,11744],{"class":149,"line":1604},[147,11732,6803],{"class":157},[147,11734,1443],{"class":397},[147,11736,6792],{"class":397},[147,11738,11722],{"class":157},[147,11740,1443],{"class":397},[147,11742,11743],{"class":157}," endl;",[147,11745,11746],{"class":458}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[147,11748,11749,11751,11753,11755,11757,11759,11761],{"class":149,"line":1886},[147,11750,6803],{"class":157},[147,11752,1443],{"class":397},[147,11754,6792],{"class":397},[147,11756,11722],{"class":157},[147,11758,1443],{"class":397},[147,11760,11743],{"class":157},[147,11762,11763],{"class":458}," \u002F\u002F第二次这个数据不再保留\n",[147,11765,11766,11768,11770,11772],{"class":149,"line":1891},[147,11767,2577],{"class":2237},[147,11769,401],{"class":157},[147,11771,2582],{"class":504},[147,11773,2993],{"class":157},[147,11775,11776,11778,11780],{"class":149,"line":1897},[147,11777,4364],{"class":397},[147,11779,4367],{"class":448},[147,11781,1565],{"class":157},[147,11783,11784],{"class":149,"line":1902},[147,11785,1839],{"class":157},[19,11787,11788],{},"输出结果：",[19,11790,11791],{},[29,11792],{"alt":11793,"src":11794},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,11796,11797],{},"总结：不要返回局部变量的地址",[350,11799,11800],{"start":312},[353,11801,11802],{},"堆区",[1406,11804,11805,11808],{},[353,11806,11807],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[353,11809,11810],{},"在c++中主要利用new在堆区开辟内存",[138,11812,11814],{"className":388,"code":11813,"language":390,"meta":143,"style":143},"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",[51,11815,11816,11831,11835,11840,11861,11868,11872,11880,11884,11889,11903,11915],{"__ignoreMap":143},[147,11817,11818,11820,11823,11826,11828],{"class":149,"line":150},[147,11819,404],{"class":397},[147,11821,11822],{"class":397},"  *",[147,11824,11825],{"class":2237},"func",[147,11827,2701],{"class":157},[147,11829,11830],{"class":458},"  \u002F\u002F函数返回指针\n",[147,11832,11833],{"class":149,"line":312},[147,11834,1820],{"class":157},[147,11836,11837],{"class":149,"line":1454},[147,11838,11839],{"class":458},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[147,11841,11842,11844,11846,11848,11850,11853,11855,11857,11859],{"class":149,"line":1469},[147,11843,4421],{"class":397},[147,11845,6792],{"class":397},[147,11847,19],{"class":157},[147,11849,445],{"class":397},[147,11851,11852],{"class":397}," new",[147,11854,2656],{"class":397},[147,11856,401],{"class":157},[147,11858,845],{"class":448},[147,11860,2993],{"class":157},[147,11862,11863,11865],{"class":149,"line":1475},[147,11864,4655],{"class":397},[147,11866,11867],{"class":157}," p;\n",[147,11869,11870],{"class":149,"line":1489},[147,11871,1839],{"class":157},[147,11873,11874,11876,11878],{"class":149,"line":1495},[147,11875,404],{"class":397},[147,11877,2247],{"class":2237},[147,11879,2250],{"class":157},[147,11881,11882],{"class":149,"line":1586},[147,11883,1820],{"class":157},[147,11885,11886],{"class":149,"line":1592},[147,11887,11888],{"class":458},"    \u002F\u002F在堆区开辟数据\n",[147,11890,11891,11893,11895,11897,11899,11901],{"class":149,"line":1604},[147,11892,2259],{"class":397},[147,11894,6792],{"class":397},[147,11896,19],{"class":157},[147,11898,445],{"class":397},[147,11900,11825],{"class":2237},[147,11902,5910],{"class":157},[147,11904,11905,11907,11909,11911,11913],{"class":149,"line":1886},[147,11906,1825],{"class":157},[147,11908,6693],{"class":397},[147,11910,19],{"class":157},[147,11912,1443],{"class":397},[147,11914,1466],{"class":157},[147,11916,11917],{"class":149,"line":1891},[147,11918,1839],{"class":157},[19,11920,11921],{},"图片展示：",[19,11923,11924],{},[29,11925],{"alt":11793,"src":11926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,11928,11929],{},"堆区内存由程序员管生死！！！",[350,11931,11932],{"start":1454},[353,11933,11934],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,11936,11937],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,11939,11940,11941],{},"​语法：",[51,11942,11943],{}," new 数据类型",[19,11945,11946],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[138,11948,11950],{"className":388,"code":11949,"language":390,"meta":143,"style":143},"\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",[51,11951,11952,11957,11967,11971,11976,11981,12003,12007,12015,12019,12033,12045,12057,12069,12074,12079,12090,12094,12099,12107,12111,12116,12138,12164,12168,12186,12190,12216,12220,12232,12236,12241,12246,12254,12258,12262,12270,12274,12280,12286],{"__ignoreMap":143},[147,11953,11954],{"class":149,"line":150},[147,11955,11956],{"class":458},"\u002F\u002F1.new的基本语法\n",[147,11958,11959,11961,11963,11965],{"class":149,"line":312},[147,11960,404],{"class":397},[147,11962,6792],{"class":397},[147,11964,11825],{"class":2237},[147,11966,2250],{"class":157},[147,11968,11969],{"class":149,"line":1454},[147,11970,1820],{"class":157},[147,11972,11973],{"class":149,"line":1469},[147,11974,11975],{"class":458},"    \u002F\u002F在堆区创建整型数据\n",[147,11977,11978],{"class":149,"line":1475},[147,11979,11980],{"class":458},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[147,11982,11983,11985,11987,11989,11992,11994,11996,11998,12000],{"class":149,"line":1489},[147,11984,2259],{"class":397},[147,11986,6792],{"class":397},[147,11988,19],{"class":157},[147,11990,11991],{"class":397},"=new",[147,11993,2656],{"class":397},[147,11995,401],{"class":157},[147,11997,845],{"class":448},[147,11999,6240],{"class":157},[147,12001,12002],{"class":458},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[147,12004,12005],{"class":149,"line":1495},[147,12006,1839],{"class":157},[147,12008,12009,12011,12013],{"class":149,"line":1586},[147,12010,5638],{"class":397},[147,12012,5862],{"class":2237},[147,12014,2250],{"class":157},[147,12016,12017],{"class":149,"line":1592},[147,12018,1820],{"class":157},[147,12020,12021,12023,12025,12027,12029,12031],{"class":149,"line":1604},[147,12022,2259],{"class":397},[147,12024,6792],{"class":397},[147,12026,19],{"class":157},[147,12028,445],{"class":397},[147,12030,11825],{"class":2237},[147,12032,5910],{"class":157},[147,12034,12035,12037,12039,12041,12043],{"class":149,"line":1886},[147,12036,1825],{"class":157},[147,12038,6693],{"class":397},[147,12040,19],{"class":157},[147,12042,1443],{"class":397},[147,12044,1466],{"class":157},[147,12046,12047,12049,12051,12053,12055],{"class":149,"line":1891},[147,12048,1825],{"class":157},[147,12050,6693],{"class":397},[147,12052,19],{"class":157},[147,12054,1443],{"class":397},[147,12056,1466],{"class":157},[147,12058,12059,12061,12063,12065,12067],{"class":149,"line":1897},[147,12060,1825],{"class":157},[147,12062,6693],{"class":397},[147,12064,19],{"class":157},[147,12066,1443],{"class":397},[147,12068,1466],{"class":157},[147,12070,12071],{"class":149,"line":1902},[147,12072,12073],{"class":458},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[147,12075,12076],{"class":149,"line":1916},[147,12077,12078],{"class":458},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[147,12080,12081,12084,12087],{"class":149,"line":1921},[147,12082,12083],{"class":397},"    delete",[147,12085,12086],{"class":157}," p;",[147,12088,12089],{"class":458},"\u002F\u002F删除这块地址\n",[147,12091,12092],{"class":149,"line":1927},[147,12093,1839],{"class":157},[147,12095,12096],{"class":149,"line":1948},[147,12097,12098],{"class":458},"\u002F\u002F2.在堆区利用new开辟数组\n",[147,12100,12101,12103,12105],{"class":149,"line":1953},[147,12102,5638],{"class":397},[147,12104,5931],{"class":2237},[147,12106,2250],{"class":157},[147,12108,12109],{"class":149,"line":1967},[147,12110,1820],{"class":157},[147,12112,12113],{"class":149,"line":1972},[147,12114,12115],{"class":458},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[147,12117,12118,12120,12122,12124,12126,12128,12130,12132,12135],{"class":149,"line":2001},[147,12119,2259],{"class":397},[147,12121,6792],{"class":397},[147,12123,4154],{"class":157},[147,12125,11991],{"class":397},[147,12127,2656],{"class":397},[147,12129,1289],{"class":157},[147,12131,845],{"class":448},[147,12133,12134],{"class":157},"];",[147,12136,12137],{"class":458},"\u002F\u002F10代表数组有10个元素\n",[147,12139,12140,12142,12144,12146,12148,12150,12152,12154,12156,12158,12160,12162],{"class":149,"line":2006},[147,12141,3475],{"class":397},[147,12143,1932],{"class":157},[147,12145,404],{"class":397},[147,12147,3306],{"class":157},[147,12149,445],{"class":397},[147,12151,590],{"class":448},[147,12153,3313],{"class":157},[147,12155,1309],{"class":397},[147,12157,845],{"class":448},[147,12159,3313],{"class":157},[147,12161,2566],{"class":397},[147,12163,407],{"class":157},[147,12165,12166],{"class":149,"line":2023},[147,12167,2304],{"class":157},[147,12169,12170,12173,12175,12177,12179,12181,12183],{"class":149,"line":2028},[147,12171,12172],{"class":157},"        arr[i]",[147,12174,445],{"class":397},[147,12176,840],{"class":157},[147,12178,880],{"class":397},[147,12180,710],{"class":448},[147,12182,455],{"class":157},[147,12184,12185],{"class":458},"\u002F\u002F给10个元素赋值100～109\n",[147,12187,12188],{"class":149,"line":2033},[147,12189,2461],{"class":157},[147,12191,12192,12194,12196,12198,12200,12202,12204,12206,12208,12210,12212,12214],{"class":149,"line":2038},[147,12193,3475],{"class":397},[147,12195,1932],{"class":157},[147,12197,404],{"class":397},[147,12199,3306],{"class":157},[147,12201,445],{"class":397},[147,12203,590],{"class":448},[147,12205,3313],{"class":157},[147,12207,1309],{"class":397},[147,12209,845],{"class":448},[147,12211,3313],{"class":157},[147,12213,2566],{"class":397},[147,12215,407],{"class":157},[147,12217,12218],{"class":149,"line":2052},[147,12219,2304],{"class":157},[147,12221,12222,12224,12226,12228,12230],{"class":149,"line":2057},[147,12223,3725],{"class":157},[147,12225,1443],{"class":397},[147,12227,4628],{"class":157},[147,12229,1443],{"class":397},[147,12231,1466],{"class":157},[147,12233,12234],{"class":149,"line":2851},[147,12235,2461],{"class":157},[147,12237,12238],{"class":149,"line":2865},[147,12239,12240],{"class":458},"    \u002F\u002F释放堆区数组\n",[147,12242,12243],{"class":149,"line":2873},[147,12244,12245],{"class":458},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[147,12247,12248,12251],{"class":149,"line":2878},[147,12249,12250],{"class":397},"    delete[]",[147,12252,12253],{"class":157}," arr;\n",[147,12255,12256],{"class":149,"line":2884},[147,12257,1839],{"class":157},[147,12259,12260],{"class":149,"line":2890},[147,12261,2674],{"emptyLinePlaceholder":324},[147,12263,12264,12266,12268],{"class":149,"line":2895},[147,12265,404],{"class":397},[147,12267,2247],{"class":2237},[147,12269,2250],{"class":157},[147,12271,12272],{"class":149,"line":8222},[147,12273,1820],{"class":157},[147,12275,12276,12278],{"class":149,"line":8246},[147,12277,5907],{"class":2237},[147,12279,5910],{"class":157},[147,12281,12282,12284],{"class":149,"line":8251},[147,12283,5976],{"class":2237},[147,12285,5910],{"class":157},[147,12287,12288],{"class":149,"line":8257},[147,12289,1839],{"class":157},[308,12291,12292],{},"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":143,"searchDepth":312,"depth":312,"links":12294},[12295],{"id":10963,"depth":312,"text":10964,"children":12296},[12297,12298],{"id":10995,"depth":1454,"text":10996},{"id":11623,"depth":1454,"text":11624},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10955,"description":143},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12305,"title":12306,"body":12307,"description":143,"extension":322,"meta":13788,"navigation":324,"path":13789,"seo":13790,"stem":13791,"__hash__":13792},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12308,"toc":13780},[12309,12312,12316,12319,12322,12491,12495,12500,12517,12522,12674,12678,12681,12684,13078,13082,13085,13090,13093,13405,13409,13415,13575,13577,13585,13589,13592,13599,13777],[10,12310,12306],{"id":12311},"_6引用",[14,12313,12315],{"id":12314},"_61引用基本用法","6.1引用基本用法",[19,12317,12318],{},"引用的本质：给变量起别名",[19,12320,12321],{},"语法：数据类型 &别名=原名",[138,12323,12325],{"className":388,"code":12324,"language":390,"meta":143,"style":143},"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",[51,12326,12327,12335,12339,12351,12363,12367,12386,12405,12409,12420,12424,12443,12461,12465,12475,12479,12487],{"__ignoreMap":143},[147,12328,12329,12331,12333],{"class":149,"line":150},[147,12330,404],{"class":397},[147,12332,2247],{"class":2237},[147,12334,11127],{"class":157},[147,12336,12337],{"class":149,"line":312},[147,12338,2674],{"emptyLinePlaceholder":324},[147,12340,12341,12343,12345,12347,12349],{"class":149,"line":1454},[147,12342,2259],{"class":397},[147,12344,11143],{"class":157},[147,12346,445],{"class":397},[147,12348,2312],{"class":448},[147,12350,1565],{"class":157},[147,12352,12353,12355,12357,12359,12361],{"class":149,"line":1469},[147,12354,2259],{"class":397},[147,12356,10858],{"class":397},[147,12358,11219],{"class":157},[147,12360,445],{"class":397},[147,12362,1707],{"class":157},[147,12364,12365],{"class":149,"line":1475},[147,12366,2674],{"emptyLinePlaceholder":324},[147,12368,12369,12371,12373,12376,12378,12380,12382,12384],{"class":149,"line":1489},[147,12370,6803],{"class":157},[147,12372,1443],{"class":397},[147,12374,12375],{"class":504}," \"a = \"",[147,12377,1719],{"class":397},[147,12379,11143],{"class":157},[147,12381,1443],{"class":397},[147,12383,11743],{"class":157},[147,12385,7542],{"class":458},[147,12387,12388,12390,12392,12395,12397,12399,12401,12403],{"class":149,"line":1495},[147,12389,6803],{"class":157},[147,12391,1443],{"class":397},[147,12393,12394],{"class":504}," \"b = \"",[147,12396,1719],{"class":397},[147,12398,11156],{"class":157},[147,12400,1443],{"class":397},[147,12402,11743],{"class":157},[147,12404,7542],{"class":458},[147,12406,12407],{"class":149,"line":1586},[147,12408,2674],{"emptyLinePlaceholder":324},[147,12410,12411,12414,12416,12418],{"class":149,"line":1592},[147,12412,12413],{"class":157},"    b ",[147,12415,445],{"class":397},[147,12417,6028],{"class":448},[147,12419,1565],{"class":157},[147,12421,12422],{"class":149,"line":1604},[147,12423,2674],{"emptyLinePlaceholder":324},[147,12425,12426,12428,12430,12432,12434,12436,12438,12440],{"class":149,"line":1886},[147,12427,6803],{"class":157},[147,12429,1443],{"class":397},[147,12431,12375],{"class":504},[147,12433,1719],{"class":397},[147,12435,11143],{"class":157},[147,12437,1443],{"class":397},[147,12439,11743],{"class":157},[147,12441,12442],{"class":458},"\u002F\u002F100\n",[147,12444,12445,12447,12449,12451,12453,12455,12457,12459],{"class":149,"line":1891},[147,12446,6803],{"class":157},[147,12448,1443],{"class":397},[147,12450,12394],{"class":504},[147,12452,1719],{"class":397},[147,12454,11156],{"class":157},[147,12456,1443],{"class":397},[147,12458,11743],{"class":157},[147,12460,12442],{"class":458},[147,12462,12463],{"class":149,"line":1897},[147,12464,2674],{"emptyLinePlaceholder":324},[147,12466,12467,12469,12471,12473],{"class":149,"line":1902},[147,12468,2577],{"class":2237},[147,12470,401],{"class":157},[147,12472,2582],{"class":504},[147,12474,2993],{"class":157},[147,12476,12477],{"class":149,"line":1916},[147,12478,2674],{"emptyLinePlaceholder":324},[147,12480,12481,12483,12485],{"class":149,"line":1921},[147,12482,4364],{"class":397},[147,12484,4367],{"class":448},[147,12486,1565],{"class":157},[147,12488,12489],{"class":149,"line":1927},[147,12490,1839],{"class":157},[14,12492,12494],{"id":12493},"_62引用的注意事项","6.2引用的注意事项",[350,12496,12497],{},[353,12498,12499],{},"引用必须要初始化",[138,12501,12503],{"className":388,"code":12502,"language":390,"meta":143,"style":143},"int &b;\u002F\u002F非常错误！\n",[51,12504,12505],{"__ignoreMap":143},[147,12506,12507,12509,12511,12514],{"class":149,"line":150},[147,12508,404],{"class":397},[147,12510,10858],{"class":397},[147,12512,12513],{"class":157},"b;",[147,12515,12516],{"class":458},"\u002F\u002F非常错误！\n",[350,12518,12519],{"start":312},[353,12520,12521],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[138,12523,12525],{"className":388,"code":12524,"language":390,"meta":143,"style":143},"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",[51,12526,12527,12535,12547,12559,12567,12583,12596,12614,12632,12652,12662,12670],{"__ignoreMap":143},[147,12528,12529,12531,12533],{"class":149,"line":150},[147,12530,404],{"class":397},[147,12532,2247],{"class":2237},[147,12534,11127],{"class":157},[147,12536,12537,12539,12541,12543,12545],{"class":149,"line":312},[147,12538,2259],{"class":397},[147,12540,11143],{"class":157},[147,12542,445],{"class":397},[147,12544,2312],{"class":448},[147,12546,1565],{"class":157},[147,12548,12549,12551,12553,12555,12557],{"class":149,"line":1454},[147,12550,2259],{"class":397},[147,12552,11156],{"class":157},[147,12554,445],{"class":397},[147,12556,9224],{"class":448},[147,12558,1565],{"class":157},[147,12560,12561,12564],{"class":149,"line":1469},[147,12562,12563],{"class":458},"    \u002F\u002Fint &c;",[147,12565,12566],{"class":458}," \u002F\u002F错误，引用必须初始化\n",[147,12568,12569,12571,12573,12575,12577,12580],{"class":149,"line":1475},[147,12570,2259],{"class":397},[147,12572,10858],{"class":397},[147,12574,3220],{"class":157},[147,12576,445],{"class":397},[147,12578,12579],{"class":157}," a;",[147,12581,12582],{"class":458}," \u002F\u002F一旦初始化后，就不可以更改\n",[147,12584,12585,12588,12590,12593],{"class":149,"line":1489},[147,12586,12587],{"class":157},"    c ",[147,12589,445],{"class":397},[147,12591,12592],{"class":157}," b;",[147,12594,12595],{"class":458}," \u002F\u002F这是赋值操作，不是更改引用\n",[147,12597,12598,12600,12602,12604,12606,12608,12610,12612],{"class":149,"line":1495},[147,12599,6803],{"class":157},[147,12601,1443],{"class":397},[147,12603,12375],{"class":504},[147,12605,1719],{"class":397},[147,12607,11143],{"class":157},[147,12609,1443],{"class":397},[147,12611,11743],{"class":157},[147,12613,7527],{"class":458},[147,12615,12616,12618,12620,12622,12624,12626,12628,12630],{"class":149,"line":1586},[147,12617,6803],{"class":157},[147,12619,1443],{"class":397},[147,12621,12394],{"class":504},[147,12623,1719],{"class":397},[147,12625,11156],{"class":157},[147,12627,1443],{"class":397},[147,12629,11743],{"class":157},[147,12631,7527],{"class":458},[147,12633,12634,12636,12638,12641,12643,12646,12648,12650],{"class":149,"line":1592},[147,12635,6803],{"class":157},[147,12637,1443],{"class":397},[147,12639,12640],{"class":504}," \"c = \"",[147,12642,1719],{"class":397},[147,12644,12645],{"class":157}," c ",[147,12647,1443],{"class":397},[147,12649,11743],{"class":157},[147,12651,7527],{"class":458},[147,12653,12654,12656,12658,12660],{"class":149,"line":1604},[147,12655,2577],{"class":2237},[147,12657,401],{"class":157},[147,12659,2582],{"class":504},[147,12661,2993],{"class":157},[147,12663,12664,12666,12668],{"class":149,"line":1886},[147,12665,4364],{"class":397},[147,12667,4367],{"class":448},[147,12669,1565],{"class":157},[147,12671,12672],{"class":149,"line":1891},[147,12673,1839],{"class":157},[14,12675,12677],{"id":12676},"_63引用做函数参数","6.3引用做函数参数",[19,12679,12680],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,12682,12683],{},"优点：可以简化指针修改实参",[138,12685,12687],{"className":388,"code":12686,"language":390,"meta":143,"style":143},"\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",[51,12688,12689,12694,12717,12728,12738,12747,12751,12755,12760,12782,12794,12806,12816,12820,12824,12829,12851,12861,12869,12877,12881,12885,12893,12897,12909,12921,12925,12936,12962,12966,12986,13010,13014,13024,13048,13052,13062,13066,13074],{"__ignoreMap":143},[147,12690,12691],{"class":149,"line":150},[147,12692,12693],{"class":458},"\u002F\u002F1. 值传递\n",[147,12695,12696,12698,12701,12703,12705,12707,12710,12712,12714],{"class":149,"line":312},[147,12697,5638],{"class":397},[147,12699,12700],{"class":2237}," mySwap01",[147,12702,401],{"class":157},[147,12704,404],{"class":397},[147,12706,1673],{"class":5490},[147,12708,12709],{"class":157},", ",[147,12711,404],{"class":397},[147,12713,3107],{"class":5490},[147,12715,12716],{"class":157},") {\n",[147,12718,12719,12721,12724,12726],{"class":149,"line":1454},[147,12720,2259],{"class":397},[147,12722,12723],{"class":157}," temp ",[147,12725,445],{"class":397},[147,12727,1707],{"class":157},[147,12729,12730,12733,12735],{"class":149,"line":1469},[147,12731,12732],{"class":157},"    a ",[147,12734,445],{"class":397},[147,12736,12737],{"class":157}," b;\n",[147,12739,12740,12742,12744],{"class":149,"line":1475},[147,12741,12413],{"class":157},[147,12743,445],{"class":397},[147,12745,12746],{"class":157}," temp;\n",[147,12748,12749],{"class":149,"line":1489},[147,12750,1839],{"class":157},[147,12752,12753],{"class":149,"line":1495},[147,12754,2674],{"emptyLinePlaceholder":324},[147,12756,12757],{"class":149,"line":1586},[147,12758,12759],{"class":458},"\u002F\u002F2. 地址传递\n",[147,12761,12762,12764,12767,12769,12772,12774,12776,12778,12780],{"class":149,"line":1592},[147,12763,5638],{"class":397},[147,12765,12766],{"class":2237}," mySwap02",[147,12768,401],{"class":157},[147,12770,12771],{"class":397},"int*",[147,12773,1673],{"class":5490},[147,12775,12709],{"class":157},[147,12777,12771],{"class":397},[147,12779,3107],{"class":5490},[147,12781,12716],{"class":157},[147,12783,12784,12786,12788,12790,12792],{"class":149,"line":1604},[147,12785,2259],{"class":397},[147,12787,12723],{"class":157},[147,12789,445],{"class":397},[147,12791,6792],{"class":397},[147,12793,6471],{"class":157},[147,12795,12796,12798,12800,12802,12804],{"class":149,"line":1886},[147,12797,6677],{"class":397},[147,12799,11193],{"class":157},[147,12801,445],{"class":397},[147,12803,6792],{"class":397},[147,12805,6343],{"class":157},[147,12807,12808,12810,12812,12814],{"class":149,"line":1891},[147,12809,6677],{"class":397},[147,12811,11219],{"class":157},[147,12813,445],{"class":397},[147,12815,12746],{"class":157},[147,12817,12818],{"class":149,"line":1897},[147,12819,1839],{"class":157},[147,12821,12822],{"class":149,"line":1902},[147,12823,2674],{"emptyLinePlaceholder":324},[147,12825,12826],{"class":149,"line":1916},[147,12827,12828],{"class":458},"\u002F\u002F3. 引用传递\n",[147,12830,12831,12833,12836,12838,12841,12843,12845,12847,12849],{"class":149,"line":1921},[147,12832,5638],{"class":397},[147,12834,12835],{"class":2237}," mySwap03",[147,12837,401],{"class":157},[147,12839,12840],{"class":397},"int&",[147,12842,1673],{"class":5490},[147,12844,12709],{"class":157},[147,12846,12840],{"class":397},[147,12848,3107],{"class":5490},[147,12850,12716],{"class":157},[147,12852,12853,12855,12857,12859],{"class":149,"line":1927},[147,12854,2259],{"class":397},[147,12856,12723],{"class":157},[147,12858,445],{"class":397},[147,12860,1707],{"class":157},[147,12862,12863,12865,12867],{"class":149,"line":1948},[147,12864,12732],{"class":157},[147,12866,445],{"class":397},[147,12868,12737],{"class":157},[147,12870,12871,12873,12875],{"class":149,"line":1953},[147,12872,12413],{"class":157},[147,12874,445],{"class":397},[147,12876,12746],{"class":157},[147,12878,12879],{"class":149,"line":1967},[147,12880,1839],{"class":157},[147,12882,12883],{"class":149,"line":1972},[147,12884,2674],{"emptyLinePlaceholder":324},[147,12886,12887,12889,12891],{"class":149,"line":2001},[147,12888,404],{"class":397},[147,12890,2247],{"class":2237},[147,12892,11127],{"class":157},[147,12894,12895],{"class":149,"line":2006},[147,12896,2674],{"emptyLinePlaceholder":324},[147,12898,12899,12901,12903,12905,12907],{"class":149,"line":2023},[147,12900,2259],{"class":397},[147,12902,11143],{"class":157},[147,12904,445],{"class":397},[147,12906,2312],{"class":448},[147,12908,1565],{"class":157},[147,12910,12911,12913,12915,12917,12919],{"class":149,"line":2028},[147,12912,2259],{"class":397},[147,12914,11156],{"class":157},[147,12916,445],{"class":397},[147,12918,9224],{"class":448},[147,12920,1565],{"class":157},[147,12922,12923],{"class":149,"line":2033},[147,12924,2674],{"emptyLinePlaceholder":324},[147,12926,12927,12930,12933],{"class":149,"line":2038},[147,12928,12929],{"class":2237},"    mySwap01",[147,12931,12932],{"class":157},"(a, b);",[147,12934,12935],{"class":458},"\u002F\u002F值传递，形参不会修饰实参\n",[147,12937,12938,12940,12942,12945,12947,12949,12951,12954,12956,12958,12960],{"class":149,"line":2052},[147,12939,6803],{"class":157},[147,12941,1443],{"class":397},[147,12943,12944],{"class":504}," \"a:\"",[147,12946,1719],{"class":397},[147,12948,11143],{"class":157},[147,12950,1443],{"class":397},[147,12952,12953],{"class":504}," \" b:\"",[147,12955,1719],{"class":397},[147,12957,11156],{"class":157},[147,12959,1443],{"class":397},[147,12961,9114],{"class":157},[147,12963,12964],{"class":149,"line":2057},[147,12965,2674],{"emptyLinePlaceholder":324},[147,12967,12968,12971,12973,12975,12978,12980,12983],{"class":149,"line":2851},[147,12969,12970],{"class":2237},"    mySwap02",[147,12972,401],{"class":157},[147,12974,752],{"class":397},[147,12976,12977],{"class":157},"a, ",[147,12979,752],{"class":397},[147,12981,12982],{"class":157},"b);",[147,12984,12985],{"class":458},"\u002F\u002F地址传递，形参会修饰实参\n",[147,12987,12988,12990,12992,12994,12996,12998,13000,13002,13004,13006,13008],{"class":149,"line":2865},[147,12989,6803],{"class":157},[147,12991,1443],{"class":397},[147,12993,12944],{"class":504},[147,12995,1719],{"class":397},[147,12997,11143],{"class":157},[147,12999,1443],{"class":397},[147,13001,12953],{"class":504},[147,13003,1719],{"class":397},[147,13005,11156],{"class":157},[147,13007,1443],{"class":397},[147,13009,9114],{"class":157},[147,13011,13012],{"class":149,"line":2873},[147,13013,2674],{"emptyLinePlaceholder":324},[147,13015,13016,13019,13021],{"class":149,"line":2878},[147,13017,13018],{"class":2237},"    mySwap03",[147,13020,12932],{"class":157},[147,13022,13023],{"class":458},"\u002F\u002F引用传递，形参会修饰实参\n",[147,13025,13026,13028,13030,13032,13034,13036,13038,13040,13042,13044,13046],{"class":149,"line":2884},[147,13027,6803],{"class":157},[147,13029,1443],{"class":397},[147,13031,12944],{"class":504},[147,13033,1719],{"class":397},[147,13035,11143],{"class":157},[147,13037,1443],{"class":397},[147,13039,12953],{"class":504},[147,13041,1719],{"class":397},[147,13043,11156],{"class":157},[147,13045,1443],{"class":397},[147,13047,9114],{"class":157},[147,13049,13050],{"class":149,"line":2890},[147,13051,2674],{"emptyLinePlaceholder":324},[147,13053,13054,13056,13058,13060],{"class":149,"line":2895},[147,13055,2577],{"class":2237},[147,13057,401],{"class":157},[147,13059,2582],{"class":504},[147,13061,2993],{"class":157},[147,13063,13064],{"class":149,"line":8222},[147,13065,2674],{"emptyLinePlaceholder":324},[147,13067,13068,13070,13072],{"class":149,"line":8246},[147,13069,4364],{"class":397},[147,13071,4367],{"class":448},[147,13073,1565],{"class":157},[147,13075,13076],{"class":149,"line":8251},[147,13077,1839],{"class":157},[14,13079,13081],{"id":13080},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,13083,13084],{},"作用：引用是可以作为函数的返回值存在的",[19,13086,9299,13087],{},[234,13088,13089],{},"不要返回局部变量引用",[19,13091,13092],{},"用法：函数调用作为左值",[138,13094,13096],{"className":10215,"code":13095,"language":10217,"meta":143,"style":143},"\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",[51,13097,13098,13103,13111,13126,13132,13136,13140,13145,13153,13170,13176,13180,13184,13192,13196,13201,13215,13235,13254,13258,13263,13276,13296,13314,13318,13334,13338,13357,13375,13379,13389,13393,13401],{"__ignoreMap":143},[147,13099,13100],{"class":149,"line":150},[147,13101,13102],{"class":458},"\u002F\u002F返回局部变量引用\n",[147,13104,13105,13107,13109],{"class":149,"line":312},[147,13106,12840],{"class":397},[147,13108,5862],{"class":2237},[147,13110,11127],{"class":157},[147,13112,13113,13115,13117,13119,13121,13123],{"class":149,"line":1454},[147,13114,2259],{"class":397},[147,13116,11143],{"class":157},[147,13118,445],{"class":397},[147,13120,2312],{"class":448},[147,13122,455],{"class":157},[147,13124,13125],{"class":458}," \u002F\u002F局部变量\n",[147,13127,13128,13130],{"class":149,"line":1469},[147,13129,4364],{"class":397},[147,13131,1707],{"class":157},[147,13133,13134],{"class":149,"line":1475},[147,13135,1839],{"class":157},[147,13137,13138],{"class":149,"line":1489},[147,13139,2674],{"emptyLinePlaceholder":324},[147,13141,13142],{"class":149,"line":1495},[147,13143,13144],{"class":458},"\u002F\u002F返回静态变量引用\n",[147,13146,13147,13149,13151],{"class":149,"line":1586},[147,13148,12840],{"class":397},[147,13150,5931],{"class":2237},[147,13152,11127],{"class":157},[147,13154,13155,13157,13159,13161,13163,13165,13167],{"class":149,"line":1592},[147,13156,11294],{"class":397},[147,13158,2656],{"class":397},[147,13160,11143],{"class":157},[147,13162,445],{"class":397},[147,13164,9224],{"class":448},[147,13166,455],{"class":157},[147,13168,13169],{"class":458},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[147,13171,13172,13174],{"class":149,"line":1604},[147,13173,4364],{"class":397},[147,13175,1707],{"class":157},[147,13177,13178],{"class":149,"line":1886},[147,13179,1839],{"class":157},[147,13181,13182],{"class":149,"line":1891},[147,13183,2674],{"emptyLinePlaceholder":324},[147,13185,13186,13188,13190],{"class":149,"line":1897},[147,13187,404],{"class":397},[147,13189,2247],{"class":2237},[147,13191,11127],{"class":157},[147,13193,13194],{"class":149,"line":1902},[147,13195,2674],{"emptyLinePlaceholder":324},[147,13197,13198],{"class":149,"line":1916},[147,13199,13200],{"class":458},"    \u002F\u002F不能返回局部变量的引用\n",[147,13202,13203,13206,13209,13211,13213],{"class":149,"line":1921},[147,13204,13205],{"class":397},"    int&",[147,13207,13208],{"class":157}," ref ",[147,13210,445],{"class":397},[147,13212,5862],{"class":2237},[147,13214,5910],{"class":157},[147,13216,13217,13219,13221,13224,13226,13228,13230,13232],{"class":149,"line":1927},[147,13218,6803],{"class":157},[147,13220,1443],{"class":397},[147,13222,13223],{"class":504}," \"ref = \"",[147,13225,1719],{"class":397},[147,13227,13208],{"class":157},[147,13229,1443],{"class":397},[147,13231,11743],{"class":157},[147,13233,13234],{"class":458},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[147,13236,13237,13239,13241,13243,13245,13247,13249,13251],{"class":149,"line":1948},[147,13238,6803],{"class":157},[147,13240,1443],{"class":397},[147,13242,13223],{"class":504},[147,13244,1719],{"class":397},[147,13246,13208],{"class":157},[147,13248,1443],{"class":397},[147,13250,11743],{"class":157},[147,13252,13253],{"class":458},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[147,13255,13256],{"class":149,"line":1953},[147,13257,2674],{"emptyLinePlaceholder":324},[147,13259,13260],{"class":149,"line":1967},[147,13261,13262],{"class":458},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[147,13264,13265,13267,13270,13272,13274],{"class":149,"line":1972},[147,13266,13205],{"class":397},[147,13268,13269],{"class":157}," ref2 ",[147,13271,445],{"class":397},[147,13273,5931],{"class":2237},[147,13275,5910],{"class":157},[147,13277,13278,13280,13282,13285,13287,13289,13291,13293],{"class":149,"line":2001},[147,13279,6803],{"class":157},[147,13281,1443],{"class":397},[147,13283,13284],{"class":504}," \"ref2 = \"",[147,13286,1719],{"class":397},[147,13288,13269],{"class":157},[147,13290,1443],{"class":397},[147,13292,11743],{"class":157},[147,13294,13295],{"class":458}," \u002F\u002F20\n",[147,13297,13298,13300,13302,13304,13306,13308,13310,13312],{"class":149,"line":2006},[147,13299,6803],{"class":157},[147,13301,1443],{"class":397},[147,13303,13284],{"class":504},[147,13305,1719],{"class":397},[147,13307,13269],{"class":157},[147,13309,1443],{"class":397},[147,13311,11743],{"class":157},[147,13313,13295],{"class":458},[147,13315,13316],{"class":149,"line":2023},[147,13317,2674],{"emptyLinePlaceholder":324},[147,13319,13320,13322,13325,13327,13329,13331],{"class":149,"line":2028},[147,13321,5976],{"class":2237},[147,13323,13324],{"class":157},"() ",[147,13326,445],{"class":397},[147,13328,3273],{"class":448},[147,13330,455],{"class":157},[147,13332,13333],{"class":458},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[147,13335,13336],{"class":149,"line":2033},[147,13337,2674],{"emptyLinePlaceholder":324},[147,13339,13340,13342,13344,13346,13348,13350,13352,13354],{"class":149,"line":2038},[147,13341,6803],{"class":157},[147,13343,1443],{"class":397},[147,13345,13284],{"class":504},[147,13347,1719],{"class":397},[147,13349,13269],{"class":157},[147,13351,1443],{"class":397},[147,13353,11743],{"class":157},[147,13355,13356],{"class":458}," \u002F\u002F1000\n",[147,13358,13359,13361,13363,13365,13367,13369,13371,13373],{"class":149,"line":2052},[147,13360,6803],{"class":157},[147,13362,1443],{"class":397},[147,13364,13284],{"class":504},[147,13366,1719],{"class":397},[147,13368,13269],{"class":157},[147,13370,1443],{"class":397},[147,13372,11743],{"class":157},[147,13374,13356],{"class":458},[147,13376,13377],{"class":149,"line":2057},[147,13378,2674],{"emptyLinePlaceholder":324},[147,13380,13381,13383,13385,13387],{"class":149,"line":2851},[147,13382,2577],{"class":2237},[147,13384,401],{"class":157},[147,13386,2582],{"class":504},[147,13388,2993],{"class":157},[147,13390,13391],{"class":149,"line":2865},[147,13392,2674],{"emptyLinePlaceholder":324},[147,13394,13395,13397,13399],{"class":149,"line":2873},[147,13396,4364],{"class":397},[147,13398,4367],{"class":448},[147,13400,1565],{"class":157},[147,13402,13403],{"class":149,"line":2878},[147,13404,1839],{"class":157},[14,13406,13408],{"id":13407},"_65引用的本质","6.5引用的本质",[19,13410,13411,13412],{},"本质：",[234,13413,13414],{},"引用的本质在c++内部实现是一个指针常量.",[138,13416,13418],{"className":388,"code":13417,"language":390,"meta":143,"style":143},"\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",[51,13419,13420,13425,13441,13455,13459,13468,13480,13485,13490,13501,13514,13518,13534,13551,13555,13563,13571],{"__ignoreMap":143},[147,13421,13422],{"class":149,"line":150},[147,13423,13424],{"class":458},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[147,13426,13427,13429,13431,13433,13435,13438],{"class":149,"line":312},[147,13428,5638],{"class":397},[147,13430,11659],{"class":2237},[147,13432,401],{"class":157},[147,13434,12840],{"class":397},[147,13436,13437],{"class":5490}," ref",[147,13439,13440],{"class":157},"){\n",[147,13442,13443,13446,13448,13450,13452],{"class":149,"line":1454},[147,13444,13445],{"class":157},"    ref ",[147,13447,445],{"class":397},[147,13449,6028],{"class":448},[147,13451,455],{"class":157},[147,13453,13454],{"class":458}," \u002F\u002F ref是引用，转换为*ref = 100\n",[147,13456,13457],{"class":149,"line":1469},[147,13458,1839],{"class":157},[147,13460,13461,13463,13465],{"class":149,"line":1475},[147,13462,404],{"class":397},[147,13464,2247],{"class":2237},[147,13466,13467],{"class":157},"(){\n",[147,13469,13470,13472,13474,13476,13478],{"class":149,"line":1489},[147,13471,2259],{"class":397},[147,13473,11143],{"class":157},[147,13475,445],{"class":397},[147,13477,2312],{"class":448},[147,13479,1565],{"class":157},[147,13481,13482],{"class":149,"line":1495},[147,13483,13484],{"class":157},"    \n",[147,13486,13487],{"class":149,"line":1586},[147,13488,13489],{"class":458},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[147,13491,13492,13494,13496,13498],{"class":149,"line":1592},[147,13493,13205],{"class":397},[147,13495,13208],{"class":157},[147,13497,445],{"class":397},[147,13499,13500],{"class":157}," a; \n",[147,13502,13503,13505,13507,13509,13511],{"class":149,"line":1604},[147,13504,13445],{"class":157},[147,13506,445],{"class":397},[147,13508,9224],{"class":448},[147,13510,455],{"class":157},[147,13512,13513],{"class":458}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[147,13515,13516],{"class":149,"line":1886},[147,13517,13484],{"class":157},[147,13519,13520,13522,13524,13526,13528,13530,13532],{"class":149,"line":1891},[147,13521,6803],{"class":157},[147,13523,1443],{"class":397},[147,13525,12944],{"class":504},[147,13527,1719],{"class":397},[147,13529,11143],{"class":157},[147,13531,1443],{"class":397},[147,13533,9114],{"class":157},[147,13535,13536,13538,13540,13543,13545,13547,13549],{"class":149,"line":1897},[147,13537,6803],{"class":157},[147,13539,1443],{"class":397},[147,13541,13542],{"class":504}," \"ref:\"",[147,13544,1719],{"class":397},[147,13546,13208],{"class":157},[147,13548,1443],{"class":397},[147,13550,9114],{"class":157},[147,13552,13553],{"class":149,"line":1902},[147,13554,13484],{"class":157},[147,13556,13557,13560],{"class":149,"line":1916},[147,13558,13559],{"class":2237},"    func",[147,13561,13562],{"class":157},"(a);\n",[147,13564,13565,13567,13569],{"class":149,"line":1921},[147,13566,4364],{"class":397},[147,13568,4367],{"class":448},[147,13570,1565],{"class":157},[147,13572,13573],{"class":149,"line":1927},[147,13574,1839],{"class":157},[19,13576,11606],{},[350,13578,13579,13582],{},[353,13580,13581],{},"引用的本质，就是一个指针常量",[353,13583,13584],{},"引用一旦初始化，就不可以发生改变",[14,13586,13588],{"id":13587},"_66常量引用","6.6常量引用",[19,13590,13591],{},"作用：常量引用主要用来修饰形参",[19,13593,13594,13595,13598],{},"在函数形参列表中，可以加",[234,13596,13597],{},"const修饰形参","，防止形参改变实参",[138,13600,13602],{"className":388,"code":13601,"language":390,"meta":143,"style":143},"\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",[51,13603,13604,13609,13614,13633,13638,13651,13655,13659,13667,13671,13676,13681,13695,13699,13707,13719,13723,13728,13740,13747,13751,13761,13765,13773],{"__ignoreMap":143},[147,13605,13606],{"class":149,"line":150},[147,13607,13608],{"class":458},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[147,13610,13611],{"class":149,"line":312},[147,13612,13613],{"class":458},"\u002F\u002F加上const就不能修改实参的\n",[147,13615,13616,13618,13621,13623,13625,13628,13631],{"class":149,"line":1454},[147,13617,5638],{"class":397},[147,13619,13620],{"class":2237}," showValue",[147,13622,401],{"class":157},[147,13624,7066],{"class":397},[147,13626,13627],{"class":397}," int&",[147,13629,13630],{"class":5490}," v",[147,13632,12716],{"class":157},[147,13634,13635],{"class":149,"line":1469},[147,13636,13637],{"class":458},"    \u002F\u002Fv += 100;\n",[147,13639,13640,13642,13644,13647,13649],{"class":149,"line":1475},[147,13641,6803],{"class":157},[147,13643,1443],{"class":397},[147,13645,13646],{"class":157}," v ",[147,13648,1443],{"class":397},[147,13650,9114],{"class":157},[147,13652,13653],{"class":149,"line":1489},[147,13654,1839],{"class":157},[147,13656,13657],{"class":149,"line":1495},[147,13658,2674],{"emptyLinePlaceholder":324},[147,13660,13661,13663,13665],{"class":149,"line":1586},[147,13662,404],{"class":397},[147,13664,2247],{"class":2237},[147,13666,11127],{"class":157},[147,13668,13669],{"class":149,"line":1592},[147,13670,2674],{"emptyLinePlaceholder":324},[147,13672,13673],{"class":149,"line":1604},[147,13674,13675],{"class":458},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[147,13677,13678],{"class":149,"line":1886},[147,13679,13680],{"class":458},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[147,13682,13683,13685,13687,13689,13691,13693],{"class":149,"line":1891},[147,13684,11495],{"class":397},[147,13686,13627],{"class":397},[147,13688,13208],{"class":157},[147,13690,445],{"class":397},[147,13692,2312],{"class":448},[147,13694,1565],{"class":157},[147,13696,13697],{"class":149,"line":1897},[147,13698,2674],{"emptyLinePlaceholder":324},[147,13700,13701,13704],{"class":149,"line":1902},[147,13702,13703],{"class":458},"    \u002F\u002Fref = 100;",[147,13705,13706],{"class":458},"  \u002F\u002F加入const后不可以修改变量\n",[147,13708,13709,13711,13713,13715,13717],{"class":149,"line":1916},[147,13710,6803],{"class":157},[147,13712,1443],{"class":397},[147,13714,13208],{"class":157},[147,13716,1443],{"class":397},[147,13718,9114],{"class":157},[147,13720,13721],{"class":149,"line":1921},[147,13722,2674],{"emptyLinePlaceholder":324},[147,13724,13725],{"class":149,"line":1927},[147,13726,13727],{"class":458},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[147,13729,13730,13732,13734,13736,13738],{"class":149,"line":1948},[147,13731,2259],{"class":397},[147,13733,11143],{"class":157},[147,13735,445],{"class":397},[147,13737,2312],{"class":448},[147,13739,1565],{"class":157},[147,13741,13742,13745],{"class":149,"line":1953},[147,13743,13744],{"class":2237},"    showValue",[147,13746,13562],{"class":157},[147,13748,13749],{"class":149,"line":1967},[147,13750,2674],{"emptyLinePlaceholder":324},[147,13752,13753,13755,13757,13759],{"class":149,"line":1972},[147,13754,2577],{"class":2237},[147,13756,401],{"class":157},[147,13758,2582],{"class":504},[147,13760,2993],{"class":157},[147,13762,13763],{"class":149,"line":2001},[147,13764,2674],{"emptyLinePlaceholder":324},[147,13766,13767,13769,13771],{"class":149,"line":2006},[147,13768,4364],{"class":397},[147,13770,4367],{"class":448},[147,13772,1565],{"class":157},[147,13774,13775],{"class":149,"line":2023},[147,13776,1839],{"class":157},[308,13778,13779],{},"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":143,"searchDepth":312,"depth":312,"links":13781},[13782,13783,13784,13785,13786,13787],{"id":12314,"depth":312,"text":12315},{"id":12493,"depth":312,"text":12494},{"id":12676,"depth":312,"text":12677},{"id":13080,"depth":312,"text":13081},{"id":13407,"depth":312,"text":13408},{"id":13587,"depth":312,"text":13588},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12306,"description":143},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13794,"title":13795,"body":13796,"description":143,"extension":322,"meta":14876,"navigation":324,"path":14877,"seo":14878,"stem":14879,"__hash__":14880},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13797,"toc":14868},[13798,13801,13805,13808,13813,14045,14047,14058,14062,14065,14072,14176,14179,14183,14186,14190,14193,14198,14220,14226,14553,14556,14560,14568,14865],[10,13799,13795],{"id":13800},"_7函数高级部分",[14,13802,13804],{"id":13803},"_71函数默认参数","7.1函数默认参数",[19,13806,13807],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,13809,5455,13810],{},[51,13811,13812],{}," 返回值类型  函数名 （参数= 默认值）{}",[138,13814,13816],{"className":388,"code":13815,"language":390,"meta":143,"style":143},"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",[51,13817,13818,13853,13868,13872,13876,13881,13886,13915,13935,13945,13949,13953,13961,13965,13993,14015,14019,14029,14033,14041],{"__ignoreMap":143},[147,13819,13820,13822,13824,13826,13828,13830,13832,13834,13836,13839,13841,13843,13845,13847,13849,13851],{"class":149,"line":150},[147,13821,404],{"class":397},[147,13823,11659],{"class":2237},[147,13825,401],{"class":157},[147,13827,404],{"class":397},[147,13829,1673],{"class":5490},[147,13831,12709],{"class":157},[147,13833,404],{"class":397},[147,13835,3107],{"class":5490},[147,13837,13838],{"class":397}," =",[147,13840,2312],{"class":448},[147,13842,12709],{"class":157},[147,13844,404],{"class":397},[147,13846,3123],{"class":5490},[147,13848,13838],{"class":397},[147,13850,2312],{"class":448},[147,13852,12716],{"class":157},[147,13854,13855,13857,13859,13861,13863,13865],{"class":149,"line":312},[147,13856,4364],{"class":397},[147,13858,11143],{"class":157},[147,13860,880],{"class":397},[147,13862,11156],{"class":157},[147,13864,880],{"class":397},[147,13866,13867],{"class":157}," c;\n",[147,13869,13870],{"class":149,"line":1454},[147,13871,1839],{"class":157},[147,13873,13874],{"class":149,"line":1469},[147,13875,2674],{"emptyLinePlaceholder":324},[147,13877,13878],{"class":149,"line":1475},[147,13879,13880],{"class":458},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[147,13882,13883],{"class":149,"line":1489},[147,13884,13885],{"class":458},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[147,13887,13888,13890,13893,13895,13897,13899,13901,13903,13905,13907,13909,13911,13913],{"class":149,"line":1495},[147,13889,404],{"class":397},[147,13891,13892],{"class":2237}," func2",[147,13894,401],{"class":157},[147,13896,404],{"class":397},[147,13898,1673],{"class":5490},[147,13900,13838],{"class":397},[147,13902,2312],{"class":448},[147,13904,12709],{"class":157},[147,13906,404],{"class":397},[147,13908,3107],{"class":5490},[147,13910,13838],{"class":397},[147,13912,2312],{"class":448},[147,13914,2993],{"class":157},[147,13916,13917,13919,13921,13923,13925,13927,13929,13931,13933],{"class":149,"line":1586},[147,13918,404],{"class":397},[147,13920,13892],{"class":2237},[147,13922,401],{"class":157},[147,13924,404],{"class":397},[147,13926,1673],{"class":5490},[147,13928,12709],{"class":157},[147,13930,404],{"class":397},[147,13932,3107],{"class":5490},[147,13934,12716],{"class":157},[147,13936,13937,13939,13941,13943],{"class":149,"line":1592},[147,13938,4364],{"class":397},[147,13940,11143],{"class":157},[147,13942,880],{"class":397},[147,13944,12737],{"class":157},[147,13946,13947],{"class":149,"line":1604},[147,13948,1839],{"class":157},[147,13950,13951],{"class":149,"line":1886},[147,13952,2674],{"emptyLinePlaceholder":324},[147,13954,13955,13957,13959],{"class":149,"line":1891},[147,13956,404],{"class":397},[147,13958,2247],{"class":2237},[147,13960,11127],{"class":157},[147,13962,13963],{"class":149,"line":1897},[147,13964,2674],{"emptyLinePlaceholder":324},[147,13966,13967,13969,13971,13974,13976,13978,13980,13982,13984,13986,13989,13991],{"class":149,"line":1902},[147,13968,6803],{"class":157},[147,13970,1443],{"class":397},[147,13972,13973],{"class":504}," \"ret = \"",[147,13975,1719],{"class":397},[147,13977,11659],{"class":2237},[147,13979,401],{"class":157},[147,13981,1099],{"class":448},[147,13983,12709],{"class":157},[147,13985,1099],{"class":448},[147,13987,13988],{"class":157},") ",[147,13990,1443],{"class":397},[147,13992,9114],{"class":157},[147,13994,13995,13997,13999,14001,14003,14005,14007,14009,14011,14013],{"class":149,"line":1916},[147,13996,6803],{"class":157},[147,13998,1443],{"class":397},[147,14000,13973],{"class":504},[147,14002,1719],{"class":397},[147,14004,11659],{"class":2237},[147,14006,401],{"class":157},[147,14008,710],{"class":448},[147,14010,13988],{"class":157},[147,14012,1443],{"class":397},[147,14014,9114],{"class":157},[147,14016,14017],{"class":149,"line":1921},[147,14018,2674],{"emptyLinePlaceholder":324},[147,14020,14021,14023,14025,14027],{"class":149,"line":1927},[147,14022,2577],{"class":2237},[147,14024,401],{"class":157},[147,14026,2582],{"class":504},[147,14028,2993],{"class":157},[147,14030,14031],{"class":149,"line":1948},[147,14032,2674],{"emptyLinePlaceholder":324},[147,14034,14035,14037,14039],{"class":149,"line":1953},[147,14036,4364],{"class":397},[147,14038,4367],{"class":448},[147,14040,1565],{"class":157},[147,14042,14043],{"class":149,"line":1967},[147,14044,1839],{"class":157},[19,14046,11606],{},[350,14048,14049,14052,14055],{},[353,14050,14051],{},"我传就用我；没传就用你",[353,14053,14054],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[353,14056,14057],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,14059,14061],{"id":14060},"_72函数的占位参数","7.2函数的占位参数",[19,14063,14064],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,14066,14067,249,14069],{},[234,14068,5455],{},[51,14070,14071],{},"返回值类型 函数名 (数据类型){}",[138,14073,14075],{"className":388,"code":14074,"language":390,"meta":143,"style":143},"\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",[51,14076,14077,14082,14100,14113,14117,14125,14129,14146,14150,14160,14164,14172],{"__ignoreMap":143},[147,14078,14079],{"class":149,"line":150},[147,14080,14081],{"class":458},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[147,14083,14084,14086,14088,14090,14092,14094,14096,14098],{"class":149,"line":312},[147,14085,5638],{"class":397},[147,14087,11659],{"class":2237},[147,14089,401],{"class":157},[147,14091,404],{"class":397},[147,14093,1673],{"class":5490},[147,14095,12709],{"class":157},[147,14097,404],{"class":397},[147,14099,12716],{"class":157},[147,14101,14102,14104,14106,14109,14111],{"class":149,"line":1454},[147,14103,6803],{"class":157},[147,14105,1443],{"class":397},[147,14107,14108],{"class":504}," \"this is func\"",[147,14110,1719],{"class":397},[147,14112,9114],{"class":157},[147,14114,14115],{"class":149,"line":1469},[147,14116,1839],{"class":157},[147,14118,14119,14121,14123],{"class":149,"line":1475},[147,14120,404],{"class":397},[147,14122,2247],{"class":2237},[147,14124,11127],{"class":157},[147,14126,14127],{"class":149,"line":1489},[147,14128,2674],{"emptyLinePlaceholder":324},[147,14130,14131,14133,14135,14137,14139,14141,14143],{"class":149,"line":1495},[147,14132,13559],{"class":2237},[147,14134,401],{"class":157},[147,14136,845],{"class":448},[147,14138,777],{"class":157},[147,14140,845],{"class":448},[147,14142,6240],{"class":157},[147,14144,14145],{"class":458}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[147,14147,14148],{"class":149,"line":1586},[147,14149,2674],{"emptyLinePlaceholder":324},[147,14151,14152,14154,14156,14158],{"class":149,"line":1592},[147,14153,2577],{"class":2237},[147,14155,401],{"class":157},[147,14157,2582],{"class":504},[147,14159,2993],{"class":157},[147,14161,14162],{"class":149,"line":1604},[147,14163,2674],{"emptyLinePlaceholder":324},[147,14165,14166,14168,14170],{"class":149,"line":1886},[147,14167,4364],{"class":397},[147,14169,4367],{"class":448},[147,14171,1565],{"class":157},[147,14173,14174],{"class":149,"line":1891},[147,14175,1839],{"class":157},[19,14177,14178],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,14180,14182],{"id":14181},"_73函数重载","7.3函数重载",[19,14184,14185],{},"意思是函数名是可以相同的",[367,14187,14189],{"id":14188},"_731基本语法","7.3.1基本语法",[19,14191,14192],{},"作用：函数名可以相同，提高复用性",[19,14194,14195],{},[234,14196,14197],{},"函数重载满足条件：",[1406,14199,14200,14203,14206],{},[353,14201,14202],{},"同一个作用域下",[353,14204,14205],{},"函数名称相同",[353,14207,14208,14209,14212,14213,14216,14217],{},"函数参数",[234,14210,14211],{},"类型不同","  或者 ",[234,14214,14215],{},"个数不同"," 或者 ",[234,14218,14219],{},"顺序不同",[19,14221,14222,14225],{},[234,14223,14224],{},"注意:","  函数的返回值不可以作为函数重载的条件",[138,14227,14229],{"className":10215,"code":14228,"language":10217,"meta":143,"style":143},"\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",[51,14230,14231,14236,14244,14248,14261,14265,14279,14283,14296,14300,14315,14319,14332,14336,14357,14361,14374,14378,14398,14402,14415,14419,14423,14428,14433,14438,14443,14448,14452,14456,14464,14468,14474,14484,14494,14508,14523,14527,14537,14541,14549],{"__ignoreMap":143},[147,14232,14233],{"class":149,"line":150},[147,14234,14235],{"class":458},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[147,14237,14238,14240,14242],{"class":149,"line":312},[147,14239,5638],{"class":397},[147,14241,11659],{"class":2237},[147,14243,2250],{"class":157},[147,14245,14246],{"class":149,"line":1454},[147,14247,1820],{"class":157},[147,14249,14250,14252,14254,14257,14259],{"class":149,"line":1469},[147,14251,6803],{"class":157},[147,14253,1443],{"class":397},[147,14255,14256],{"class":504}," \"func 的调用！\"",[147,14258,1719],{"class":397},[147,14260,9114],{"class":157},[147,14262,14263],{"class":149,"line":1475},[147,14264,1839],{"class":157},[147,14266,14267,14269,14271,14273,14275,14277],{"class":149,"line":1489},[147,14268,5638],{"class":397},[147,14270,11659],{"class":2237},[147,14272,401],{"class":157},[147,14274,404],{"class":397},[147,14276,1673],{"class":5490},[147,14278,407],{"class":157},[147,14280,14281],{"class":149,"line":1495},[147,14282,1820],{"class":157},[147,14284,14285,14287,14289,14292,14294],{"class":149,"line":1586},[147,14286,6803],{"class":157},[147,14288,1443],{"class":397},[147,14290,14291],{"class":504}," \"func (int a) 的调用！\"",[147,14293,1719],{"class":397},[147,14295,9114],{"class":157},[147,14297,14298],{"class":149,"line":1592},[147,14299,1839],{"class":157},[147,14301,14302,14304,14306,14308,14311,14313],{"class":149,"line":1604},[147,14303,5638],{"class":397},[147,14305,11659],{"class":2237},[147,14307,401],{"class":157},[147,14309,14310],{"class":397},"double",[147,14312,1673],{"class":5490},[147,14314,407],{"class":157},[147,14316,14317],{"class":149,"line":1886},[147,14318,1820],{"class":157},[147,14320,14321,14323,14325,14328,14330],{"class":149,"line":1891},[147,14322,6803],{"class":157},[147,14324,1443],{"class":397},[147,14326,14327],{"class":504}," \"func (double a)的调用！\"",[147,14329,1719],{"class":397},[147,14331,9114],{"class":157},[147,14333,14334],{"class":149,"line":1897},[147,14335,1839],{"class":157},[147,14337,14338,14340,14342,14344,14346,14348,14351,14353,14355],{"class":149,"line":1902},[147,14339,5638],{"class":397},[147,14341,11659],{"class":2237},[147,14343,401],{"class":157},[147,14345,404],{"class":397},[147,14347,1673],{"class":5490},[147,14349,14350],{"class":157}," ,",[147,14352,14310],{"class":397},[147,14354,3107],{"class":5490},[147,14356,407],{"class":157},[147,14358,14359],{"class":149,"line":1916},[147,14360,1820],{"class":157},[147,14362,14363,14365,14367,14370,14372],{"class":149,"line":1921},[147,14364,6803],{"class":157},[147,14366,1443],{"class":397},[147,14368,14369],{"class":504}," \"func (int a ,double b) 的调用！\"",[147,14371,1719],{"class":397},[147,14373,9114],{"class":157},[147,14375,14376],{"class":149,"line":1927},[147,14377,1839],{"class":157},[147,14379,14380,14382,14384,14386,14388,14390,14392,14394,14396],{"class":149,"line":1948},[147,14381,5638],{"class":397},[147,14383,11659],{"class":2237},[147,14385,401],{"class":157},[147,14387,14310],{"class":397},[147,14389,1673],{"class":5490},[147,14391,14350],{"class":157},[147,14393,404],{"class":397},[147,14395,3107],{"class":5490},[147,14397,407],{"class":157},[147,14399,14400],{"class":149,"line":1953},[147,14401,1820],{"class":157},[147,14403,14404,14406,14408,14411,14413],{"class":149,"line":1967},[147,14405,6803],{"class":157},[147,14407,1443],{"class":397},[147,14409,14410],{"class":504}," \"func (double a ,int b)的调用！\"",[147,14412,1719],{"class":397},[147,14414,9114],{"class":157},[147,14416,14417],{"class":149,"line":1972},[147,14418,1839],{"class":157},[147,14420,14421],{"class":149,"line":2001},[147,14422,2674],{"emptyLinePlaceholder":324},[147,14424,14425],{"class":149,"line":2006},[147,14426,14427],{"class":458},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[147,14429,14430],{"class":149,"line":2023},[147,14431,14432],{"class":458},"\u002F\u002Fint func(double a, int b)\n",[147,14434,14435],{"class":149,"line":2028},[147,14436,14437],{"class":458},"\u002F\u002F{\n",[147,14439,14440],{"class":149,"line":2033},[147,14441,14442],{"class":458},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[147,14444,14445],{"class":149,"line":2038},[147,14446,14447],{"class":458},"\u002F\u002F}\n",[147,14449,14450],{"class":149,"line":2052},[147,14451,2674],{"emptyLinePlaceholder":324},[147,14453,14454],{"class":149,"line":2057},[147,14455,2674],{"emptyLinePlaceholder":324},[147,14457,14458,14460,14462],{"class":149,"line":2851},[147,14459,404],{"class":397},[147,14461,2247],{"class":2237},[147,14463,11127],{"class":157},[147,14465,14466],{"class":149,"line":2865},[147,14467,2674],{"emptyLinePlaceholder":324},[147,14469,14470,14472],{"class":149,"line":2873},[147,14471,13559],{"class":2237},[147,14473,5910],{"class":157},[147,14475,14476,14478,14480,14482],{"class":149,"line":2878},[147,14477,13559],{"class":2237},[147,14479,401],{"class":157},[147,14481,845],{"class":448},[147,14483,2993],{"class":157},[147,14485,14486,14488,14490,14492],{"class":149,"line":2884},[147,14487,13559],{"class":2237},[147,14489,401],{"class":157},[147,14491,449],{"class":448},[147,14493,2993],{"class":157},[147,14495,14496,14498,14500,14502,14504,14506],{"class":149,"line":2890},[147,14497,13559],{"class":2237},[147,14499,401],{"class":157},[147,14501,845],{"class":448},[147,14503,777],{"class":157},[147,14505,449],{"class":448},[147,14507,2993],{"class":157},[147,14509,14510,14512,14514,14516,14519,14521],{"class":149,"line":2895},[147,14511,13559],{"class":2237},[147,14513,401],{"class":157},[147,14515,449],{"class":448},[147,14517,14518],{"class":157}," , ",[147,14520,845],{"class":448},[147,14522,2993],{"class":157},[147,14524,14525],{"class":149,"line":8222},[147,14526,13484],{"class":157},[147,14528,14529,14531,14533,14535],{"class":149,"line":8246},[147,14530,2577],{"class":2237},[147,14532,401],{"class":157},[147,14534,2582],{"class":504},[147,14536,2993],{"class":157},[147,14538,14539],{"class":149,"line":8251},[147,14540,2674],{"emptyLinePlaceholder":324},[147,14542,14543,14545,14547],{"class":149,"line":8257},[147,14544,4364],{"class":397},[147,14546,4367],{"class":448},[147,14548,1565],{"class":157},[147,14550,14551],{"class":149,"line":8284},[147,14552,1839],{"class":157},[19,14554,14555],{},"重点：函数返回值不可以作为函数重载条件！",[367,14557,14559],{"id":14558},"_732注意事项","7.3.2注意事项",[1406,14561,14562,14565],{},[353,14563,14564],{},"引用作为重载条件!!!",[353,14566,14567],{},"函数重载碰到函数默认参数",[138,14569,14571],{"className":388,"code":14570,"language":390,"meta":143,"style":143},"\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",[51,14572,14573,14578,14583,14587,14603,14607,14620,14624,14628,14646,14650,14663,14667,14671,14675,14680,14684,14708,14712,14725,14729,14733,14747,14751,14764,14768,14772,14780,14784,14796,14806,14819,14823,14827,14835,14839,14849,14853,14861],{"__ignoreMap":143},[147,14574,14575],{"class":149,"line":150},[147,14576,14577],{"class":458},"\u002F\u002F函数重载注意事项\n",[147,14579,14580],{"class":149,"line":312},[147,14581,14582],{"class":458},"\u002F\u002F1、引用作为重载条件\n",[147,14584,14585],{"class":149,"line":1454},[147,14586,2674],{"emptyLinePlaceholder":324},[147,14588,14589,14591,14593,14595,14597,14599,14601],{"class":149,"line":1469},[147,14590,5638],{"class":397},[147,14592,11659],{"class":2237},[147,14594,401],{"class":157},[147,14596,404],{"class":397},[147,14598,10858],{"class":397},[147,14600,637],{"class":5490},[147,14602,407],{"class":157},[147,14604,14605],{"class":149,"line":1475},[147,14606,1820],{"class":157},[147,14608,14609,14611,14613,14616,14618],{"class":149,"line":1489},[147,14610,6803],{"class":157},[147,14612,1443],{"class":397},[147,14614,14615],{"class":504}," \"func (int &a) 调用 \"",[147,14617,1719],{"class":397},[147,14619,9114],{"class":157},[147,14621,14622],{"class":149,"line":1495},[147,14623,1839],{"class":157},[147,14625,14626],{"class":149,"line":1586},[147,14627,2674],{"emptyLinePlaceholder":324},[147,14629,14630,14632,14634,14636,14638,14640,14642,14644],{"class":149,"line":1592},[147,14631,5638],{"class":397},[147,14633,11659],{"class":2237},[147,14635,401],{"class":157},[147,14637,7066],{"class":397},[147,14639,2656],{"class":397},[147,14641,10858],{"class":397},[147,14643,637],{"class":5490},[147,14645,407],{"class":157},[147,14647,14648],{"class":149,"line":1604},[147,14649,1820],{"class":157},[147,14651,14652,14654,14656,14659,14661],{"class":149,"line":1886},[147,14653,6803],{"class":157},[147,14655,1443],{"class":397},[147,14657,14658],{"class":504}," \"func (const int &a) 调用 \"",[147,14660,1719],{"class":397},[147,14662,9114],{"class":157},[147,14664,14665],{"class":149,"line":1891},[147,14666,1839],{"class":157},[147,14668,14669],{"class":149,"line":1897},[147,14670,2674],{"emptyLinePlaceholder":324},[147,14672,14673],{"class":149,"line":1902},[147,14674,2674],{"emptyLinePlaceholder":324},[147,14676,14677],{"class":149,"line":1916},[147,14678,14679],{"class":458},"\u002F\u002F2、函数重载碰到函数默认参数\n",[147,14681,14682],{"class":149,"line":1921},[147,14683,2674],{"emptyLinePlaceholder":324},[147,14685,14686,14688,14690,14692,14694,14696,14698,14700,14702,14704,14706],{"class":149,"line":1927},[147,14687,5638],{"class":397},[147,14689,13892],{"class":2237},[147,14691,401],{"class":157},[147,14693,404],{"class":397},[147,14695,1673],{"class":5490},[147,14697,12709],{"class":157},[147,14699,404],{"class":397},[147,14701,3107],{"class":5490},[147,14703,13838],{"class":397},[147,14705,2312],{"class":448},[147,14707,407],{"class":157},[147,14709,14710],{"class":149,"line":1948},[147,14711,1820],{"class":157},[147,14713,14714,14716,14718,14721,14723],{"class":149,"line":1953},[147,14715,6803],{"class":157},[147,14717,1443],{"class":397},[147,14719,14720],{"class":504}," \"func2(int a, int b = 10) 调用\"",[147,14722,1719],{"class":397},[147,14724,9114],{"class":157},[147,14726,14727],{"class":149,"line":1967},[147,14728,1839],{"class":157},[147,14730,14731],{"class":149,"line":1972},[147,14732,2674],{"emptyLinePlaceholder":324},[147,14734,14735,14737,14739,14741,14743,14745],{"class":149,"line":2001},[147,14736,5638],{"class":397},[147,14738,13892],{"class":2237},[147,14740,401],{"class":157},[147,14742,404],{"class":397},[147,14744,1673],{"class":5490},[147,14746,407],{"class":157},[147,14748,14749],{"class":149,"line":2006},[147,14750,1820],{"class":157},[147,14752,14753,14755,14757,14760,14762],{"class":149,"line":2023},[147,14754,6803],{"class":157},[147,14756,1443],{"class":397},[147,14758,14759],{"class":504}," \"func2(int a) 调用\"",[147,14761,1719],{"class":397},[147,14763,9114],{"class":157},[147,14765,14766],{"class":149,"line":2028},[147,14767,1839],{"class":157},[147,14769,14770],{"class":149,"line":2033},[147,14771,2674],{"emptyLinePlaceholder":324},[147,14773,14774,14776,14778],{"class":149,"line":2038},[147,14775,404],{"class":397},[147,14777,2247],{"class":2237},[147,14779,11127],{"class":157},[147,14781,14782],{"class":149,"line":2052},[147,14783,13484],{"class":157},[147,14785,14786,14788,14790,14792,14794],{"class":149,"line":2057},[147,14787,2259],{"class":397},[147,14789,11143],{"class":157},[147,14791,445],{"class":397},[147,14793,2312],{"class":448},[147,14795,1565],{"class":157},[147,14797,14798,14800,14803],{"class":149,"line":2851},[147,14799,13559],{"class":2237},[147,14801,14802],{"class":157},"(a);",[147,14804,14805],{"class":458}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[147,14807,14808,14810,14812,14814,14816],{"class":149,"line":2865},[147,14809,13559],{"class":2237},[147,14811,401],{"class":157},[147,14813,845],{"class":448},[147,14815,6240],{"class":157},[147,14817,14818],{"class":458},"\u002F\u002F调用有const   10是个常量\n",[147,14820,14821],{"class":149,"line":2873},[147,14822,2674],{"emptyLinePlaceholder":324},[147,14824,14825],{"class":149,"line":2878},[147,14826,2674],{"emptyLinePlaceholder":324},[147,14828,14829,14832],{"class":149,"line":2884},[147,14830,14831],{"class":458},"    \u002F\u002Ffunc2(10);",[147,14833,14834],{"class":458}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[147,14836,14837],{"class":149,"line":2890},[147,14838,2674],{"emptyLinePlaceholder":324},[147,14840,14841,14843,14845,14847],{"class":149,"line":2895},[147,14842,2577],{"class":2237},[147,14844,401],{"class":157},[147,14846,2582],{"class":504},[147,14848,2993],{"class":157},[147,14850,14851],{"class":149,"line":8222},[147,14852,2674],{"emptyLinePlaceholder":324},[147,14854,14855,14857,14859],{"class":149,"line":8246},[147,14856,4364],{"class":397},[147,14858,4367],{"class":448},[147,14860,1565],{"class":157},[147,14862,14863],{"class":149,"line":8251},[147,14864,1839],{"class":157},[308,14866,14867],{},"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":143,"searchDepth":312,"depth":312,"links":14869},[14870,14871,14872],{"id":13803,"depth":312,"text":13804},{"id":14060,"depth":312,"text":14061},{"id":14181,"depth":312,"text":14182,"children":14873},[14874,14875],{"id":14188,"depth":1454,"text":14189},{"id":14558,"depth":1454,"text":14559},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13795,"description":143},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14882,"title":14883,"body":14884,"description":23638,"extension":322,"meta":23639,"navigation":324,"path":23640,"seo":23641,"stem":23642,"__hash__":23643},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14885,"toc":23619},[14886,14889,14895,14902,14907,14910,14913,14916,14920,14924,14927,14930,14938,14943,14946,14953,14958,15117,15120,15373,15376,15379,15382,15387,15390,15393,15404,15409,15645,15649,15659,15662,15670,15817,15821,15824,15827,15831,16276,16280,16288,16296,17208,17215,17220,17848,17851,17854,17857,17976,17979,18066,18069,18195,18198,18292,18295,18648,18652,18660,18664,18671,18674,18677,18688,18694,18699,18711,18719,18739,18747,18764,18950,18953,18957,18960,18963,18966,18969,18972,18975,18978,19438,19444,19448,19451,19462,20049,20052,20541,20545,20548,20551,20554,20557,20560,20568,20964,20968,20971,20974,21421,21424,21427,21432,21435,21440,21443,21447,21450,21452,21458,21461,21767,21777,21818,21822,21825,21827,21860,21863,22170,22172,22187,22190,22213,22222,22228,22231,22235,22238,22241,22246,22257,22262,22270,22275,22405,22408,22411,22586,22591,22803,22807,22810,22924,22929,23168,23172,23176,23179,23182,23187,23292,23295,23298,23301,23305,23416,23419,23422,23427,23479,23482,23485,23490,23536,23539,23544,23612,23614,23617],[10,14887,14883],{"id":14888},"_8类和对象",[19,14890,14891,14892],{},"C++面向对象的三大特性为",[234,14893,14894],{},"封装、继承、多态",[19,14896,14897,14898,14901],{},"C++认为",[234,14899,14900],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,14903,14904],{},[234,14905,14906],{},"例如：",[19,14908,14909],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,14911,14912],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,14914,14915],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,14917,14919],{"id":14918},"_81封装","8.1封装",[367,14921,14923],{"id":14922},"_811封装的意义","8.1.1封装的意义",[19,14925,14926],{},"封装是C++面向对象三大特性之一",[19,14928,14929],{},"封装的意义：",[1406,14931,14932,14935],{},[353,14933,14934],{},"将属性和行为作为一个整体，表现生活中的事物",[353,14936,14937],{},"将属性和行为加以权限控制",[19,14939,14940],{},[234,14941,14942],{},"封装意义一：",[19,14944,14945],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,14947,14948,249,14950],{},[234,14949,5455],{},[51,14951,14952],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[350,14954,14955],{},[353,14956,14957],{},"**示例1：**设计一个圆类，求圆的周长",[138,14959,14961],{"className":388,"code":14960,"language":390,"meta":143,"style":143},"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",[51,14962,14963,14971,14975,14980,14985,14990,14995,15002,15007,15017,15021,15039,15043,15047,15055,15059,15064,15069,15074,15079,15090,15113],{"__ignoreMap":143},[147,14964,14965,14968],{"class":149,"line":150},[147,14966,14967],{"class":397},"class",[147,14969,14970],{"class":2237}," Circle\n",[147,14972,14973],{"class":149,"line":312},[147,14974,1820],{"class":157},[147,14976,14977],{"class":149,"line":1454},[147,14978,14979],{"class":458},"    \u002F\u002F访问权限\n",[147,14981,14982],{"class":149,"line":1469},[147,14983,14984],{"class":458},"    \u002F\u002F公共权限\n",[147,14986,14987],{"class":149,"line":1475},[147,14988,14989],{"class":397},"public:\n",[147,14991,14992],{"class":149,"line":1489},[147,14993,14994],{"class":458},"    \u002F\u002F属性\n",[147,14996,14997,14999],{"class":149,"line":1495},[147,14998,2259],{"class":397},[147,15000,15001],{"class":157}," m_r;\n",[147,15003,15004],{"class":149,"line":1586},[147,15005,15006],{"class":458},"    \u002F\u002F行为\n",[147,15008,15009,15012,15015],{"class":149,"line":1592},[147,15010,15011],{"class":397},"    double",[147,15013,15014],{"class":2237}," calculateZC",[147,15016,2250],{"class":157},[147,15018,15019],{"class":149,"line":1604},[147,15020,2304],{"class":157},[147,15022,15023,15026,15029,15031,15034,15036],{"class":149,"line":1886},[147,15024,15025],{"class":397},"        return",[147,15027,15028],{"class":448}," 2",[147,15030,854],{"class":397},[147,15032,15033],{"class":157},"PI",[147,15035,854],{"class":397},[147,15037,15038],{"class":157},"m_r;\n",[147,15040,15041],{"class":149,"line":1891},[147,15042,2461],{"class":157},[147,15044,15045],{"class":149,"line":1897},[147,15046,4269],{"class":157},[147,15048,15049,15051,15053],{"class":149,"line":1902},[147,15050,404],{"class":397},[147,15052,2247],{"class":2237},[147,15054,2250],{"class":157},[147,15056,15057],{"class":149,"line":1916},[147,15058,1820],{"class":157},[147,15060,15061],{"class":149,"line":1921},[147,15062,15063],{"class":458},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[147,15065,15066],{"class":149,"line":1927},[147,15067,15068],{"class":458},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[147,15070,15071],{"class":149,"line":1948},[147,15072,15073],{"class":157},"    Circle c1;\n",[147,15075,15076],{"class":149,"line":1953},[147,15077,15078],{"class":458},"    \u002F\u002F给圆对象 的属性进行赋值\n",[147,15080,15081,15084,15086,15088],{"class":149,"line":1967},[147,15082,15083],{"class":157},"    c1.m_r",[147,15085,445],{"class":397},[147,15087,845],{"class":448},[147,15089,1565],{"class":157},[147,15091,15092,15094,15096,15099,15101,15104,15107,15109,15111],{"class":149,"line":1972},[147,15093,1825],{"class":157},[147,15095,1443],{"class":397},[147,15097,15098],{"class":504},"\"圆的周长\"",[147,15100,1443],{"class":397},[147,15102,15103],{"class":157},"c1.",[147,15105,15106],{"class":2237},"calculateZC",[147,15108,2701],{"class":157},[147,15110,1443],{"class":397},[147,15112,1466],{"class":157},[147,15114,15115],{"class":149,"line":2001},[147,15116,1839],{"class":157},[19,15118,15119],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[138,15121,15123],{"className":388,"code":15122,"language":390,"meta":143,"style":143},"#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",[51,15124,15125,15131,15141,15147,15153,15157,15161,15166,15173,15178,15196,15200,15210,15214,15219,15235,15239,15249,15253,15258,15266,15270,15302,15306,15310,15318,15322,15327,15332,15346,15360,15369],{"__ignoreMap":143},[147,15126,15127,15129],{"class":149,"line":150},[147,15128,2223],{"class":397},[147,15130,2226],{"class":504},[147,15132,15133,15135,15137,15139],{"class":149,"line":312},[147,15134,2231],{"class":397},[147,15136,2234],{"class":397},[147,15138,2238],{"class":2237},[147,15140,1565],{"class":157},[147,15142,15143,15145],{"class":149,"line":1454},[147,15144,2223],{"class":397},[147,15146,8023],{"class":504},[147,15148,15149,15151],{"class":149,"line":1469},[147,15150,14967],{"class":397},[147,15152,8036],{"class":2237},[147,15154,15155],{"class":149,"line":1475},[147,15156,1820],{"class":157},[147,15158,15159],{"class":149,"line":1489},[147,15160,14989],{"class":397},[147,15162,15163],{"class":149,"line":1495},[147,15164,15165],{"class":157},"    string m_name;\n",[147,15167,15168,15170],{"class":149,"line":1586},[147,15169,2259],{"class":397},[147,15171,15172],{"class":157}," m_id;\n",[147,15174,15175],{"class":149,"line":1592},[147,15176,15177],{"class":458},"    \u002F\u002F赋值姓名\n",[147,15179,15180,15183,15186,15188,15191,15194],{"class":149,"line":1604},[147,15181,15182],{"class":397},"    void",[147,15184,15185],{"class":2237}," setName",[147,15187,401],{"class":157},[147,15189,15190],{"class":2237},"string",[147,15192,15193],{"class":5490}," name",[147,15195,407],{"class":157},[147,15197,15198],{"class":149,"line":1886},[147,15199,2304],{"class":157},[147,15201,15202,15205,15207],{"class":149,"line":1891},[147,15203,15204],{"class":157},"        m_name",[147,15206,445],{"class":397},[147,15208,15209],{"class":157},"name;\n",[147,15211,15212],{"class":149,"line":1897},[147,15213,2461],{"class":157},[147,15215,15216],{"class":149,"line":1902},[147,15217,15218],{"class":458},"    \u002F\u002F赋值学号\n",[147,15220,15221,15223,15226,15228,15230,15233],{"class":149,"line":1916},[147,15222,15182],{"class":397},[147,15224,15225],{"class":2237}," setId",[147,15227,401],{"class":157},[147,15229,404],{"class":397},[147,15231,15232],{"class":5490}," id",[147,15234,407],{"class":157},[147,15236,15237],{"class":149,"line":1921},[147,15238,2304],{"class":157},[147,15240,15241,15244,15246],{"class":149,"line":1927},[147,15242,15243],{"class":157},"        m_id",[147,15245,445],{"class":397},[147,15247,15248],{"class":157},"id;\n",[147,15250,15251],{"class":149,"line":1948},[147,15252,2461],{"class":157},[147,15254,15255],{"class":149,"line":1953},[147,15256,15257],{"class":458},"    \u002F\u002F打印学生信息\n",[147,15259,15260,15262,15264],{"class":149,"line":1967},[147,15261,15182],{"class":397},[147,15263,9889],{"class":2237},[147,15265,2250],{"class":157},[147,15267,15268],{"class":149,"line":1972},[147,15269,2304],{"class":157},[147,15271,15272,15274,15276,15279,15281,15284,15286,15288,15290,15293,15295,15298,15300],{"class":149,"line":2001},[147,15273,3725],{"class":157},[147,15275,1443],{"class":397},[147,15277,15278],{"class":504},"\"姓名：\"",[147,15280,1443],{"class":397},[147,15282,15283],{"class":157},"m_name",[147,15285,1443],{"class":397},[147,15287,4633],{"class":504},[147,15289,1443],{"class":397},[147,15291,15292],{"class":504},"\"学号：\"",[147,15294,1443],{"class":397},[147,15296,15297],{"class":157},"m_id",[147,15299,1443],{"class":397},[147,15301,1466],{"class":157},[147,15303,15304],{"class":149,"line":2006},[147,15305,2461],{"class":157},[147,15307,15308],{"class":149,"line":2023},[147,15309,4269],{"class":157},[147,15311,15312,15314,15316],{"class":149,"line":2028},[147,15313,404],{"class":397},[147,15315,2247],{"class":2237},[147,15317,2250],{"class":157},[147,15319,15320],{"class":149,"line":2033},[147,15321,1820],{"class":157},[147,15323,15324],{"class":149,"line":2038},[147,15325,15326],{"class":458},"    \u002F\u002F实例化\n",[147,15328,15329],{"class":149,"line":2052},[147,15330,15331],{"class":157},"    Student s1;\n",[147,15333,15334,15337,15340,15342,15344],{"class":149,"line":2057},[147,15335,15336],{"class":157},"    s1.",[147,15338,15339],{"class":2237},"setName",[147,15341,401],{"class":157},[147,15343,8190],{"class":504},[147,15345,2993],{"class":157},[147,15347,15348,15350,15353,15355,15358],{"class":149,"line":2851},[147,15349,15336],{"class":157},[147,15351,15352],{"class":2237},"setId",[147,15354,401],{"class":157},[147,15356,15357],{"class":448},"123456",[147,15359,2993],{"class":157},[147,15361,15362,15364,15367],{"class":149,"line":2865},[147,15363,15336],{"class":157},[147,15365,15366],{"class":2237},"printInfo",[147,15368,5910],{"class":157},[147,15370,15371],{"class":149,"line":2873},[147,15372,1839],{"class":157},[19,15374,15375],{},"类中的属性和行为统称为成员",[19,15377,15378],{},"属性：成员属性(成员变量)",[19,15380,15381],{},"方法：成员函数(成员方法)",[19,15383,15384],{},[234,15385,15386],{},"封装意义二：",[19,15388,15389],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,15391,15392],{},"访问权限有三种：",[350,15394,15395,15398,15401],{},[353,15396,15397],{},"public        公共权限",[353,15399,15400],{},"protected 保护权限",[353,15402,15403],{},"private      私有权限",[19,15405,15406],{},[234,15407,15408],{},"示例：",[138,15410,15412],{"className":10215,"code":15411,"language":10217,"meta":143,"style":143},"\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",[51,15413,15414,15419,15424,15429,15434,15438,15445,15449,15454,15458,15463,15467,15472,15477,15482,15486,15491,15496,15503,15507,15511,15519,15523,15534,15546,15558,15562,15566,15570,15578,15582,15587,15599,15607,15615,15619,15629,15633,15641],{"__ignoreMap":143},[147,15415,15416],{"class":149,"line":150},[147,15417,15418],{"class":458},"\u002F\u002F三种权限\n",[147,15420,15421],{"class":149,"line":312},[147,15422,15423],{"class":458},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[147,15425,15426],{"class":149,"line":1454},[147,15427,15428],{"class":458},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[147,15430,15431],{"class":149,"line":1469},[147,15432,15433],{"class":458},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[147,15435,15436],{"class":149,"line":1475},[147,15437,2674],{"emptyLinePlaceholder":324},[147,15439,15440,15442],{"class":149,"line":1489},[147,15441,14967],{"class":397},[147,15443,15444],{"class":2237}," Person\n",[147,15446,15447],{"class":149,"line":1495},[147,15448,1820],{"class":157},[147,15450,15451],{"class":149,"line":1586},[147,15452,15453],{"class":458},"    \u002F\u002F姓名  公共权限\n",[147,15455,15456],{"class":149,"line":1592},[147,15457,14989],{"class":397},[147,15459,15460],{"class":149,"line":1604},[147,15461,15462],{"class":157},"    string m_Name;\n",[147,15464,15465],{"class":149,"line":1886},[147,15466,2674],{"emptyLinePlaceholder":324},[147,15468,15469],{"class":149,"line":1891},[147,15470,15471],{"class":458},"    \u002F\u002F汽车  保护权限\n",[147,15473,15474],{"class":149,"line":1897},[147,15475,15476],{"class":397},"protected:\n",[147,15478,15479],{"class":149,"line":1902},[147,15480,15481],{"class":157},"    string m_Car;\n",[147,15483,15484],{"class":149,"line":1916},[147,15485,2674],{"emptyLinePlaceholder":324},[147,15487,15488],{"class":149,"line":1921},[147,15489,15490],{"class":458},"    \u002F\u002F银行卡密码  私有权限\n",[147,15492,15493],{"class":149,"line":1927},[147,15494,15495],{"class":397},"private:\n",[147,15497,15498,15500],{"class":149,"line":1948},[147,15499,2259],{"class":397},[147,15501,15502],{"class":157}," m_Password;\n",[147,15504,15505],{"class":149,"line":1953},[147,15506,2674],{"emptyLinePlaceholder":324},[147,15508,15509],{"class":149,"line":1967},[147,15510,14989],{"class":397},[147,15512,15513,15515,15517],{"class":149,"line":1972},[147,15514,15182],{"class":397},[147,15516,11659],{"class":2237},[147,15518,2250],{"class":157},[147,15520,15521],{"class":149,"line":2001},[147,15522,2304],{"class":157},[147,15524,15525,15528,15530,15532],{"class":149,"line":2006},[147,15526,15527],{"class":157},"        m_Name ",[147,15529,445],{"class":397},[147,15531,9212],{"class":504},[147,15533,1565],{"class":157},[147,15535,15536,15539,15541,15544],{"class":149,"line":2023},[147,15537,15538],{"class":157},"        m_Car ",[147,15540,445],{"class":397},[147,15542,15543],{"class":504}," \"拖拉机\"",[147,15545,1565],{"class":157},[147,15547,15548,15551,15553,15556],{"class":149,"line":2028},[147,15549,15550],{"class":157},"        m_Password ",[147,15552,445],{"class":397},[147,15554,15555],{"class":448}," 123456",[147,15557,1565],{"class":157},[147,15559,15560],{"class":149,"line":2033},[147,15561,2461],{"class":157},[147,15563,15564],{"class":149,"line":2038},[147,15565,4269],{"class":157},[147,15567,15568],{"class":149,"line":2052},[147,15569,2674],{"emptyLinePlaceholder":324},[147,15571,15572,15574,15576],{"class":149,"line":2057},[147,15573,404],{"class":397},[147,15575,2247],{"class":2237},[147,15577,11127],{"class":157},[147,15579,15580],{"class":149,"line":2851},[147,15581,2674],{"emptyLinePlaceholder":324},[147,15583,15584],{"class":149,"line":2865},[147,15585,15586],{"class":157},"    Person p;\n",[147,15588,15589,15592,15594,15597],{"class":149,"line":2873},[147,15590,15591],{"class":157},"    p.m_Name ",[147,15593,445],{"class":397},[147,15595,15596],{"class":504}," \"李四\"",[147,15598,1565],{"class":157},[147,15600,15601,15604],{"class":149,"line":2878},[147,15602,15603],{"class":458},"    \u002F\u002Fp.m_Car = \"奔驰\";",[147,15605,15606],{"class":458},"  \u002F\u002F保护权限类外访问不到\n",[147,15608,15609,15612],{"class":149,"line":2884},[147,15610,15611],{"class":458},"    \u002F\u002Fp.m_Password = 123;",[147,15613,15614],{"class":458}," \u002F\u002F私有权限类外访问不到\n",[147,15616,15617],{"class":149,"line":2890},[147,15618,2674],{"emptyLinePlaceholder":324},[147,15620,15621,15623,15625,15627],{"class":149,"line":2895},[147,15622,2577],{"class":2237},[147,15624,401],{"class":157},[147,15626,2582],{"class":504},[147,15628,2993],{"class":157},[147,15630,15631],{"class":149,"line":8222},[147,15632,2674],{"emptyLinePlaceholder":324},[147,15634,15635,15637,15639],{"class":149,"line":8246},[147,15636,4364],{"class":397},[147,15638,4367],{"class":448},[147,15640,1565],{"class":157},[147,15642,15643],{"class":149,"line":8251},[147,15644,1839],{"class":157},[367,15646,15648],{"id":15647},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,15650,15651,15652,15655,15656],{},"在C++中 struct和class唯一的",[234,15653,15654],{},"区别","就在于 ",[234,15657,15658],{},"默认的访问权限不同",[19,15660,15661],{},"区别：",[1406,15663,15664,15667],{},[353,15665,15666],{},"struct 默认权限为公共",[353,15668,15669],{},"class   默认权限为私有",[138,15671,15673],{"className":10215,"code":15672,"language":10217,"meta":143,"style":143},"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",[51,15674,15675,15682,15686,15696,15700,15704,15711,15715,15725,15729,15733,15741,15745,15750,15764,15768,15773,15787,15791,15801,15805,15813],{"__ignoreMap":143},[147,15676,15677,15679],{"class":149,"line":150},[147,15678,14967],{"class":397},[147,15680,15681],{"class":2237}," C1\n",[147,15683,15684],{"class":149,"line":312},[147,15685,1820],{"class":157},[147,15687,15688,15690,15693],{"class":149,"line":1454},[147,15689,2259],{"class":397},[147,15691,15692],{"class":157},"  m_A;",[147,15694,15695],{"class":458}," \u002F\u002F默认是私有权限\n",[147,15697,15698],{"class":149,"line":1469},[147,15699,4269],{"class":157},[147,15701,15702],{"class":149,"line":1475},[147,15703,2674],{"emptyLinePlaceholder":324},[147,15705,15706,15708],{"class":149,"line":1489},[147,15707,8033],{"class":397},[147,15709,15710],{"class":2237}," C2\n",[147,15712,15713],{"class":149,"line":1495},[147,15714,1820],{"class":157},[147,15716,15717,15719,15722],{"class":149,"line":1586},[147,15718,2259],{"class":397},[147,15720,15721],{"class":157}," m_A;",[147,15723,15724],{"class":458},"  \u002F\u002F默认是公共权限\n",[147,15726,15727],{"class":149,"line":1592},[147,15728,4269],{"class":157},[147,15730,15731],{"class":149,"line":1604},[147,15732,2674],{"emptyLinePlaceholder":324},[147,15734,15735,15737,15739],{"class":149,"line":1886},[147,15736,404],{"class":397},[147,15738,2247],{"class":2237},[147,15740,11127],{"class":157},[147,15742,15743],{"class":149,"line":1891},[147,15744,2674],{"emptyLinePlaceholder":324},[147,15746,15747],{"class":149,"line":1897},[147,15748,15749],{"class":157},"    C1 c1;\n",[147,15751,15752,15755,15757,15759,15761],{"class":149,"line":1902},[147,15753,15754],{"class":157},"    c1.m_A ",[147,15756,445],{"class":397},[147,15758,2312],{"class":448},[147,15760,455],{"class":157},[147,15762,15763],{"class":458}," \u002F\u002F错误，访问权限是私有\n",[147,15765,15766],{"class":149,"line":1916},[147,15767,2674],{"emptyLinePlaceholder":324},[147,15769,15770],{"class":149,"line":1921},[147,15771,15772],{"class":157},"    C2 c2;\n",[147,15774,15775,15778,15780,15782,15784],{"class":149,"line":1927},[147,15776,15777],{"class":157},"    c2.m_A ",[147,15779,445],{"class":397},[147,15781,2312],{"class":448},[147,15783,455],{"class":157},[147,15785,15786],{"class":458}," \u002F\u002F正确，访问权限是公共\n",[147,15788,15789],{"class":149,"line":1948},[147,15790,2674],{"emptyLinePlaceholder":324},[147,15792,15793,15795,15797,15799],{"class":149,"line":1953},[147,15794,2577],{"class":2237},[147,15796,401],{"class":157},[147,15798,2582],{"class":504},[147,15800,2993],{"class":157},[147,15802,15803],{"class":149,"line":1967},[147,15804,2674],{"emptyLinePlaceholder":324},[147,15806,15807,15809,15811],{"class":149,"line":1972},[147,15808,4364],{"class":397},[147,15810,4367],{"class":448},[147,15812,1565],{"class":157},[147,15814,15815],{"class":149,"line":2001},[147,15816,1839],{"class":157},[367,15818,15820],{"id":15819},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,15822,15823],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,15825,15826],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,15828,15829],{},[234,15830,15408],{},[138,15832,15834],{"className":10215,"code":15833,"language":10217,"meta":143,"style":143},"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",[51,15835,15836,15846,15850,15854,15859,15873,15882,15886,15896,15900,15907,15911,15915,15919,15924,15933,15940,15944,15949,15965,15988,16001,16008,16012,16021,16025,16029,16034,16050,16060,16064,16068,16072,16080,16084,16094,16098,16106,16110,16114,16122,16126,16130,16135,16148,16171,16175,16180,16193,16215,16219,16224,16238,16246,16250,16260,16264,16272],{"__ignoreMap":143},[147,15837,15838,15840,15843],{"class":149,"line":150},[147,15839,14967],{"class":397},[147,15841,15842],{"class":2237}," Person",[147,15844,15845],{"class":157}," {\n",[147,15847,15848],{"class":149,"line":312},[147,15849,14989],{"class":397},[147,15851,15852],{"class":149,"line":1454},[147,15853,2674],{"emptyLinePlaceholder":324},[147,15855,15856],{"class":149,"line":1469},[147,15857,15858],{"class":458},"    \u002F\u002F姓名设置可读可写\n",[147,15860,15861,15863,15865,15867,15869,15871],{"class":149,"line":1475},[147,15862,15182],{"class":397},[147,15864,15185],{"class":2237},[147,15866,401],{"class":157},[147,15868,15190],{"class":2237},[147,15870,15193],{"class":5490},[147,15872,12716],{"class":157},[147,15874,15875,15877,15879],{"class":149,"line":1489},[147,15876,15527],{"class":157},[147,15878,445],{"class":397},[147,15880,15881],{"class":157}," name;\n",[147,15883,15884],{"class":149,"line":1495},[147,15885,2461],{"class":157},[147,15887,15888,15891,15894],{"class":149,"line":1586},[147,15889,15890],{"class":2237},"    string",[147,15892,15893],{"class":2237}," getName",[147,15895,2250],{"class":157},[147,15897,15898],{"class":149,"line":1592},[147,15899,2304],{"class":157},[147,15901,15902,15904],{"class":149,"line":1604},[147,15903,15025],{"class":397},[147,15905,15906],{"class":157}," m_Name;\n",[147,15908,15909],{"class":149,"line":1886},[147,15910,2461],{"class":157},[147,15912,15913],{"class":149,"line":1891},[147,15914,2674],{"emptyLinePlaceholder":324},[147,15916,15917],{"class":149,"line":1897},[147,15918,2674],{"emptyLinePlaceholder":324},[147,15920,15921],{"class":149,"line":1902},[147,15922,15923],{"class":458},"    \u002F\u002F获取年龄 \n",[147,15925,15926,15928,15931],{"class":149,"line":1916},[147,15927,2259],{"class":397},[147,15929,15930],{"class":2237}," getAge",[147,15932,11127],{"class":157},[147,15934,15935,15937],{"class":149,"line":1921},[147,15936,15025],{"class":397},[147,15938,15939],{"class":157}," m_Age;\n",[147,15941,15942],{"class":149,"line":1927},[147,15943,2461],{"class":157},[147,15945,15946],{"class":149,"line":1948},[147,15947,15948],{"class":458},"    \u002F\u002F设置年龄\n",[147,15950,15951,15953,15956,15958,15960,15963],{"class":149,"line":1953},[147,15952,15182],{"class":397},[147,15954,15955],{"class":2237}," setAge",[147,15957,401],{"class":157},[147,15959,404],{"class":397},[147,15961,15962],{"class":5490}," age",[147,15964,12716],{"class":157},[147,15966,15967,15969,15972,15974,15976,15978,15981,15983,15986],{"class":149,"line":1967},[147,15968,2771],{"class":397},[147,15970,15971],{"class":157}," (age ",[147,15973,1309],{"class":397},[147,15975,4367],{"class":448},[147,15977,3529],{"class":397},[147,15979,15980],{"class":157}," age ",[147,15982,1359],{"class":397},[147,15984,15985],{"class":448}," 150",[147,15987,12716],{"class":157},[147,15989,15990,15992,15994,15997,15999],{"class":149,"line":1972},[147,15991,9993],{"class":157},[147,15993,1443],{"class":397},[147,15995,15996],{"class":504}," \"你个老妖精!\"",[147,15998,1719],{"class":397},[147,16000,9114],{"class":157},[147,16002,16003,16006],{"class":149,"line":2001},[147,16004,16005],{"class":397},"            return",[147,16007,1565],{"class":157},[147,16009,16010],{"class":149,"line":2006},[147,16011,2803],{"class":157},[147,16013,16014,16017,16019],{"class":149,"line":2023},[147,16015,16016],{"class":157},"        m_Age ",[147,16018,445],{"class":397},[147,16020,8071],{"class":157},[147,16022,16023],{"class":149,"line":2028},[147,16024,2461],{"class":157},[147,16026,16027],{"class":149,"line":2033},[147,16028,2674],{"emptyLinePlaceholder":324},[147,16030,16031],{"class":149,"line":2038},[147,16032,16033],{"class":458},"    \u002F\u002F情人设置为只写\n",[147,16035,16036,16038,16041,16043,16045,16048],{"class":149,"line":2052},[147,16037,15182],{"class":397},[147,16039,16040],{"class":2237}," setLover",[147,16042,401],{"class":157},[147,16044,15190],{"class":2237},[147,16046,16047],{"class":5490}," lover",[147,16049,12716],{"class":157},[147,16051,16052,16055,16057],{"class":149,"line":2057},[147,16053,16054],{"class":157},"        m_Lover ",[147,16056,445],{"class":397},[147,16058,16059],{"class":157}," lover;\n",[147,16061,16062],{"class":149,"line":2851},[147,16063,2461],{"class":157},[147,16065,16066],{"class":149,"line":2865},[147,16067,2674],{"emptyLinePlaceholder":324},[147,16069,16070],{"class":149,"line":2873},[147,16071,15495],{"class":397},[147,16073,16074,16077],{"class":149,"line":2878},[147,16075,16076],{"class":157},"    string m_Name;",[147,16078,16079],{"class":458}," \u002F\u002F可读可写  姓名\n",[147,16081,16082],{"class":149,"line":2884},[147,16083,13484],{"class":157},[147,16085,16086,16088,16091],{"class":149,"line":2890},[147,16087,2259],{"class":397},[147,16089,16090],{"class":157}," m_Age;",[147,16092,16093],{"class":458}," \u002F\u002F只读  年龄\n",[147,16095,16096],{"class":149,"line":2895},[147,16097,2674],{"emptyLinePlaceholder":324},[147,16099,16100,16103],{"class":149,"line":8222},[147,16101,16102],{"class":157},"    string m_Lover;",[147,16104,16105],{"class":458}," \u002F\u002F只写  情人\n",[147,16107,16108],{"class":149,"line":8246},[147,16109,4269],{"class":157},[147,16111,16112],{"class":149,"line":8251},[147,16113,2674],{"emptyLinePlaceholder":324},[147,16115,16116,16118,16120],{"class":149,"line":8257},[147,16117,404],{"class":397},[147,16119,2247],{"class":2237},[147,16121,11127],{"class":157},[147,16123,16124],{"class":149,"line":8284},[147,16125,2674],{"emptyLinePlaceholder":324},[147,16127,16128],{"class":149,"line":8289},[147,16129,15586],{"class":157},[147,16131,16132],{"class":149,"line":8295},[147,16133,16134],{"class":458},"    \u002F\u002F姓名设置\n",[147,16136,16137,16140,16142,16144,16146],{"class":149,"line":8307},[147,16138,16139],{"class":157},"    p.",[147,16141,15339],{"class":2237},[147,16143,401],{"class":157},[147,16145,8190],{"class":504},[147,16147,2993],{"class":157},[147,16149,16150,16152,16154,16157,16159,16162,16165,16167,16169],{"class":149,"line":8319},[147,16151,6803],{"class":157},[147,16153,1443],{"class":397},[147,16155,16156],{"class":504}," \"姓名： \"",[147,16158,1719],{"class":397},[147,16160,16161],{"class":157}," p.",[147,16163,16164],{"class":2237},"getName",[147,16166,13324],{"class":157},[147,16168,1443],{"class":397},[147,16170,9114],{"class":157},[147,16172,16173],{"class":149,"line":8331},[147,16174,2674],{"emptyLinePlaceholder":324},[147,16176,16177],{"class":149,"line":9990},[147,16178,16179],{"class":458},"    \u002F\u002F年龄设置\n",[147,16181,16182,16184,16187,16189,16191],{"class":149,"line":10015},[147,16183,16139],{"class":157},[147,16185,16186],{"class":2237},"setAge",[147,16188,401],{"class":157},[147,16190,1055],{"class":448},[147,16192,2993],{"class":157},[147,16194,16195,16197,16199,16202,16204,16206,16209,16211,16213],{"class":149,"line":10038},[147,16196,6803],{"class":157},[147,16198,1443],{"class":397},[147,16200,16201],{"class":504}," \"年龄： \"",[147,16203,1719],{"class":397},[147,16205,16161],{"class":157},[147,16207,16208],{"class":2237},"getAge",[147,16210,13324],{"class":157},[147,16212,1443],{"class":397},[147,16214,9114],{"class":157},[147,16216,16217],{"class":149,"line":10062},[147,16218,2674],{"emptyLinePlaceholder":324},[147,16220,16221],{"class":149,"line":10067},[147,16222,16223],{"class":458},"    \u002F\u002F情人设置\n",[147,16225,16226,16228,16231,16233,16236],{"class":149,"line":10072},[147,16227,16139],{"class":157},[147,16229,16230],{"class":2237},"setLover",[147,16232,401],{"class":157},[147,16234,16235],{"class":504},"\"苍井\"",[147,16237,2993],{"class":157},[147,16239,16240,16243],{"class":149,"line":10077},[147,16241,16242],{"class":458},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[147,16244,16245],{"class":458},"  \u002F\u002F只写属性，不可以读取\n",[147,16247,16248],{"class":149,"line":10086},[147,16249,2674],{"emptyLinePlaceholder":324},[147,16251,16252,16254,16256,16258],{"class":149,"line":10091},[147,16253,2577],{"class":2237},[147,16255,401],{"class":157},[147,16257,2582],{"class":504},[147,16259,2993],{"class":157},[147,16261,16262],{"class":149,"line":10097},[147,16263,2674],{"emptyLinePlaceholder":324},[147,16265,16266,16268,16270],{"class":149,"line":10118},[147,16267,4364],{"class":397},[147,16269,4367],{"class":448},[147,16271,1565],{"class":157},[147,16273,16274],{"class":149,"line":10124},[147,16275,1839],{"class":157},[367,16277,16279],{"id":16278},"_814封装案例","8.1.4封装案例",[350,16281,16282],{},[353,16283,16284,16287],{},[234,16285,16286],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1406,16289,16290,16293],{},[353,16291,16292],{},"求出立方体的面积和体积",[353,16294,16295],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[138,16297,16299],{"className":388,"code":16298,"language":390,"meta":143,"style":143},"#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",[51,16300,16301,16307,16317,16324,16328,16332,16337,16367,16371,16381,16391,16401,16405,16414,16418,16454,16458,16467,16471,16487,16491,16496,16505,16509,16516,16520,16529,16533,16540,16544,16553,16557,16564,16568,16573,16590,16594,16640,16644,16653,16657,16661,16665,16674,16678,16682,16687,16691,16697,16703,16709,16713,16717,16722,16744,16748,16802,16806,16814,16818,16823,16828,16841,16848,16864,16875,16881,16904,16910,16933,16947,16967,16973,16984,17007,17029,17034,17040,17054,17067,17072,17086,17091,17097,17102,17116,17121,17126,17140,17152,17157,17170,17175,17180,17185,17198,17203],{"__ignoreMap":143},[147,16302,16303,16305],{"class":149,"line":150},[147,16304,2223],{"class":397},[147,16306,2226],{"class":504},[147,16308,16309,16311,16313,16315],{"class":149,"line":312},[147,16310,2231],{"class":397},[147,16312,2234],{"class":397},[147,16314,2238],{"class":2237},[147,16316,1565],{"class":157},[147,16318,16319,16321],{"class":149,"line":1454},[147,16320,14967],{"class":397},[147,16322,16323],{"class":2237}," Cube\n",[147,16325,16326],{"class":149,"line":1469},[147,16327,1820],{"class":157},[147,16329,16330],{"class":149,"line":1475},[147,16331,14989],{"class":397},[147,16333,16334],{"class":149,"line":1489},[147,16335,16336],{"class":458},"    \u002F\u002F输入长宽高\n",[147,16338,16339,16341,16344,16346,16348,16351,16353,16355,16358,16360,16362,16365],{"class":149,"line":1495},[147,16340,15182],{"class":397},[147,16342,16343],{"class":2237}," setLwh",[147,16345,401],{"class":157},[147,16347,404],{"class":397},[147,16349,16350],{"class":5490}," l",[147,16352,777],{"class":157},[147,16354,404],{"class":397},[147,16356,16357],{"class":5490}," w",[147,16359,777],{"class":157},[147,16361,404],{"class":397},[147,16363,16364],{"class":5490}," h",[147,16366,407],{"class":157},[147,16368,16369],{"class":149,"line":1586},[147,16370,2304],{"class":157},[147,16372,16373,16376,16378],{"class":149,"line":1592},[147,16374,16375],{"class":157},"        m_L",[147,16377,445],{"class":397},[147,16379,16380],{"class":157},"l;\n",[147,16382,16383,16386,16388],{"class":149,"line":1604},[147,16384,16385],{"class":157},"        m_W",[147,16387,445],{"class":397},[147,16389,16390],{"class":157},"w;\n",[147,16392,16393,16396,16398],{"class":149,"line":1886},[147,16394,16395],{"class":157},"        m_H",[147,16397,445],{"class":397},[147,16399,16400],{"class":157},"h;\n",[147,16402,16403],{"class":149,"line":1891},[147,16404,2461],{"class":157},[147,16406,16407,16409,16412],{"class":149,"line":1897},[147,16408,2259],{"class":397},[147,16410,16411],{"class":2237}," mianji",[147,16413,2250],{"class":157},[147,16415,16416],{"class":149,"line":1902},[147,16417,2304],{"class":157},[147,16419,16420,16422,16424,16426,16429,16431,16434,16436,16439,16441,16444,16446,16449,16451],{"class":149,"line":1916},[147,16421,15025],{"class":397},[147,16423,15028],{"class":448},[147,16425,854],{"class":397},[147,16427,16428],{"class":157},"(m_L",[147,16430,854],{"class":397},[147,16432,16433],{"class":157},"m_W ",[147,16435,880],{"class":397},[147,16437,16438],{"class":157}," m_L",[147,16440,854],{"class":397},[147,16442,16443],{"class":157},"m_H ",[147,16445,880],{"class":397},[147,16447,16448],{"class":157}," m_W",[147,16450,854],{"class":397},[147,16452,16453],{"class":157},"m_H);\n",[147,16455,16456],{"class":149,"line":1921},[147,16457,2461],{"class":157},[147,16459,16460,16462,16465],{"class":149,"line":1927},[147,16461,2259],{"class":397},[147,16463,16464],{"class":2237}," tiji",[147,16466,2250],{"class":157},[147,16468,16469],{"class":149,"line":1948},[147,16470,2304],{"class":157},[147,16472,16473,16475,16477,16479,16482,16484],{"class":149,"line":1953},[147,16474,15025],{"class":397},[147,16476,16438],{"class":157},[147,16478,854],{"class":397},[147,16480,16481],{"class":157},"m_W",[147,16483,854],{"class":397},[147,16485,16486],{"class":157},"m_H;\n",[147,16488,16489],{"class":149,"line":1967},[147,16490,2461],{"class":157},[147,16492,16493],{"class":149,"line":1972},[147,16494,16495],{"class":458},"    \u002F\u002F获取长宽高\n",[147,16497,16498,16500,16503],{"class":149,"line":2001},[147,16499,2259],{"class":397},[147,16501,16502],{"class":2237}," getLength",[147,16504,2250],{"class":157},[147,16506,16507],{"class":149,"line":2006},[147,16508,2304],{"class":157},[147,16510,16511,16513],{"class":149,"line":2023},[147,16512,15025],{"class":397},[147,16514,16515],{"class":157}," m_L;\n",[147,16517,16518],{"class":149,"line":2028},[147,16519,2461],{"class":157},[147,16521,16522,16524,16527],{"class":149,"line":2033},[147,16523,2259],{"class":397},[147,16525,16526],{"class":2237}," getWidth",[147,16528,2250],{"class":157},[147,16530,16531],{"class":149,"line":2038},[147,16532,2304],{"class":157},[147,16534,16535,16537],{"class":149,"line":2052},[147,16536,15025],{"class":397},[147,16538,16539],{"class":157}," m_W;\n",[147,16541,16542],{"class":149,"line":2057},[147,16543,2461],{"class":157},[147,16545,16546,16548,16551],{"class":149,"line":2851},[147,16547,2259],{"class":397},[147,16549,16550],{"class":2237}," getHeight",[147,16552,2250],{"class":157},[147,16554,16555],{"class":149,"line":2865},[147,16556,2304],{"class":157},[147,16558,16559,16561],{"class":149,"line":2873},[147,16560,15025],{"class":397},[147,16562,16563],{"class":157}," m_H;\n",[147,16565,16566],{"class":149,"line":2878},[147,16567,2461],{"class":157},[147,16569,16570],{"class":149,"line":2884},[147,16571,16572],{"class":458},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[147,16574,16575,16578,16581,16583,16586,16588],{"class":149,"line":2890},[147,16576,16577],{"class":397},"    bool",[147,16579,16580],{"class":2237}," isEqual",[147,16582,401],{"class":157},[147,16584,16585],{"class":2237},"Cube",[147,16587,3123],{"class":5490},[147,16589,407],{"class":157},[147,16591,16592],{"class":149,"line":2895},[147,16593,2304],{"class":157},[147,16595,16596,16598,16601,16604,16606,16608,16611,16613,16616,16619,16621,16623,16626,16628,16630,16633,16635,16637],{"class":149,"line":8222},[147,16597,2771],{"class":397},[147,16599,16600],{"class":157}," (c.",[147,16602,16603],{"class":2237},"getLength",[147,16605,13324],{"class":157},[147,16607,3223],{"class":397},[147,16609,16610],{"class":157}," m_L ",[147,16612,1989],{"class":397},[147,16614,16615],{"class":157}," c.",[147,16617,16618],{"class":2237},"getWidth",[147,16620,13324],{"class":157},[147,16622,3223],{"class":397},[147,16624,16625],{"class":157}," m_W ",[147,16627,1989],{"class":397},[147,16629,16615],{"class":157},[147,16631,16632],{"class":2237},"getHeight",[147,16634,13324],{"class":157},[147,16636,3223],{"class":397},[147,16638,16639],{"class":157}," m_H)\n",[147,16641,16642],{"class":149,"line":8246},[147,16643,2784],{"class":157},[147,16645,16646,16648,16651],{"class":149,"line":8251},[147,16647,16005],{"class":397},[147,16649,16650],{"class":448}," true",[147,16652,1565],{"class":157},[147,16654,16655],{"class":149,"line":8257},[147,16656,2803],{"class":157},[147,16658,16659],{"class":149,"line":8284},[147,16660,2844],{"class":397},[147,16662,16663],{"class":149,"line":8289},[147,16664,2784],{"class":157},[147,16666,16667,16669,16672],{"class":149,"line":8295},[147,16668,16005],{"class":397},[147,16670,16671],{"class":448}," false",[147,16673,1565],{"class":157},[147,16675,16676],{"class":149,"line":8307},[147,16677,2803],{"class":157},[147,16679,16680],{"class":149,"line":8319},[147,16681,2461],{"class":157},[147,16683,16684],{"class":149,"line":8331},[147,16685,16686],{"class":458},"    \u002F\u002F私有属性\n",[147,16688,16689],{"class":149,"line":9990},[147,16690,15495],{"class":397},[147,16692,16693,16695],{"class":149,"line":10015},[147,16694,2259],{"class":397},[147,16696,16515],{"class":157},[147,16698,16699,16701],{"class":149,"line":10038},[147,16700,2259],{"class":397},[147,16702,16539],{"class":157},[147,16704,16705,16707],{"class":149,"line":10062},[147,16706,2259],{"class":397},[147,16708,16563],{"class":157},[147,16710,16711],{"class":149,"line":10067},[147,16712,2674],{"emptyLinePlaceholder":324},[147,16714,16715],{"class":149,"line":10072},[147,16716,4269],{"class":157},[147,16718,16719],{"class":149,"line":10077},[147,16720,16721],{"class":458},"\u002F\u002F全局函数判断两个立方体是否相等\n",[147,16723,16724,16726,16728,16730,16732,16735,16737,16739,16742],{"class":149,"line":10086},[147,16725,1629],{"class":397},[147,16727,16580],{"class":2237},[147,16729,401],{"class":157},[147,16731,16585],{"class":2237},[147,16733,16734],{"class":5490}," c1",[147,16736,777],{"class":157},[147,16738,16585],{"class":2237},[147,16740,16741],{"class":5490}," c2",[147,16743,407],{"class":157},[147,16745,16746],{"class":149,"line":10091},[147,16747,1820],{"class":157},[147,16749,16750,16752,16755,16757,16759,16761,16764,16766,16769,16771,16773,16775,16777,16779,16781,16783,16785,16787,16789,16791,16793,16795,16797,16799],{"class":149,"line":10097},[147,16751,4364],{"class":397},[147,16753,16754],{"class":157}," (c1.",[147,16756,16603],{"class":2237},[147,16758,13324],{"class":157},[147,16760,3223],{"class":397},[147,16762,16763],{"class":157}," c2.",[147,16765,16603],{"class":2237},[147,16767,16768],{"class":157},"()) ",[147,16770,1989],{"class":397},[147,16772,16754],{"class":157},[147,16774,16618],{"class":2237},[147,16776,13324],{"class":157},[147,16778,3223],{"class":397},[147,16780,16763],{"class":157},[147,16782,16618],{"class":2237},[147,16784,16768],{"class":157},[147,16786,1989],{"class":397},[147,16788,16754],{"class":157},[147,16790,16632],{"class":2237},[147,16792,13324],{"class":157},[147,16794,3223],{"class":397},[147,16796,16763],{"class":157},[147,16798,16632],{"class":2237},[147,16800,16801],{"class":157},"());\n",[147,16803,16804],{"class":149,"line":10118},[147,16805,1839],{"class":157},[147,16807,16808,16810,16812],{"class":149,"line":10124},[147,16809,404],{"class":397},[147,16811,2247],{"class":2237},[147,16813,2250],{"class":157},[147,16815,16816],{"class":149,"line":10138},[147,16817,1820],{"class":157},[147,16819,16820],{"class":149,"line":10144},[147,16821,16822],{"class":157},"    Cube c1;\n",[147,16824,16825],{"class":149,"line":10171},[147,16826,16827],{"class":458},"    \u002F\u002F输入立方体的长宽高\n",[147,16829,16830,16832,16834,16837,16839],{"class":149,"line":10180},[147,16831,1825],{"class":157},[147,16833,1443],{"class":397},[147,16835,16836],{"class":504},"\"请输入第一个立方体的长、宽、高：\"",[147,16838,1443],{"class":397},[147,16840,1466],{"class":157},[147,16842,16843,16845],{"class":149,"line":10186},[147,16844,2259],{"class":397},[147,16846,16847],{"class":157}," l,w,h,l1,w1,h1;\n",[147,16849,16850,16852,16854,16856,16858,16860,16862],{"class":149,"line":10194},[147,16851,2286],{"class":157},[147,16853,1704],{"class":397},[147,16855,917],{"class":157},[147,16857,1704],{"class":397},[147,16859,1194],{"class":157},[147,16861,1704],{"class":397},[147,16863,16400],{"class":157},[147,16865,16866,16869,16872],{"class":149,"line":10199},[147,16867,16868],{"class":157},"    c1.",[147,16870,16871],{"class":2237},"setLwh",[147,16873,16874],{"class":157},"(l,w,h);\n",[147,16876,16878],{"class":149,"line":16877},66,[147,16879,16880],{"class":458},"    \u002F\u002F面积\n",[147,16882,16884,16886,16888,16891,16893,16895,16898,16900,16902],{"class":149,"line":16883},67,[147,16885,1825],{"class":157},[147,16887,1443],{"class":397},[147,16889,16890],{"class":504},"\"立方体的表面积为：\"",[147,16892,1443],{"class":397},[147,16894,15103],{"class":157},[147,16896,16897],{"class":2237},"mianji",[147,16899,2701],{"class":157},[147,16901,1443],{"class":397},[147,16903,1466],{"class":157},[147,16905,16907],{"class":149,"line":16906},68,[147,16908,16909],{"class":458},"    \u002F\u002F体积\n",[147,16911,16913,16915,16917,16920,16922,16924,16927,16929,16931],{"class":149,"line":16912},69,[147,16914,1825],{"class":157},[147,16916,1443],{"class":397},[147,16918,16919],{"class":504},"\"立方体的体积为：\"",[147,16921,1443],{"class":397},[147,16923,15103],{"class":157},[147,16925,16926],{"class":2237},"tiji",[147,16928,2701],{"class":157},[147,16930,1443],{"class":397},[147,16932,1466],{"class":157},[147,16934,16936,16938,16940,16943,16945],{"class":149,"line":16935},70,[147,16937,1825],{"class":157},[147,16939,1443],{"class":397},[147,16941,16942],{"class":504},"\"请输入第二个立方体的长、宽、高：\"",[147,16944,1443],{"class":397},[147,16946,1466],{"class":157},[147,16948,16950,16952,16954,16957,16959,16962,16964],{"class":149,"line":16949},71,[147,16951,2286],{"class":157},[147,16953,1704],{"class":397},[147,16955,16956],{"class":157},"l1",[147,16958,1704],{"class":397},[147,16960,16961],{"class":157},"w1",[147,16963,1704],{"class":397},[147,16965,16966],{"class":157},"h1;\n",[147,16968,16970],{"class":149,"line":16969},72,[147,16971,16972],{"class":157},"    Cube c2;\n",[147,16974,16976,16979,16981],{"class":149,"line":16975},73,[147,16977,16978],{"class":157},"    c2.",[147,16980,16871],{"class":2237},[147,16982,16983],{"class":157},"(l1,w1,h1);\n",[147,16985,16987,16989,16991,16994,16996,16999,17001,17003,17005],{"class":149,"line":16986},74,[147,16988,1825],{"class":157},[147,16990,1443],{"class":397},[147,16992,16993],{"class":504},"\"第二个立方体的表面积为：\"",[147,16995,1443],{"class":397},[147,16997,16998],{"class":157},"c2.",[147,17000,16897],{"class":2237},[147,17002,2701],{"class":157},[147,17004,1443],{"class":397},[147,17006,1466],{"class":157},[147,17008,17010,17012,17014,17017,17019,17021,17023,17025,17027],{"class":149,"line":17009},75,[147,17011,1825],{"class":157},[147,17013,1443],{"class":397},[147,17015,17016],{"class":504},"\"第二个立方体的体积为：\"",[147,17018,1443],{"class":397},[147,17020,16998],{"class":157},[147,17022,16926],{"class":2237},[147,17024,2701],{"class":157},[147,17026,1443],{"class":397},[147,17028,1466],{"class":157},[147,17030,17032],{"class":149,"line":17031},76,[147,17033,2674],{"emptyLinePlaceholder":324},[147,17035,17037],{"class":149,"line":17036},77,[147,17038,17039],{"class":458},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[147,17041,17043,17045,17047,17050,17052],{"class":149,"line":17042},78,[147,17044,1825],{"class":157},[147,17046,1443],{"class":397},[147,17048,17049],{"class":504},"\"内部函数判断结果：\"",[147,17051,1443],{"class":397},[147,17053,1466],{"class":157},[147,17055,17057,17059,17061,17064],{"class":149,"line":17056},79,[147,17058,3375],{"class":397},[147,17060,16754],{"class":157},[147,17062,17063],{"class":2237},"isEqual",[147,17065,17066],{"class":157},"(c2))\n",[147,17068,17070],{"class":149,"line":17069},80,[147,17071,2304],{"class":157},[147,17073,17075,17077,17079,17082,17084],{"class":149,"line":17074},81,[147,17076,3725],{"class":157},[147,17078,1443],{"class":397},[147,17080,17081],{"class":504},"\"两个立方体相等\"",[147,17083,1443],{"class":397},[147,17085,1466],{"class":157},[147,17087,17089],{"class":149,"line":17088},82,[147,17090,2461],{"class":157},[147,17092,17094],{"class":149,"line":17093},83,[147,17095,17096],{"class":397},"    else\n",[147,17098,17100],{"class":149,"line":17099},84,[147,17101,2304],{"class":157},[147,17103,17105,17107,17109,17112,17114],{"class":149,"line":17104},85,[147,17106,3725],{"class":157},[147,17108,1443],{"class":397},[147,17110,17111],{"class":504},"\"两个立方体不相等\"",[147,17113,1443],{"class":397},[147,17115,1466],{"class":157},[147,17117,17119],{"class":149,"line":17118},86,[147,17120,2461],{"class":157},[147,17122,17124],{"class":149,"line":17123},87,[147,17125,2674],{"emptyLinePlaceholder":324},[147,17127,17129,17131,17133,17136,17138],{"class":149,"line":17128},88,[147,17130,1825],{"class":157},[147,17132,1443],{"class":397},[147,17134,17135],{"class":504},"\"全局函数判断结果：\"",[147,17137,1443],{"class":397},[147,17139,1466],{"class":157},[147,17141,17143,17145,17147,17149],{"class":149,"line":17142},89,[147,17144,3375],{"class":397},[147,17146,1932],{"class":157},[147,17148,17063],{"class":2237},[147,17150,17151],{"class":157},"(c1, c2))\n",[147,17153,17155],{"class":149,"line":17154},90,[147,17156,2304],{"class":157},[147,17158,17160,17162,17164,17166,17168],{"class":149,"line":17159},91,[147,17161,3725],{"class":157},[147,17163,1443],{"class":397},[147,17165,17081],{"class":504},[147,17167,1443],{"class":397},[147,17169,1466],{"class":157},[147,17171,17173],{"class":149,"line":17172},92,[147,17174,2461],{"class":157},[147,17176,17178],{"class":149,"line":17177},93,[147,17179,17096],{"class":397},[147,17181,17183],{"class":149,"line":17182},94,[147,17184,2304],{"class":157},[147,17186,17188,17190,17192,17194,17196],{"class":149,"line":17187},95,[147,17189,3725],{"class":157},[147,17191,1443],{"class":397},[147,17193,17111],{"class":504},[147,17195,1443],{"class":397},[147,17197,1466],{"class":157},[147,17199,17201],{"class":149,"line":17200},96,[147,17202,2461],{"class":157},[147,17204,17206],{"class":149,"line":17205},97,[147,17207,1839],{"class":157},[350,17209,17210],{"start":312},[353,17211,17212],{},[234,17213,17214],{},"练习案例2：点和圆的关系",[1406,17216,17217],{},[353,17218,17219],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[138,17221,17223],{"className":388,"code":17222,"language":390,"meta":143,"style":143},"#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",[51,17224,17225,17231,17241,17248,17255,17259,17263,17268,17302,17307,17323,17337,17341,17345,17352,17359,17363,17369,17373,17377,17381,17403,17426,17431,17445,17460,17464,17468,17474,17479,17484,17488,17514,17518,17548,17576,17604,17621,17625,17638,17642,17646,17650,17663,17667,17671,17679,17683,17687,17691,17696,17700,17711,17718,17727,17737,17748,17755,17768,17779,17789,17800,17807,17821,17826,17836,17844],{"__ignoreMap":143},[147,17226,17227,17229],{"class":149,"line":150},[147,17228,2223],{"class":397},[147,17230,2226],{"class":504},[147,17232,17233,17235,17237,17239],{"class":149,"line":312},[147,17234,2231],{"class":397},[147,17236,2234],{"class":397},[147,17238,2238],{"class":2237},[147,17240,1565],{"class":157},[147,17242,17243,17245],{"class":149,"line":1454},[147,17244,2223],{"class":397},[147,17246,17247],{"class":504},"\u003Ccmath>\n",[147,17249,17250,17252],{"class":149,"line":1469},[147,17251,14967],{"class":397},[147,17253,17254],{"class":2237}," Point\n",[147,17256,17257],{"class":149,"line":1475},[147,17258,1820],{"class":157},[147,17260,17261],{"class":149,"line":1489},[147,17262,14989],{"class":397},[147,17264,17265],{"class":149,"line":1495},[147,17266,17267],{"class":458},"    \u002F\u002F赋值\n",[147,17269,17270,17272,17275,17277,17279,17282,17284,17286,17289,17292,17294,17297,17299],{"class":149,"line":1586},[147,17271,15182],{"class":397},[147,17273,17274],{"class":2237}," setPoint",[147,17276,401],{"class":157},[147,17278,14310],{"class":397},[147,17280,17281],{"class":5490}," x",[147,17283,12709],{"class":157},[147,17285,14310],{"class":397},[147,17287,17288],{"class":5490}," y",[147,17290,17291],{"class":157},") { m_x ",[147,17293,445],{"class":397},[147,17295,17296],{"class":157}," x; m_y ",[147,17298,445],{"class":397},[147,17300,17301],{"class":157}," y; }\n",[147,17303,17304],{"class":149,"line":1592},[147,17305,17306],{"class":458},"    \u002F\u002F获取坐标\n",[147,17308,17309,17311,17314,17317,17320],{"class":149,"line":1604},[147,17310,15011],{"class":397},[147,17312,17313],{"class":2237}," getX",[147,17315,17316],{"class":157},"() { ",[147,17318,17319],{"class":397},"return",[147,17321,17322],{"class":157}," m_x; }\n",[147,17324,17325,17327,17330,17332,17334],{"class":149,"line":1886},[147,17326,15011],{"class":397},[147,17328,17329],{"class":2237}," getY",[147,17331,17316],{"class":157},[147,17333,17319],{"class":397},[147,17335,17336],{"class":157}," m_y; }\n",[147,17338,17339],{"class":149,"line":1891},[147,17340,2674],{"emptyLinePlaceholder":324},[147,17342,17343],{"class":149,"line":1897},[147,17344,15495],{"class":397},[147,17346,17347,17349],{"class":149,"line":1902},[147,17348,15011],{"class":397},[147,17350,17351],{"class":157}," m_x;\n",[147,17353,17354,17356],{"class":149,"line":1916},[147,17355,15011],{"class":397},[147,17357,17358],{"class":157}," m_y;\n",[147,17360,17361],{"class":149,"line":1921},[147,17362,4269],{"class":157},[147,17364,17365,17367],{"class":149,"line":1927},[147,17366,14967],{"class":397},[147,17368,14970],{"class":2237},[147,17370,17371],{"class":149,"line":1948},[147,17372,1820],{"class":157},[147,17374,17375],{"class":149,"line":1953},[147,17376,14989],{"class":397},[147,17378,17379],{"class":149,"line":1967},[147,17380,17267],{"class":458},[147,17382,17383,17385,17388,17390,17392,17395,17398,17400],{"class":149,"line":1972},[147,17384,15182],{"class":397},[147,17386,17387],{"class":2237}," setRadius",[147,17389,401],{"class":157},[147,17391,14310],{"class":397},[147,17393,17394],{"class":5490}," r",[147,17396,17397],{"class":157},") { m_r ",[147,17399,445],{"class":397},[147,17401,17402],{"class":157}," r; }\n",[147,17404,17405,17407,17410,17412,17415,17418,17421,17423],{"class":149,"line":2001},[147,17406,15182],{"class":397},[147,17408,17409],{"class":2237}," setCenter",[147,17411,401],{"class":157},[147,17413,17414],{"class":2237},"Point",[147,17416,17417],{"class":5490}," center",[147,17419,17420],{"class":157},") { m_center ",[147,17422,445],{"class":397},[147,17424,17425],{"class":157}," center; }\n",[147,17427,17428],{"class":149,"line":2006},[147,17429,17430],{"class":458},"    \u002F\u002F获取属性\n",[147,17432,17433,17435,17438,17440,17442],{"class":149,"line":2023},[147,17434,15011],{"class":397},[147,17436,17437],{"class":2237}," getRadius",[147,17439,17316],{"class":157},[147,17441,17319],{"class":397},[147,17443,17444],{"class":157}," m_r; }\n",[147,17446,17447,17450,17453,17455,17457],{"class":149,"line":2028},[147,17448,17449],{"class":2237},"    Point",[147,17451,17452],{"class":2237}," getCenter",[147,17454,17316],{"class":157},[147,17456,17319],{"class":397},[147,17458,17459],{"class":157}," m_center; }\n",[147,17461,17462],{"class":149,"line":2033},[147,17463,2674],{"emptyLinePlaceholder":324},[147,17465,17466],{"class":149,"line":2038},[147,17467,15495],{"class":397},[147,17469,17470,17472],{"class":149,"line":2052},[147,17471,15011],{"class":397},[147,17473,15001],{"class":157},[147,17475,17476],{"class":149,"line":2057},[147,17477,17478],{"class":458},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[147,17480,17481],{"class":149,"line":2851},[147,17482,17483],{"class":157},"    Point m_center;\n",[147,17485,17486],{"class":149,"line":2865},[147,17487,4269],{"class":157},[147,17489,17490,17492,17495,17497,17500,17502,17504,17506,17508,17510,17512],{"class":149,"line":2873},[147,17491,5638],{"class":397},[147,17493,17494],{"class":2237}," isInCircle",[147,17496,401],{"class":157},[147,17498,17499],{"class":2237},"Circle",[147,17501,10858],{"class":397},[147,17503,687],{"class":5490},[147,17505,777],{"class":157},[147,17507,17414],{"class":2237},[147,17509,10858],{"class":397},[147,17511,19],{"class":5490},[147,17513,407],{"class":157},[147,17515,17516],{"class":149,"line":2878},[147,17517,1820],{"class":157},[147,17519,17520,17522,17525,17527,17529,17532,17535,17538,17540,17542,17544,17546],{"class":149,"line":2884},[147,17521,15011],{"class":397},[147,17523,17524],{"class":157}," dx ",[147,17526,445],{"class":397},[147,17528,16615],{"class":157},[147,17530,17531],{"class":2237},"getCenter",[147,17533,17534],{"class":157},"().",[147,17536,17537],{"class":2237},"getX",[147,17539,13324],{"class":157},[147,17541,931],{"class":397},[147,17543,16161],{"class":157},[147,17545,17537],{"class":2237},[147,17547,5910],{"class":157},[147,17549,17550,17552,17555,17557,17559,17561,17563,17566,17568,17570,17572,17574],{"class":149,"line":2890},[147,17551,15011],{"class":397},[147,17553,17554],{"class":157}," dy ",[147,17556,445],{"class":397},[147,17558,16615],{"class":157},[147,17560,17531],{"class":2237},[147,17562,17534],{"class":157},[147,17564,17565],{"class":2237},"getY",[147,17567,13324],{"class":157},[147,17569,931],{"class":397},[147,17571,16161],{"class":157},[147,17573,17565],{"class":2237},[147,17575,5910],{"class":157},[147,17577,17578,17580,17583,17585,17588,17591,17593,17595,17597,17599,17601],{"class":149,"line":2895},[147,17579,15011],{"class":397},[147,17581,17582],{"class":157}," distance ",[147,17584,445],{"class":397},[147,17586,17587],{"class":2237}," sqrt",[147,17589,17590],{"class":157},"(dx ",[147,17592,854],{"class":397},[147,17594,17524],{"class":157},[147,17596,880],{"class":397},[147,17598,17554],{"class":157},[147,17600,854],{"class":397},[147,17602,17603],{"class":157}," dy);\n",[147,17605,17606,17608,17611,17613,17615,17618],{"class":149,"line":8222},[147,17607,3375],{"class":397},[147,17609,17610],{"class":157}," (distance ",[147,17612,1309],{"class":397},[147,17614,16615],{"class":157},[147,17616,17617],{"class":2237},"getRadius",[147,17619,17620],{"class":157},"())\n",[147,17622,17623],{"class":149,"line":8246},[147,17624,2304],{"class":157},[147,17626,17627,17629,17631,17634,17636],{"class":149,"line":8251},[147,17628,9943],{"class":157},[147,17630,1443],{"class":397},[147,17632,17633],{"class":504}," \"点在圆内\"",[147,17635,1719],{"class":397},[147,17637,9114],{"class":157},[147,17639,17640],{"class":149,"line":8257},[147,17641,2461],{"class":157},[147,17643,17644],{"class":149,"line":8284},[147,17645,17096],{"class":397},[147,17647,17648],{"class":149,"line":8289},[147,17649,2304],{"class":157},[147,17651,17652,17654,17656,17659,17661],{"class":149,"line":8295},[147,17653,9943],{"class":157},[147,17655,1443],{"class":397},[147,17657,17658],{"class":504}," \"点在圆外\"",[147,17660,1719],{"class":397},[147,17662,9114],{"class":157},[147,17664,17665],{"class":149,"line":8307},[147,17666,2461],{"class":157},[147,17668,17669],{"class":149,"line":8319},[147,17670,1839],{"class":157},[147,17672,17673,17675,17677],{"class":149,"line":8331},[147,17674,404],{"class":397},[147,17676,2247],{"class":2237},[147,17678,2250],{"class":157},[147,17680,17681],{"class":149,"line":9990},[147,17682,1820],{"class":157},[147,17684,17685],{"class":149,"line":10015},[147,17686,15326],{"class":458},[147,17688,17689],{"class":149,"line":10038},[147,17690,15073],{"class":157},[147,17692,17693],{"class":149,"line":10062},[147,17694,17695],{"class":157},"    Point p1;\n",[147,17697,17698],{"class":149,"line":10067},[147,17699,17267],{"class":458},[147,17701,17702,17704,17706,17709],{"class":149,"line":10072},[147,17703,1825],{"class":157},[147,17705,1443],{"class":397},[147,17707,17708],{"class":504},"\"请输入圆的半径：\"",[147,17710,1565],{"class":157},[147,17712,17713,17715],{"class":149,"line":10077},[147,17714,15011],{"class":397},[147,17716,17717],{"class":157}," r;\n",[147,17719,17720,17722,17724],{"class":149,"line":10086},[147,17721,2286],{"class":157},[147,17723,1704],{"class":397},[147,17725,17726],{"class":157},"r;\n",[147,17728,17729,17731,17734],{"class":149,"line":10091},[147,17730,16868],{"class":157},[147,17732,17733],{"class":2237},"setRadius",[147,17735,17736],{"class":157},"(r);\n",[147,17738,17739,17741,17743,17746],{"class":149,"line":10097},[147,17740,1825],{"class":157},[147,17742,1443],{"class":397},[147,17744,17745],{"class":504},"\"请输入圆心坐标：\"",[147,17747,1565],{"class":157},[147,17749,17750,17752],{"class":149,"line":10118},[147,17751,15011],{"class":397},[147,17753,17754],{"class":157}," x, y;\n",[147,17756,17757,17759,17761,17763,17765],{"class":149,"line":10124},[147,17758,2286],{"class":157},[147,17760,1704],{"class":397},[147,17762,1219],{"class":157},[147,17764,1704],{"class":397},[147,17766,17767],{"class":157},"y;\n",[147,17769,17770,17773,17776],{"class":149,"line":10138},[147,17771,17772],{"class":157},"    p1.",[147,17774,17775],{"class":2237},"setPoint",[147,17777,17778],{"class":157},"(x, y);\n",[147,17780,17781,17783,17786],{"class":149,"line":10144},[147,17782,16868],{"class":157},[147,17784,17785],{"class":2237},"setCenter",[147,17787,17788],{"class":157},"(p1);\n",[147,17790,17791,17793,17795,17798],{"class":149,"line":10171},[147,17792,1825],{"class":157},[147,17794,1443],{"class":397},[147,17796,17797],{"class":504},"\"请输入测试点坐标：\"",[147,17799,1565],{"class":157},[147,17801,17802,17804],{"class":149,"line":10180},[147,17803,15011],{"class":397},[147,17805,17806],{"class":157}," x1, y1;\n",[147,17808,17809,17811,17813,17816,17818],{"class":149,"line":10186},[147,17810,2286],{"class":157},[147,17812,1704],{"class":397},[147,17814,17815],{"class":157},"x1",[147,17817,1704],{"class":397},[147,17819,17820],{"class":157},"y1;\n",[147,17822,17823],{"class":149,"line":10194},[147,17824,17825],{"class":157},"    Point p2;\n",[147,17827,17828,17831,17833],{"class":149,"line":10199},[147,17829,17830],{"class":157},"    p2.",[147,17832,17775],{"class":2237},[147,17834,17835],{"class":157},"(x1, y1);\n",[147,17837,17838,17841],{"class":149,"line":16877},[147,17839,17840],{"class":2237},"    isInCircle",[147,17842,17843],{"class":157},"(c1, p2);\n",[147,17845,17846],{"class":149,"line":16883},[147,17847,1839],{"class":157},[19,17849,17850],{},"在类中可以让另一个类作为本来的成员",[19,17852,17853],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,17855,17856],{},"创建point.h",[138,17858,17860],{"className":388,"code":17859,"language":390,"meta":143,"style":143},"#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",[51,17861,17862,17873,17879,17889,17895,17899,17904,17908,17912,17932,17936,17944,17952,17956,17960,17966,17972],{"__ignoreMap":143},[147,17863,17864,17867,17870],{"class":149,"line":150},[147,17865,17866],{"class":397},"#pragma",[147,17868,17869],{"class":2237}," once",[147,17871,17872],{"class":458}," \u002F\u002F防止头文件重复包含\n",[147,17874,17875,17877],{"class":149,"line":312},[147,17876,2223],{"class":397},[147,17878,2226],{"class":504},[147,17880,17881,17883,17885,17887],{"class":149,"line":1454},[147,17882,2231],{"class":397},[147,17884,2234],{"class":397},[147,17886,2238],{"class":2237},[147,17888,1565],{"class":157},[147,17890,17891,17893],{"class":149,"line":1469},[147,17892,14967],{"class":397},[147,17894,17254],{"class":2237},[147,17896,17897],{"class":149,"line":1475},[147,17898,1820],{"class":157},[147,17900,17901],{"class":149,"line":1489},[147,17902,17903],{"class":458},"\u002F\u002F做好声明与变量定义就可以\n",[147,17905,17906],{"class":149,"line":1495},[147,17907,14989],{"class":397},[147,17909,17910],{"class":149,"line":1586},[147,17911,17267],{"class":458},[147,17913,17914,17916,17918,17920,17922,17924,17926,17928,17930],{"class":149,"line":1592},[147,17915,15182],{"class":397},[147,17917,17274],{"class":2237},[147,17919,401],{"class":157},[147,17921,14310],{"class":397},[147,17923,17281],{"class":5490},[147,17925,12709],{"class":157},[147,17927,14310],{"class":397},[147,17929,17288],{"class":5490},[147,17931,2993],{"class":157},[147,17933,17934],{"class":149,"line":1604},[147,17935,17306],{"class":458},[147,17937,17938,17940,17942],{"class":149,"line":1886},[147,17939,15011],{"class":397},[147,17941,17313],{"class":2237},[147,17943,5910],{"class":157},[147,17945,17946,17948,17950],{"class":149,"line":1891},[147,17947,15011],{"class":397},[147,17949,17329],{"class":2237},[147,17951,5910],{"class":157},[147,17953,17954],{"class":149,"line":1897},[147,17955,2674],{"emptyLinePlaceholder":324},[147,17957,17958],{"class":149,"line":1902},[147,17959,15495],{"class":397},[147,17961,17962,17964],{"class":149,"line":1916},[147,17963,15011],{"class":397},[147,17965,17351],{"class":157},[147,17967,17968,17970],{"class":149,"line":1921},[147,17969,15011],{"class":397},[147,17971,17358],{"class":157},[147,17973,17974],{"class":149,"line":1927},[147,17975,4269],{"class":157},[19,17977,17978],{},"创建point.cpp",[138,17980,17982],{"className":388,"code":17981,"language":390,"meta":143,"style":143},"#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",[51,17983,17984,17991,17996,18030,18034,18050],{"__ignoreMap":143},[147,17985,17986,17988],{"class":149,"line":150},[147,17987,2223],{"class":397},[147,17989,17990],{"class":504},"\u003Cpoint.h>\n",[147,17992,17993],{"class":149,"line":312},[147,17994,17995],{"class":458},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[147,17997,17998,18000,18003,18006,18008,18010,18012,18014,18016,18018,18020,18022,18024,18026,18028],{"class":149,"line":1454},[147,17999,15182],{"class":397},[147,18001,18002],{"class":2237}," Point",[147,18004,18005],{"class":157},"::",[147,18007,17775],{"class":2237},[147,18009,401],{"class":157},[147,18011,14310],{"class":397},[147,18013,17281],{"class":5490},[147,18015,12709],{"class":157},[147,18017,14310],{"class":397},[147,18019,17288],{"class":5490},[147,18021,17291],{"class":157},[147,18023,445],{"class":397},[147,18025,17296],{"class":157},[147,18027,445],{"class":397},[147,18029,17301],{"class":157},[147,18031,18032],{"class":149,"line":1469},[147,18033,17306],{"class":458},[147,18035,18036,18038,18040,18042,18044,18046,18048],{"class":149,"line":1475},[147,18037,15011],{"class":397},[147,18039,18002],{"class":2237},[147,18041,18005],{"class":157},[147,18043,17537],{"class":2237},[147,18045,17316],{"class":157},[147,18047,17319],{"class":397},[147,18049,17322],{"class":157},[147,18051,18052,18054,18056,18058,18060,18062,18064],{"class":149,"line":1489},[147,18053,15011],{"class":397},[147,18055,18002],{"class":2237},[147,18057,18005],{"class":157},[147,18059,17565],{"class":2237},[147,18061,17316],{"class":157},[147,18063,17319],{"class":397},[147,18065,17336],{"class":157},[19,18067,18068],{},"创建circle.h",[138,18070,18072],{"className":388,"code":18071,"language":390,"meta":143,"style":143},"#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",[51,18073,18074,18081,18087,18097,18103,18109,18113,18117,18121,18135,18149,18153,18161,18169,18173,18177,18183,18187,18191],{"__ignoreMap":143},[147,18075,18076,18078],{"class":149,"line":150},[147,18077,17866],{"class":397},[147,18079,18080],{"class":2237}," once\n",[147,18082,18083,18085],{"class":149,"line":312},[147,18084,2223],{"class":397},[147,18086,2226],{"class":504},[147,18088,18089,18091,18093,18095],{"class":149,"line":1454},[147,18090,2231],{"class":397},[147,18092,2234],{"class":397},[147,18094,2238],{"class":2237},[147,18096,1565],{"class":157},[147,18098,18099,18101],{"class":149,"line":1469},[147,18100,2223],{"class":397},[147,18102,17990],{"class":504},[147,18104,18105,18107],{"class":149,"line":1475},[147,18106,14967],{"class":397},[147,18108,14970],{"class":2237},[147,18110,18111],{"class":149,"line":1489},[147,18112,1820],{"class":157},[147,18114,18115],{"class":149,"line":1495},[147,18116,14989],{"class":397},[147,18118,18119],{"class":149,"line":1586},[147,18120,17267],{"class":458},[147,18122,18123,18125,18127,18129,18131,18133],{"class":149,"line":1592},[147,18124,15182],{"class":397},[147,18126,17387],{"class":2237},[147,18128,401],{"class":157},[147,18130,14310],{"class":397},[147,18132,17394],{"class":5490},[147,18134,2993],{"class":157},[147,18136,18137,18139,18141,18143,18145,18147],{"class":149,"line":1604},[147,18138,15182],{"class":397},[147,18140,17409],{"class":2237},[147,18142,401],{"class":157},[147,18144,17414],{"class":2237},[147,18146,17417],{"class":5490},[147,18148,2993],{"class":157},[147,18150,18151],{"class":149,"line":1886},[147,18152,17430],{"class":458},[147,18154,18155,18157,18159],{"class":149,"line":1891},[147,18156,15011],{"class":397},[147,18158,17437],{"class":2237},[147,18160,5910],{"class":157},[147,18162,18163,18165,18167],{"class":149,"line":1897},[147,18164,17449],{"class":2237},[147,18166,17452],{"class":2237},[147,18168,5910],{"class":157},[147,18170,18171],{"class":149,"line":1902},[147,18172,2674],{"emptyLinePlaceholder":324},[147,18174,18175],{"class":149,"line":1916},[147,18176,15495],{"class":397},[147,18178,18179,18181],{"class":149,"line":1921},[147,18180,15011],{"class":397},[147,18182,15001],{"class":157},[147,18184,18185],{"class":149,"line":1927},[147,18186,17478],{"class":458},[147,18188,18189],{"class":149,"line":1948},[147,18190,17483],{"class":157},[147,18192,18193],{"class":149,"line":1953},[147,18194,4269],{"class":157},[19,18196,18197],{},"创建circle.cpp",[138,18199,18201],{"className":388,"code":18200,"language":390,"meta":143,"style":143},"#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",[51,18202,18203,18210,18233,18255,18260,18276],{"__ignoreMap":143},[147,18204,18205,18207],{"class":149,"line":150},[147,18206,2223],{"class":397},[147,18208,18209],{"class":504},"\u003Ccircle.h>\n",[147,18211,18212,18214,18217,18219,18221,18223,18225,18227,18229,18231],{"class":149,"line":312},[147,18213,5638],{"class":397},[147,18215,18216],{"class":2237}," Circle",[147,18218,18005],{"class":157},[147,18220,17733],{"class":2237},[147,18222,401],{"class":157},[147,18224,14310],{"class":397},[147,18226,17394],{"class":5490},[147,18228,17397],{"class":157},[147,18230,445],{"class":397},[147,18232,17402],{"class":157},[147,18234,18235,18237,18239,18241,18243,18245,18247,18249,18251,18253],{"class":149,"line":1454},[147,18236,5638],{"class":397},[147,18238,18216],{"class":2237},[147,18240,18005],{"class":157},[147,18242,17785],{"class":2237},[147,18244,401],{"class":157},[147,18246,17414],{"class":2237},[147,18248,17417],{"class":5490},[147,18250,17420],{"class":157},[147,18252,445],{"class":397},[147,18254,17425],{"class":157},[147,18256,18257],{"class":149,"line":1469},[147,18258,18259],{"class":458},"\u002F\u002F获取属性\n",[147,18261,18262,18264,18266,18268,18270,18272,18274],{"class":149,"line":1475},[147,18263,14310],{"class":397},[147,18265,18216],{"class":2237},[147,18267,18005],{"class":157},[147,18269,17617],{"class":2237},[147,18271,17316],{"class":157},[147,18273,17319],{"class":397},[147,18275,17444],{"class":157},[147,18277,18278,18280,18282,18284,18286,18288,18290],{"class":149,"line":1489},[147,18279,17414],{"class":2237},[147,18281,18216],{"class":2237},[147,18283,18005],{"class":157},[147,18285,17531],{"class":2237},[147,18287,17316],{"class":157},[147,18289,17319],{"class":397},[147,18291,17459],{"class":157},[19,18293,18294],{},"使用封装的类",[138,18296,18298],{"className":388,"code":18297,"language":390,"meta":143,"style":143},"#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",[51,18299,18300,18306,18316,18322,18328,18352,18356,18382,18408,18432,18446,18450,18462,18466,18470,18474,18486,18490,18494,18502,18506,18510,18514,18518,18522,18532,18538,18546,18554,18564,18570,18582,18590,18598,18608,18614,18626,18630,18638,18644],{"__ignoreMap":143},[147,18301,18302,18304],{"class":149,"line":150},[147,18303,2223],{"class":397},[147,18305,2226],{"class":504},[147,18307,18308,18310,18312,18314],{"class":149,"line":312},[147,18309,2231],{"class":397},[147,18311,2234],{"class":397},[147,18313,2238],{"class":2237},[147,18315,1565],{"class":157},[147,18317,18318,18320],{"class":149,"line":1454},[147,18319,2223],{"class":397},[147,18321,18209],{"class":504},[147,18323,18324,18326],{"class":149,"line":1469},[147,18325,2223],{"class":397},[147,18327,17990],{"class":504},[147,18329,18330,18332,18334,18336,18338,18340,18342,18344,18346,18348,18350],{"class":149,"line":1475},[147,18331,5638],{"class":397},[147,18333,17494],{"class":2237},[147,18335,401],{"class":157},[147,18337,17499],{"class":2237},[147,18339,10858],{"class":397},[147,18341,687],{"class":5490},[147,18343,777],{"class":157},[147,18345,17414],{"class":2237},[147,18347,10858],{"class":397},[147,18349,19],{"class":5490},[147,18351,407],{"class":157},[147,18353,18354],{"class":149,"line":1489},[147,18355,1820],{"class":157},[147,18357,18358,18360,18362,18364,18366,18368,18370,18372,18374,18376,18378,18380],{"class":149,"line":1495},[147,18359,15011],{"class":397},[147,18361,17524],{"class":157},[147,18363,445],{"class":397},[147,18365,16615],{"class":157},[147,18367,17531],{"class":2237},[147,18369,17534],{"class":157},[147,18371,17537],{"class":2237},[147,18373,13324],{"class":157},[147,18375,931],{"class":397},[147,18377,16161],{"class":157},[147,18379,17537],{"class":2237},[147,18381,5910],{"class":157},[147,18383,18384,18386,18388,18390,18392,18394,18396,18398,18400,18402,18404,18406],{"class":149,"line":1586},[147,18385,15011],{"class":397},[147,18387,17554],{"class":157},[147,18389,445],{"class":397},[147,18391,16615],{"class":157},[147,18393,17531],{"class":2237},[147,18395,17534],{"class":157},[147,18397,17565],{"class":2237},[147,18399,13324],{"class":157},[147,18401,931],{"class":397},[147,18403,16161],{"class":157},[147,18405,17565],{"class":2237},[147,18407,5910],{"class":157},[147,18409,18410,18412,18414,18416,18418,18420,18422,18424,18426,18428,18430],{"class":149,"line":1592},[147,18411,15011],{"class":397},[147,18413,17582],{"class":157},[147,18415,445],{"class":397},[147,18417,17587],{"class":2237},[147,18419,17590],{"class":157},[147,18421,854],{"class":397},[147,18423,17524],{"class":157},[147,18425,880],{"class":397},[147,18427,17554],{"class":157},[147,18429,854],{"class":397},[147,18431,17603],{"class":157},[147,18433,18434,18436,18438,18440,18442,18444],{"class":149,"line":1604},[147,18435,3375],{"class":397},[147,18437,17610],{"class":157},[147,18439,1309],{"class":397},[147,18441,16615],{"class":157},[147,18443,17617],{"class":2237},[147,18445,17620],{"class":157},[147,18447,18448],{"class":149,"line":1886},[147,18449,2304],{"class":157},[147,18451,18452,18454,18456,18458,18460],{"class":149,"line":1891},[147,18453,9943],{"class":157},[147,18455,1443],{"class":397},[147,18457,17633],{"class":504},[147,18459,1719],{"class":397},[147,18461,9114],{"class":157},[147,18463,18464],{"class":149,"line":1897},[147,18465,2461],{"class":157},[147,18467,18468],{"class":149,"line":1902},[147,18469,17096],{"class":397},[147,18471,18472],{"class":149,"line":1916},[147,18473,2304],{"class":157},[147,18475,18476,18478,18480,18482,18484],{"class":149,"line":1921},[147,18477,9943],{"class":157},[147,18479,1443],{"class":397},[147,18481,17658],{"class":504},[147,18483,1719],{"class":397},[147,18485,9114],{"class":157},[147,18487,18488],{"class":149,"line":1927},[147,18489,2461],{"class":157},[147,18491,18492],{"class":149,"line":1948},[147,18493,1839],{"class":157},[147,18495,18496,18498,18500],{"class":149,"line":1953},[147,18497,404],{"class":397},[147,18499,2247],{"class":2237},[147,18501,2250],{"class":157},[147,18503,18504],{"class":149,"line":1967},[147,18505,1820],{"class":157},[147,18507,18508],{"class":149,"line":1972},[147,18509,15326],{"class":458},[147,18511,18512],{"class":149,"line":2001},[147,18513,15073],{"class":157},[147,18515,18516],{"class":149,"line":2006},[147,18517,17695],{"class":157},[147,18519,18520],{"class":149,"line":2023},[147,18521,17267],{"class":458},[147,18523,18524,18526,18528,18530],{"class":149,"line":2028},[147,18525,1825],{"class":157},[147,18527,1443],{"class":397},[147,18529,17708],{"class":504},[147,18531,1565],{"class":157},[147,18533,18534,18536],{"class":149,"line":2033},[147,18535,15011],{"class":397},[147,18537,17717],{"class":157},[147,18539,18540,18542,18544],{"class":149,"line":2038},[147,18541,2286],{"class":157},[147,18543,1704],{"class":397},[147,18545,17726],{"class":157},[147,18547,18548,18550,18552],{"class":149,"line":2052},[147,18549,16868],{"class":157},[147,18551,17733],{"class":2237},[147,18553,17736],{"class":157},[147,18555,18556,18558,18560,18562],{"class":149,"line":2057},[147,18557,1825],{"class":157},[147,18559,1443],{"class":397},[147,18561,17745],{"class":504},[147,18563,1565],{"class":157},[147,18565,18566,18568],{"class":149,"line":2851},[147,18567,15011],{"class":397},[147,18569,17754],{"class":157},[147,18571,18572,18574,18576,18578,18580],{"class":149,"line":2865},[147,18573,2286],{"class":157},[147,18575,1704],{"class":397},[147,18577,1219],{"class":157},[147,18579,1704],{"class":397},[147,18581,17767],{"class":157},[147,18583,18584,18586,18588],{"class":149,"line":2873},[147,18585,17772],{"class":157},[147,18587,17775],{"class":2237},[147,18589,17778],{"class":157},[147,18591,18592,18594,18596],{"class":149,"line":2878},[147,18593,16868],{"class":157},[147,18595,17785],{"class":2237},[147,18597,17788],{"class":157},[147,18599,18600,18602,18604,18606],{"class":149,"line":2884},[147,18601,1825],{"class":157},[147,18603,1443],{"class":397},[147,18605,17797],{"class":504},[147,18607,1565],{"class":157},[147,18609,18610,18612],{"class":149,"line":2890},[147,18611,15011],{"class":397},[147,18613,17806],{"class":157},[147,18615,18616,18618,18620,18622,18624],{"class":149,"line":2895},[147,18617,2286],{"class":157},[147,18619,1704],{"class":397},[147,18621,17815],{"class":157},[147,18623,1704],{"class":397},[147,18625,17820],{"class":157},[147,18627,18628],{"class":149,"line":8222},[147,18629,17825],{"class":157},[147,18631,18632,18634,18636],{"class":149,"line":8246},[147,18633,17830],{"class":157},[147,18635,17775],{"class":2237},[147,18637,17835],{"class":157},[147,18639,18640,18642],{"class":149,"line":8251},[147,18641,17840],{"class":2237},[147,18643,17843],{"class":157},[147,18645,18646],{"class":149,"line":8257},[147,18647,1839],{"class":157},[14,18649,18651],{"id":18650},"_82对象的初始化清理","8.2对象的初始化清理",[1406,18653,18654,18657],{},[353,18655,18656],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[353,18658,18659],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[367,18661,18663],{"id":18662},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,18665,18666,18667,18670],{},"对象的",[234,18668,18669],{},"初始化和清理","也是两个非常重要的安全问题",[19,18672,18673],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,18675,18676],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,18678,18679,18680,18683,18684,18687],{},"c++利用了",[234,18681,18682],{},"构造函数","和",[234,18685,18686],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,18689,18690,18691],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[234,18692,18693],{},"我们不提供构造和析构，编译器会提供",[19,18695,18696],{},[234,18697,18698],{},"编译器提供的构造函数和析构函数是空实现。",[1406,18700,18701,18704],{},[353,18702,18703],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[353,18705,18706,18707,18710],{},"析构函数：主要作用在于对象",[234,18708,18709],{},"销毁前","系统自动调用，执行一些清理工作。",[19,18712,18713,18716],{},[234,18714,18715],{},"构造函数语法：",[51,18717,18718],{},"类名(){}",[350,18720,18721,18724,18727,18730,18733],{},[353,18722,18723],{},"构造函数，没有返回值也不写void",[353,18725,18726],{},"函数名称与类名相同",[353,18728,18729],{},"构造函数可以有参数，因此可以发生重载",[353,18731,18732],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[353,18734,18735,18736,828],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[51,18737,18738],{},"Person(){}",[19,18740,18741,249,18744],{},[234,18742,18743],{},"析构函数语法：",[51,18745,18746],{},"~类名(){}",[350,18748,18749,18752,18755,18761],{},[353,18750,18751],{},"析构函数，没有返回值也不写void",[353,18753,18754],{},"函数名称与类名相同,在名称前加上符号  ~",[353,18756,18757,18758],{},"析构函数不可以有参数，因此",[234,18759,18760],{},"不可以发生重载",[353,18762,18763],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[138,18765,18767],{"className":388,"code":18766,"language":390,"meta":143,"style":143},"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",[51,18768,18769,18775,18779,18783,18788,18795,18799,18812,18816,18821,18828,18832,18845,18849,18853,18857,18861,18869,18873,18881,18885,18889,18897,18901,18906,18910,18917,18921,18934,18938,18946],{"__ignoreMap":143},[147,18770,18771,18773],{"class":149,"line":150},[147,18772,14967],{"class":397},[147,18774,15444],{"class":2237},[147,18776,18777],{"class":149,"line":312},[147,18778,1820],{"class":157},[147,18780,18781],{"class":149,"line":1454},[147,18782,14989],{"class":397},[147,18784,18785],{"class":149,"line":1469},[147,18786,18787],{"class":458},"    \u002F\u002F构造函数\n",[147,18789,18790,18793],{"class":149,"line":1475},[147,18791,18792],{"class":2237},"    Person",[147,18794,2250],{"class":157},[147,18796,18797],{"class":149,"line":1489},[147,18798,2304],{"class":157},[147,18800,18801,18803,18805,18808,18810],{"class":149,"line":1495},[147,18802,9943],{"class":157},[147,18804,1443],{"class":397},[147,18806,18807],{"class":504}," \"Person的构造函数调用\"",[147,18809,1719],{"class":397},[147,18811,9114],{"class":157},[147,18813,18814],{"class":149,"line":1586},[147,18815,2461],{"class":157},[147,18817,18818],{"class":149,"line":1592},[147,18819,18820],{"class":458},"    \u002F\u002F析构函数\n",[147,18822,18823,18826],{"class":149,"line":1604},[147,18824,18825],{"class":2237},"    ~Person",[147,18827,2250],{"class":157},[147,18829,18830],{"class":149,"line":1886},[147,18831,2304],{"class":157},[147,18833,18834,18836,18838,18841,18843],{"class":149,"line":1891},[147,18835,9943],{"class":157},[147,18837,1443],{"class":397},[147,18839,18840],{"class":504}," \"Person的析构函数调用\"",[147,18842,1719],{"class":397},[147,18844,9114],{"class":157},[147,18846,18847],{"class":149,"line":1897},[147,18848,2461],{"class":157},[147,18850,18851],{"class":149,"line":1902},[147,18852,2674],{"emptyLinePlaceholder":324},[147,18854,18855],{"class":149,"line":1916},[147,18856,4269],{"class":157},[147,18858,18859],{"class":149,"line":1921},[147,18860,2674],{"emptyLinePlaceholder":324},[147,18862,18863,18865,18867],{"class":149,"line":1927},[147,18864,5638],{"class":397},[147,18866,5862],{"class":2237},[147,18868,2250],{"class":157},[147,18870,18871],{"class":149,"line":1948},[147,18872,1820],{"class":157},[147,18874,18875,18878],{"class":149,"line":1953},[147,18876,18877],{"class":157},"    Person p;",[147,18879,18880],{"class":458},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[147,18882,18883],{"class":149,"line":1967},[147,18884,1839],{"class":157},[147,18886,18887],{"class":149,"line":1972},[147,18888,2674],{"emptyLinePlaceholder":324},[147,18890,18891,18893,18895],{"class":149,"line":2001},[147,18892,404],{"class":397},[147,18894,2247],{"class":2237},[147,18896,11127],{"class":157},[147,18898,18899],{"class":149,"line":2006},[147,18900,13484],{"class":157},[147,18902,18903],{"class":149,"line":2023},[147,18904,18905],{"class":458},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[147,18907,18908],{"class":149,"line":2028},[147,18909,2674],{"emptyLinePlaceholder":324},[147,18911,18912,18914],{"class":149,"line":2033},[147,18913,18877],{"class":157},[147,18915,18916],{"class":458},"\u002F\u002F只有构造函数\n",[147,18918,18919],{"class":149,"line":2038},[147,18920,2674],{"emptyLinePlaceholder":324},[147,18922,18923,18925,18927,18929,18931],{"class":149,"line":2052},[147,18924,2577],{"class":2237},[147,18926,401],{"class":157},[147,18928,2582],{"class":504},[147,18930,6240],{"class":157},[147,18932,18933],{"class":458},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[147,18935,18936],{"class":149,"line":2057},[147,18937,2674],{"emptyLinePlaceholder":324},[147,18939,18940,18942,18944],{"class":149,"line":2851},[147,18941,4364],{"class":397},[147,18943,4367],{"class":448},[147,18945,1565],{"class":157},[147,18947,18948],{"class":149,"line":2865},[147,18949,1839],{"class":157},[19,18951,18952],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[367,18954,18956],{"id":18955},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,18958,18959],{},"两种分类方式：",[19,18961,18962],{},"​\t按参数分为： 有参构造和无参构造",[19,18964,18965],{},"​\t按类型分为： 普通构造和拷贝构造",[19,18967,18968],{},"三种调用方式：",[19,18970,18971],{},"​\t括号法",[19,18973,18974],{},"​\t显示法",[19,18976,18977],{},"​\t隐式转换法",[138,18979,18981],{"className":388,"code":18980,"language":390,"meta":143,"style":143},"#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",[51,18982,18983,18989,18999,19004,19009,19014,19019,19023,19031,19035,19039,19043,19049,19053,19066,19070,19082,19086,19095,19108,19112,19116,19122,19126,19139,19143,19148,19164,19168,19173,19182,19195,19199,19205,19209,19214,19222,19226,19231,19235,19243,19247,19252,19257,19262,19267,19272,19276,19281,19286,19291,19296,19300,19305,19310,19326,19338,19343,19347,19352,19357,19362,19366,19371,19385,19398,19402,19410,19414,19420,19426,19434],{"__ignoreMap":143},[147,18984,18985,18987],{"class":149,"line":150},[147,18986,2223],{"class":397},[147,18988,2226],{"class":504},[147,18990,18991,18993,18995,18997],{"class":149,"line":312},[147,18992,2231],{"class":397},[147,18994,2234],{"class":397},[147,18996,2238],{"class":2237},[147,18998,1565],{"class":157},[147,19000,19001],{"class":149,"line":1454},[147,19002,19003],{"class":458},"\u002F\u002F1.构造函数的分类及调用\n",[147,19005,19006],{"class":149,"line":1469},[147,19007,19008],{"class":458},"\u002F\u002F分类\n",[147,19010,19011],{"class":149,"line":1475},[147,19012,19013],{"class":458},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[147,19015,19016],{"class":149,"line":1489},[147,19017,19018],{"class":458},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[147,19020,19021],{"class":149,"line":1495},[147,19022,2674],{"emptyLinePlaceholder":324},[147,19024,19025,19027,19029],{"class":149,"line":1586},[147,19026,14967],{"class":397},[147,19028,15842],{"class":2237},[147,19030,2948],{"class":157},[147,19032,19033],{"class":149,"line":1592},[147,19034,1820],{"class":157},[147,19036,19037],{"class":149,"line":1604},[147,19038,14989],{"class":397},[147,19040,19041],{"class":149,"line":1886},[147,19042,18787],{"class":458},[147,19044,19045,19047],{"class":149,"line":1891},[147,19046,18792],{"class":2237},[147,19048,2250],{"class":157},[147,19050,19051],{"class":149,"line":1897},[147,19052,2304],{"class":157},[147,19054,19055,19057,19059,19062,19064],{"class":149,"line":1902},[147,19056,3725],{"class":157},[147,19058,1443],{"class":397},[147,19060,19061],{"class":504},"\"Person构造函数无参构造\"",[147,19063,1443],{"class":397},[147,19065,1466],{"class":157},[147,19067,19068],{"class":149,"line":1916},[147,19069,2461],{"class":157},[147,19071,19072,19074,19076,19078,19080],{"class":149,"line":1921},[147,19073,18792],{"class":2237},[147,19075,401],{"class":157},[147,19077,404],{"class":397},[147,19079,1673],{"class":5490},[147,19081,407],{"class":157},[147,19083,19084],{"class":149,"line":1927},[147,19085,2304],{"class":157},[147,19087,19088,19091,19093],{"class":149,"line":1948},[147,19089,19090],{"class":157},"        age",[147,19092,445],{"class":397},[147,19094,6471],{"class":157},[147,19096,19097,19099,19101,19104,19106],{"class":149,"line":1953},[147,19098,3725],{"class":157},[147,19100,1443],{"class":397},[147,19102,19103],{"class":504},"\"Person构造函数有参构造\"",[147,19105,1443],{"class":397},[147,19107,1466],{"class":157},[147,19109,19110],{"class":149,"line":1967},[147,19111,2461],{"class":157},[147,19113,19114],{"class":149,"line":1972},[147,19115,18820],{"class":458},[147,19117,19118,19120],{"class":149,"line":2001},[147,19119,18825],{"class":2237},[147,19121,2250],{"class":157},[147,19123,19124],{"class":149,"line":2006},[147,19125,2304],{"class":157},[147,19127,19128,19130,19132,19135,19137],{"class":149,"line":2023},[147,19129,3725],{"class":157},[147,19131,1443],{"class":397},[147,19133,19134],{"class":504},"\"Person析构函数被调用\"",[147,19136,1443],{"class":397},[147,19138,1466],{"class":157},[147,19140,19141],{"class":149,"line":2028},[147,19142,2461],{"class":157},[147,19144,19145],{"class":149,"line":2033},[147,19146,19147],{"class":458},"    \u002F\u002F拷贝构造函数\n",[147,19149,19150,19152,19154,19156,19158,19160,19162],{"class":149,"line":2038},[147,19151,18792],{"class":2237},[147,19153,401],{"class":157},[147,19155,7066],{"class":397},[147,19157,15842],{"class":2237},[147,19159,10858],{"class":397},[147,19161,19],{"class":5490},[147,19163,407],{"class":157},[147,19165,19166],{"class":149,"line":2052},[147,19167,2304],{"class":157},[147,19169,19170],{"class":149,"line":2057},[147,19171,19172],{"class":458},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[147,19174,19175,19177,19179],{"class":149,"line":2851},[147,19176,19090],{"class":157},[147,19178,445],{"class":397},[147,19180,19181],{"class":157},"p.age;\n",[147,19183,19184,19186,19188,19191,19193],{"class":149,"line":2865},[147,19185,3725],{"class":157},[147,19187,1443],{"class":397},[147,19189,19190],{"class":504},"\"Person拷贝构造函数被调用\"",[147,19192,1443],{"class":397},[147,19194,1466],{"class":157},[147,19196,19197],{"class":149,"line":2873},[147,19198,2461],{"class":157},[147,19200,19201,19203],{"class":149,"line":2878},[147,19202,2259],{"class":397},[147,19204,8071],{"class":157},[147,19206,19207],{"class":149,"line":2884},[147,19208,4269],{"class":157},[147,19210,19211],{"class":149,"line":2890},[147,19212,19213],{"class":458},"\u002F\u002F调用\n",[147,19215,19216,19218,19220],{"class":149,"line":2895},[147,19217,5638],{"class":397},[147,19219,5862],{"class":2237},[147,19221,2250],{"class":157},[147,19223,19224],{"class":149,"line":8222},[147,19225,1820],{"class":157},[147,19227,19228],{"class":149,"line":8246},[147,19229,19230],{"class":458},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[147,19232,19233],{"class":149,"line":8251},[147,19234,1839],{"class":157},[147,19236,19237,19239,19241],{"class":149,"line":8257},[147,19238,5638],{"class":397},[147,19240,5931],{"class":2237},[147,19242,2250],{"class":157},[147,19244,19245],{"class":149,"line":8284},[147,19246,1820],{"class":157},[147,19248,19249],{"class":149,"line":8289},[147,19250,19251],{"class":458},"    \u002F\u002F1.括号法\n",[147,19253,19254],{"class":149,"line":8295},[147,19255,19256],{"class":458},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[147,19258,19259],{"class":149,"line":8307},[147,19260,19261],{"class":458},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[147,19263,19264],{"class":149,"line":8319},[147,19265,19266],{"class":458},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[147,19268,19269],{"class":149,"line":8331},[147,19270,19271],{"class":458},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[147,19273,19274],{"class":149,"line":9990},[147,19275,2674],{"emptyLinePlaceholder":324},[147,19277,19278],{"class":149,"line":10015},[147,19279,19280],{"class":458},"    \u002F\u002F注意事项\n",[147,19282,19283],{"class":149,"line":10038},[147,19284,19285],{"class":458},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[147,19287,19288],{"class":149,"line":10062},[147,19289,19290],{"class":458},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[147,19292,19293],{"class":149,"line":10067},[147,19294,19295],{"class":458},"    \u002F\u002F Person p4();\n",[147,19297,19298],{"class":149,"line":10072},[147,19299,2674],{"emptyLinePlaceholder":324},[147,19301,19302],{"class":149,"line":10077},[147,19303,19304],{"class":458},"    \u002F\u002F2.显示法\n",[147,19306,19307],{"class":149,"line":10086},[147,19308,19309],{"class":157},"    Person p1;\n",[147,19311,19312,19315,19317,19320,19322,19324],{"class":149,"line":10091},[147,19313,19314],{"class":157},"    Person p2",[147,19316,445],{"class":397},[147,19318,19319],{"class":2237},"Person",[147,19321,401],{"class":157},[147,19323,845],{"class":448},[147,19325,2993],{"class":157},[147,19327,19328,19331,19333,19335],{"class":149,"line":10097},[147,19329,19330],{"class":157},"    Person p3",[147,19332,445],{"class":397},[147,19334,19319],{"class":2237},[147,19336,19337],{"class":157},"(p2);\n",[147,19339,19340],{"class":149,"line":10118},[147,19341,19342],{"class":458},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[147,19344,19345],{"class":149,"line":10124},[147,19346,2674],{"emptyLinePlaceholder":324},[147,19348,19349],{"class":149,"line":10138},[147,19350,19351],{"class":458},"    \u002F\u002F 注意事项2\n",[147,19353,19354],{"class":149,"line":10144},[147,19355,19356],{"class":458},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[147,19358,19359],{"class":149,"line":10171},[147,19360,19361],{"class":458},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[147,19363,19364],{"class":149,"line":10180},[147,19365,2674],{"emptyLinePlaceholder":324},[147,19367,19368],{"class":149,"line":10186},[147,19369,19370],{"class":458},"    \u002F\u002F3.隐士转换法\n",[147,19372,19373,19376,19378,19380,19382],{"class":149,"line":10194},[147,19374,19375],{"class":157},"    Person p4",[147,19377,445],{"class":397},[147,19379,845],{"class":448},[147,19381,455],{"class":157},[147,19383,19384],{"class":458},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[147,19386,19387,19390,19392,19395],{"class":149,"line":10199},[147,19388,19389],{"class":157},"    Person p5",[147,19391,445],{"class":397},[147,19393,19394],{"class":157},"p4;",[147,19396,19397],{"class":458}," \u002F\u002F 这里会调用拷贝构造函数\n",[147,19399,19400],{"class":149,"line":16877},[147,19401,1839],{"class":157},[147,19403,19404,19406,19408],{"class":149,"line":16883},[147,19405,404],{"class":397},[147,19407,2247],{"class":2237},[147,19409,2250],{"class":157},[147,19411,19412],{"class":149,"line":16906},[147,19413,1820],{"class":157},[147,19415,19416,19418],{"class":149,"line":16912},[147,19417,5907],{"class":2237},[147,19419,5910],{"class":157},[147,19421,19422,19424],{"class":149,"line":16935},[147,19423,5976],{"class":2237},[147,19425,5910],{"class":157},[147,19427,19428,19430,19432],{"class":149,"line":16949},[147,19429,4364],{"class":397},[147,19431,4367],{"class":448},[147,19433,1565],{"class":157},[147,19435,19436],{"class":149,"line":16969},[147,19437,1839],{"class":157},[19,19439,19440,19443],{},[234,19441,19442],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[367,19445,19447],{"id":19446},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,19449,19450],{},"C++中拷贝构造函数调用时机通常有三种情况",[1406,19452,19453,19456,19459],{},[353,19454,19455],{},"使用一个已经创建完毕的对象来初始化一个新对象",[353,19457,19458],{},"值传递的方式给函数参数传值",[353,19460,19461],{},"以值方式返回局部对象",[138,19463,19465],{"className":388,"code":19464,"language":390,"meta":143,"style":143},"#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",[51,19466,19467,19473,19483,19487,19492,19496,19501,19506,19511,19517,19521,19525,19531,19535,19548,19552,19557,19569,19573,19581,19594,19598,19602,19618,19622,19631,19644,19648,19654,19658,19670,19674,19680,19684,19688,19696,19700,19713,19721,19739,19743,19748,19753,19768,19772,19785,19789,19797,19801,19805,19813,19817,19822,19831,19835,19839,19864,19874,19878,19886,19890,19901,19926,19930,19934,19938,19946,19950,19955,19960,19967,19972,19977,19982,19987,19991,19996,20000,20005,20009,20014,20019,20023,20027,20032,20037,20045],{"__ignoreMap":143},[147,19468,19469,19471],{"class":149,"line":150},[147,19470,2223],{"class":397},[147,19472,2226],{"class":504},[147,19474,19475,19477,19479,19481],{"class":149,"line":312},[147,19476,2231],{"class":397},[147,19478,2234],{"class":397},[147,19480,2238],{"class":2237},[147,19482,1565],{"class":157},[147,19484,19485],{"class":149,"line":1454},[147,19486,2674],{"emptyLinePlaceholder":324},[147,19488,19489],{"class":149,"line":1469},[147,19490,19491],{"class":458},"\u002F\u002F拷贝构造函数调用时机\n",[147,19493,19494],{"class":149,"line":1475},[147,19495,2674],{"emptyLinePlaceholder":324},[147,19497,19498],{"class":149,"line":1489},[147,19499,19500],{"class":458},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[147,19502,19503],{"class":149,"line":1495},[147,19504,19505],{"class":458},"\u002F\u002F2.值传递的方式给函数参数传值\n",[147,19507,19508],{"class":149,"line":1586},[147,19509,19510],{"class":458},"\u002F\u002F3.以值方式返回局部对象\n",[147,19512,19513,19515],{"class":149,"line":1592},[147,19514,14967],{"class":397},[147,19516,15444],{"class":2237},[147,19518,19519],{"class":149,"line":1604},[147,19520,1820],{"class":157},[147,19522,19523],{"class":149,"line":1886},[147,19524,14989],{"class":397},[147,19526,19527,19529],{"class":149,"line":1891},[147,19528,18792],{"class":2237},[147,19530,2250],{"class":157},[147,19532,19533],{"class":149,"line":1897},[147,19534,2304],{"class":157},[147,19536,19537,19539,19541,19544,19546],{"class":149,"line":1902},[147,19538,9943],{"class":157},[147,19540,1443],{"class":397},[147,19542,19543],{"class":504}," \"Person的默认构造函数调用\"",[147,19545,1719],{"class":397},[147,19547,9114],{"class":157},[147,19549,19550],{"class":149,"line":1916},[147,19551,2461],{"class":157},[147,19553,19554],{"class":149,"line":1921},[147,19555,19556],{"class":458},"    \u002F\u002F有参构造\n",[147,19558,19559,19561,19563,19565,19567],{"class":149,"line":1927},[147,19560,18792],{"class":2237},[147,19562,401],{"class":157},[147,19564,404],{"class":397},[147,19566,15962],{"class":5490},[147,19568,407],{"class":157},[147,19570,19571],{"class":149,"line":1948},[147,19572,2304],{"class":157},[147,19574,19575,19577,19579],{"class":149,"line":1953},[147,19576,16016],{"class":157},[147,19578,445],{"class":397},[147,19580,8071],{"class":157},[147,19582,19583,19585,19587,19590,19592],{"class":149,"line":1967},[147,19584,9943],{"class":157},[147,19586,1443],{"class":397},[147,19588,19589],{"class":504}," \"Person的有参构造函数调用\"",[147,19591,1719],{"class":397},[147,19593,9114],{"class":157},[147,19595,19596],{"class":149,"line":1972},[147,19597,2461],{"class":157},[147,19599,19600],{"class":149,"line":2001},[147,19601,19147],{"class":458},[147,19603,19604,19606,19608,19610,19612,19614,19616],{"class":149,"line":2006},[147,19605,18792],{"class":2237},[147,19607,401],{"class":157},[147,19609,7066],{"class":397},[147,19611,15842],{"class":2237},[147,19613,10858],{"class":397},[147,19615,19],{"class":5490},[147,19617,407],{"class":157},[147,19619,19620],{"class":149,"line":2023},[147,19621,2304],{"class":157},[147,19623,19624,19626,19628],{"class":149,"line":2028},[147,19625,16016],{"class":157},[147,19627,445],{"class":397},[147,19629,19630],{"class":157}," p.m_Age;\n",[147,19632,19633,19635,19637,19640,19642],{"class":149,"line":2033},[147,19634,9943],{"class":157},[147,19636,1443],{"class":397},[147,19638,19639],{"class":504}," \"Person的拷贝构造函数调用\"",[147,19641,1719],{"class":397},[147,19643,9114],{"class":157},[147,19645,19646],{"class":149,"line":2038},[147,19647,2461],{"class":157},[147,19649,19650,19652],{"class":149,"line":2052},[147,19651,18825],{"class":2237},[147,19653,2250],{"class":157},[147,19655,19656],{"class":149,"line":2057},[147,19657,2304],{"class":157},[147,19659,19660,19662,19664,19666,19668],{"class":149,"line":2851},[147,19661,9943],{"class":157},[147,19663,1443],{"class":397},[147,19665,18840],{"class":504},[147,19667,1719],{"class":397},[147,19669,9114],{"class":157},[147,19671,19672],{"class":149,"line":2865},[147,19673,2461],{"class":157},[147,19675,19676,19678],{"class":149,"line":2873},[147,19677,2259],{"class":397},[147,19679,15939],{"class":157},[147,19681,19682],{"class":149,"line":2878},[147,19683,4269],{"class":157},[147,19685,19686],{"class":149,"line":2884},[147,19687,19500],{"class":458},[147,19689,19690,19692,19694],{"class":149,"line":2890},[147,19691,5638],{"class":397},[147,19693,5862],{"class":2237},[147,19695,2250],{"class":157},[147,19697,19698],{"class":149,"line":2895},[147,19699,1820],{"class":157},[147,19701,19702,19705,19707,19709,19711],{"class":149,"line":8222},[147,19703,19704],{"class":157},"    Person ",[147,19706,7404],{"class":2237},[147,19708,401],{"class":157},[147,19710,1099],{"class":448},[147,19712,2993],{"class":157},[147,19714,19715,19717,19719],{"class":149,"line":8246},[147,19716,19704],{"class":157},[147,19718,7307],{"class":2237},[147,19720,17788],{"class":157},[147,19722,19723,19725,19727,19730,19732,19735,19737],{"class":149,"line":8251},[147,19724,1825],{"class":157},[147,19726,1443],{"class":397},[147,19728,19729],{"class":504},"\"P2的年龄为：\"",[147,19731,1443],{"class":397},[147,19733,19734],{"class":157},"p2.m_Age",[147,19736,1443],{"class":397},[147,19738,1466],{"class":157},[147,19740,19741],{"class":149,"line":8257},[147,19742,1839],{"class":157},[147,19744,19745],{"class":149,"line":8284},[147,19746,19747],{"class":458},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[147,19749,19750],{"class":149,"line":8289},[147,19751,19752],{"class":458},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[147,19754,19755,19757,19760,19762,19764,19766],{"class":149,"line":8295},[147,19756,5638],{"class":397},[147,19758,19759],{"class":2237}," doWork",[147,19761,401],{"class":157},[147,19763,19319],{"class":2237},[147,19765,7099],{"class":5490},[147,19767,407],{"class":157},[147,19769,19770],{"class":149,"line":8307},[147,19771,1820],{"class":157},[147,19773,19774,19776,19778,19781,19783],{"class":149,"line":8319},[147,19775,6803],{"class":157},[147,19777,1443],{"class":397},[147,19779,19780],{"class":504}," \"doWork函数调用\"",[147,19782,1719],{"class":397},[147,19784,9114],{"class":157},[147,19786,19787],{"class":149,"line":8331},[147,19788,1839],{"class":157},[147,19790,19791,19793,19795],{"class":149,"line":9990},[147,19792,5638],{"class":397},[147,19794,5931],{"class":2237},[147,19796,2250],{"class":157},[147,19798,19799],{"class":149,"line":10015},[147,19800,1820],{"class":157},[147,19802,19803],{"class":149,"line":10038},[147,19804,15586],{"class":157},[147,19806,19807,19810],{"class":149,"line":10062},[147,19808,19809],{"class":2237},"    doWork",[147,19811,19812],{"class":157},"(p);\n",[147,19814,19815],{"class":149,"line":10067},[147,19816,1839],{"class":157},[147,19818,19819],{"class":149,"line":10072},[147,19820,19821],{"class":458},"\u002F\u002F 3.以值方式返回局部对象\n",[147,19823,19824,19826,19829],{"class":149,"line":10077},[147,19825,19319],{"class":2237},[147,19827,19828],{"class":2237}," doWork2",[147,19830,2250],{"class":157},[147,19832,19833],{"class":149,"line":10086},[147,19834,1820],{"class":157},[147,19836,19837],{"class":149,"line":10091},[147,19838,19309],{"class":157},[147,19840,19841,19843,19845,19847,19849,19851,19853,19855,19857,19859,19861],{"class":149,"line":10097},[147,19842,1825],{"class":157},[147,19844,1443],{"class":397},[147,19846,401],{"class":157},[147,19848,404],{"class":397},[147,19850,6792],{"class":397},[147,19852,828],{"class":157},[147,19854,752],{"class":397},[147,19856,7404],{"class":157},[147,19858,1443],{"class":397},[147,19860,1513],{"class":157},[147,19862,19863],{"class":458},"\u002F\u002F打印p1的地址\n",[147,19865,19866,19868,19871],{"class":149,"line":10118},[147,19867,4364],{"class":397},[147,19869,19870],{"class":157}," p1;",[147,19872,19873],{"class":458},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[147,19875,19876],{"class":149,"line":10124},[147,19877,1839],{"class":157},[147,19879,19880,19882,19884],{"class":149,"line":10138},[147,19881,5638],{"class":397},[147,19883,6003],{"class":2237},[147,19885,2250],{"class":157},[147,19887,19888],{"class":149,"line":10144},[147,19889,1820],{"class":157},[147,19891,19892,19895,19897,19899],{"class":149,"line":10171},[147,19893,19894],{"class":157},"    Person p ",[147,19896,445],{"class":397},[147,19898,19828],{"class":2237},[147,19900,5910],{"class":157},[147,19902,19903,19905,19907,19909,19911,19913,19915,19917,19919,19921,19923],{"class":149,"line":10180},[147,19904,1825],{"class":157},[147,19906,1443],{"class":397},[147,19908,401],{"class":157},[147,19910,404],{"class":397},[147,19912,6792],{"class":397},[147,19914,828],{"class":157},[147,19916,752],{"class":397},[147,19918,19],{"class":157},[147,19920,1443],{"class":397},[147,19922,1513],{"class":157},[147,19924,19925],{"class":458},"\u002F\u002F打印p的地址\n",[147,19927,19928],{"class":149,"line":10186},[147,19929,1839],{"class":157},[147,19931,19932],{"class":149,"line":10194},[147,19933,2674],{"emptyLinePlaceholder":324},[147,19935,19936],{"class":149,"line":10199},[147,19937,2674],{"emptyLinePlaceholder":324},[147,19939,19940,19942,19944],{"class":149,"line":16877},[147,19941,404],{"class":397},[147,19943,2247],{"class":2237},[147,19945,2250],{"class":157},[147,19947,19948],{"class":149,"line":16883},[147,19949,1820],{"class":157},[147,19951,19952],{"class":149,"line":16906},[147,19953,19954],{"class":458},"    \u002F\u002F test01();\n",[147,19956,19957],{"class":149,"line":16912},[147,19958,19959],{"class":458},"    \u002F\u002F test02();\n",[147,19961,19962,19965],{"class":149,"line":16935},[147,19963,19964],{"class":2237},"    test03",[147,19966,5910],{"class":157},[147,19968,19969],{"class":149,"line":16949},[147,19970,19971],{"class":458},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[147,19973,19974],{"class":149,"line":16969},[147,19975,19976],{"class":458},"\u002F\u002F 输出结果如下：\n",[147,19978,19979],{"class":149,"line":16975},[147,19980,19981],{"class":458},"\u002F\u002F Person的默认构造函数调用\n",[147,19983,19984],{"class":149,"line":16986},[147,19985,19986],{"class":458},"\u002F\u002F 0x7fffffffceec\n",[147,19988,19989],{"class":149,"line":17009},[147,19990,19986],{"class":458},[147,19992,19993],{"class":149,"line":17031},[147,19994,19995],{"class":458},"\u002F\u002F Person的析构函数调用\n",[147,19997,19998],{"class":149,"line":17036},[147,19999,2674],{"emptyLinePlaceholder":324},[147,20001,20002],{"class":149,"line":17042},[147,20003,20004],{"class":458},"\u002F\u002F 之前的输出结果如下：\n",[147,20006,20007],{"class":149,"line":17056},[147,20008,19981],{"class":458},[147,20010,20011],{"class":149,"line":17069},[147,20012,20013],{"class":458},"\u002F\u002F 地址\n",[147,20015,20016],{"class":149,"line":17074},[147,20017,20018],{"class":458},"\u002F\u002F Person的拷贝构造函数调用\n",[147,20020,20021],{"class":149,"line":17088},[147,20022,19995],{"class":458},[147,20024,20025],{"class":149,"line":17093},[147,20026,20013],{"class":458},[147,20028,20029],{"class":149,"line":17099},[147,20030,20031],{"class":458},"\u002F\u002F (这两次输出的地址也是不同的) \n",[147,20033,20034],{"class":149,"line":17104},[147,20035,20036],{"class":458},"\u002F\u002F Person的析构函数调用     \n",[147,20038,20039,20041,20043],{"class":149,"line":17118},[147,20040,4364],{"class":397},[147,20042,4367],{"class":448},[147,20044,1565],{"class":157},[147,20046,20047],{"class":149,"line":17123},[147,20048,1839],{"class":157},[19,20050,20051],{},"简化版理解",[138,20053,20055],{"className":388,"code":20054,"language":390,"meta":143,"style":143},"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",[51,20056,20057,20065,20069,20075,20088,20099,20103,20115,20128,20136,20140,20156,20169,20178,20182,20187,20193,20206,20210,20214,20221,20225,20229,20234,20242,20246,20262,20275,20288,20292,20297,20305,20309,20313,20318,20323,20339,20347,20354,20360,20364,20368,20373,20381,20385,20389,20412,20419,20423,20427,20435,20439,20449,20471,20475,20479,20483,20491,20495,20500,20505,20511,20515,20525,20529,20537],{"__ignoreMap":143},[147,20058,20059,20061,20063],{"class":149,"line":150},[147,20060,14967],{"class":397},[147,20062,15842],{"class":2237},[147,20064,15845],{"class":157},[147,20066,20067],{"class":149,"line":312},[147,20068,14989],{"class":397},[147,20070,20071,20073],{"class":149,"line":1454},[147,20072,18792],{"class":2237},[147,20074,11127],{"class":157},[147,20076,20077,20079,20081,20084,20086],{"class":149,"line":1469},[147,20078,9943],{"class":157},[147,20080,1443],{"class":397},[147,20082,20083],{"class":504}," \"无参构造函数!\"",[147,20085,1719],{"class":397},[147,20087,9114],{"class":157},[147,20089,20090,20093,20095,20097],{"class":149,"line":1475},[147,20091,20092],{"class":157},"        mAge ",[147,20094,445],{"class":397},[147,20096,4367],{"class":448},[147,20098,1565],{"class":157},[147,20100,20101],{"class":149,"line":1489},[147,20102,2461],{"class":157},[147,20104,20105,20107,20109,20111,20113],{"class":149,"line":1495},[147,20106,18792],{"class":2237},[147,20108,401],{"class":157},[147,20110,404],{"class":397},[147,20112,15962],{"class":5490},[147,20114,12716],{"class":157},[147,20116,20117,20119,20121,20124,20126],{"class":149,"line":1586},[147,20118,9943],{"class":157},[147,20120,1443],{"class":397},[147,20122,20123],{"class":504}," \"有参构造函数!\"",[147,20125,1719],{"class":397},[147,20127,9114],{"class":157},[147,20129,20130,20132,20134],{"class":149,"line":1592},[147,20131,20092],{"class":157},[147,20133,445],{"class":397},[147,20135,8071],{"class":157},[147,20137,20138],{"class":149,"line":1604},[147,20139,2461],{"class":157},[147,20141,20142,20144,20146,20148,20150,20152,20154],{"class":149,"line":1886},[147,20143,18792],{"class":2237},[147,20145,401],{"class":157},[147,20147,7066],{"class":397},[147,20149,15842],{"class":2237},[147,20151,752],{"class":397},[147,20153,7099],{"class":5490},[147,20155,12716],{"class":157},[147,20157,20158,20160,20162,20165,20167],{"class":149,"line":1891},[147,20159,9943],{"class":157},[147,20161,1443],{"class":397},[147,20163,20164],{"class":504}," \"拷贝构造函数!\"",[147,20166,1719],{"class":397},[147,20168,9114],{"class":157},[147,20170,20171,20173,20175],{"class":149,"line":1897},[147,20172,20092],{"class":157},[147,20174,445],{"class":397},[147,20176,20177],{"class":157}," p.mAge;\n",[147,20179,20180],{"class":149,"line":1902},[147,20181,2461],{"class":157},[147,20183,20184],{"class":149,"line":1916},[147,20185,20186],{"class":458},"    \u002F\u002F析构函数在释放内存之前调用\n",[147,20188,20189,20191],{"class":149,"line":1921},[147,20190,18825],{"class":2237},[147,20192,11127],{"class":157},[147,20194,20195,20197,20199,20202,20204],{"class":149,"line":1927},[147,20196,9943],{"class":157},[147,20198,1443],{"class":397},[147,20200,20201],{"class":504}," \"析构函数!\"",[147,20203,1719],{"class":397},[147,20205,9114],{"class":157},[147,20207,20208],{"class":149,"line":1948},[147,20209,2461],{"class":157},[147,20211,20212],{"class":149,"line":1953},[147,20213,14989],{"class":397},[147,20215,20216,20218],{"class":149,"line":1967},[147,20217,2259],{"class":397},[147,20219,20220],{"class":157}," mAge;\n",[147,20222,20223],{"class":149,"line":1972},[147,20224,4269],{"class":157},[147,20226,20227],{"class":149,"line":2001},[147,20228,2674],{"emptyLinePlaceholder":324},[147,20230,20231],{"class":149,"line":2006},[147,20232,20233],{"class":458},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[147,20235,20236,20238,20240],{"class":149,"line":2023},[147,20237,5638],{"class":397},[147,20239,5862],{"class":2237},[147,20241,11127],{"class":157},[147,20243,20244],{"class":149,"line":2028},[147,20245,2674],{"emptyLinePlaceholder":324},[147,20247,20248,20250,20253,20255,20257,20259],{"class":149,"line":2033},[147,20249,19704],{"class":157},[147,20251,20252],{"class":2237},"man",[147,20254,401],{"class":157},[147,20256,710],{"class":448},[147,20258,6240],{"class":157},[147,20260,20261],{"class":458}," \u002F\u002Fp对象已经创建完毕\n",[147,20263,20264,20266,20269,20272],{"class":149,"line":2038},[147,20265,19704],{"class":157},[147,20267,20268],{"class":2237},"newman",[147,20270,20271],{"class":157},"(man);",[147,20273,20274],{"class":458}," \u002F\u002F调用拷贝构造函数\n",[147,20276,20277,20280,20282,20285],{"class":149,"line":2052},[147,20278,20279],{"class":157},"    Person newman2 ",[147,20281,445],{"class":397},[147,20283,20284],{"class":157}," man;",[147,20286,20287],{"class":458}," \u002F\u002F拷贝构造\n",[147,20289,20290],{"class":149,"line":2057},[147,20291,2674],{"emptyLinePlaceholder":324},[147,20293,20294],{"class":149,"line":2851},[147,20295,20296],{"class":458},"    \u002F\u002FPerson newman3;\n",[147,20298,20299,20302],{"class":149,"line":2865},[147,20300,20301],{"class":458},"    \u002F\u002Fnewman3 = man;",[147,20303,20304],{"class":458}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[147,20306,20307],{"class":149,"line":2873},[147,20308,1839],{"class":157},[147,20310,20311],{"class":149,"line":2878},[147,20312,2674],{"emptyLinePlaceholder":324},[147,20314,20315],{"class":149,"line":2884},[147,20316,20317],{"class":458},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[147,20319,20320],{"class":149,"line":2890},[147,20321,20322],{"class":458},"\u002F\u002F相当于Person p1 = p;\n",[147,20324,20325,20327,20329,20331,20333,20336],{"class":149,"line":2895},[147,20326,5638],{"class":397},[147,20328,19759],{"class":2237},[147,20330,401],{"class":157},[147,20332,19319],{"class":2237},[147,20334,20335],{"class":5490}," p1",[147,20337,20338],{"class":157},") {}\n",[147,20340,20341,20343,20345],{"class":149,"line":8222},[147,20342,5638],{"class":397},[147,20344,5931],{"class":2237},[147,20346,11127],{"class":157},[147,20348,20349,20351],{"class":149,"line":8246},[147,20350,18877],{"class":157},[147,20352,20353],{"class":458}," \u002F\u002F无参构造函数\n",[147,20355,20356,20358],{"class":149,"line":8251},[147,20357,19809],{"class":2237},[147,20359,19812],{"class":157},[147,20361,20362],{"class":149,"line":8257},[147,20363,1839],{"class":157},[147,20365,20366],{"class":149,"line":8284},[147,20367,2674],{"emptyLinePlaceholder":324},[147,20369,20370],{"class":149,"line":8289},[147,20371,20372],{"class":458},"\u002F\u002F3. 以值方式返回局部对象\n",[147,20374,20375,20377,20379],{"class":149,"line":8295},[147,20376,19319],{"class":2237},[147,20378,19828],{"class":2237},[147,20380,2250],{"class":157},[147,20382,20383],{"class":149,"line":8307},[147,20384,1820],{"class":157},[147,20386,20387],{"class":149,"line":8319},[147,20388,19309],{"class":157},[147,20390,20391,20393,20395,20397,20399,20401,20403,20405,20408,20410],{"class":149,"line":8331},[147,20392,6803],{"class":157},[147,20394,1443],{"class":397},[147,20396,1932],{"class":157},[147,20398,404],{"class":397},[147,20400,6792],{"class":397},[147,20402,828],{"class":157},[147,20404,752],{"class":397},[147,20406,20407],{"class":157},"p1 ",[147,20409,1443],{"class":397},[147,20411,9114],{"class":157},[147,20413,20414,20416],{"class":149,"line":9990},[147,20415,4364],{"class":397},[147,20417,20418],{"class":157}," p1;\n",[147,20420,20421],{"class":149,"line":10015},[147,20422,1839],{"class":157},[147,20424,20425],{"class":149,"line":10038},[147,20426,2674],{"emptyLinePlaceholder":324},[147,20428,20429,20431,20433],{"class":149,"line":10062},[147,20430,5638],{"class":397},[147,20432,6003],{"class":2237},[147,20434,2250],{"class":157},[147,20436,20437],{"class":149,"line":10067},[147,20438,1820],{"class":157},[147,20440,20441,20443,20445,20447],{"class":149,"line":10072},[147,20442,19894],{"class":157},[147,20444,445],{"class":397},[147,20446,19828],{"class":2237},[147,20448,5910],{"class":157},[147,20450,20451,20453,20455,20457,20459,20461,20463,20465,20467,20469],{"class":149,"line":10077},[147,20452,6803],{"class":157},[147,20454,1443],{"class":397},[147,20456,1932],{"class":157},[147,20458,404],{"class":397},[147,20460,6792],{"class":397},[147,20462,828],{"class":157},[147,20464,752],{"class":397},[147,20466,11722],{"class":157},[147,20468,1443],{"class":397},[147,20470,9114],{"class":157},[147,20472,20473],{"class":149,"line":10086},[147,20474,1839],{"class":157},[147,20476,20477],{"class":149,"line":10091},[147,20478,2674],{"emptyLinePlaceholder":324},[147,20480,20481],{"class":149,"line":10097},[147,20482,2674],{"emptyLinePlaceholder":324},[147,20484,20485,20487,20489],{"class":149,"line":10118},[147,20486,404],{"class":397},[147,20488,2247],{"class":2237},[147,20490,11127],{"class":157},[147,20492,20493],{"class":149,"line":10124},[147,20494,2674],{"emptyLinePlaceholder":324},[147,20496,20497],{"class":149,"line":10138},[147,20498,20499],{"class":458},"    \u002F\u002Ftest01();\n",[147,20501,20502],{"class":149,"line":10144},[147,20503,20504],{"class":458},"    \u002F\u002Ftest02();\n",[147,20506,20507,20509],{"class":149,"line":10171},[147,20508,19964],{"class":2237},[147,20510,5910],{"class":157},[147,20512,20513],{"class":149,"line":10180},[147,20514,2674],{"emptyLinePlaceholder":324},[147,20516,20517,20519,20521,20523],{"class":149,"line":10186},[147,20518,2577],{"class":2237},[147,20520,401],{"class":157},[147,20522,2582],{"class":504},[147,20524,2993],{"class":157},[147,20526,20527],{"class":149,"line":10194},[147,20528,2674],{"emptyLinePlaceholder":324},[147,20530,20531,20533,20535],{"class":149,"line":10199},[147,20532,4364],{"class":397},[147,20534,4367],{"class":448},[147,20536,1565],{"class":157},[147,20538,20539],{"class":149,"line":16877},[147,20540,1839],{"class":157},[367,20542,20544],{"id":20543},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,20546,20547],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,20549,20550],{},"1．默认构造函数(无参，函数体为空)",[19,20552,20553],{},"2．默认析构函数(无参，函数体为空)",[19,20555,20556],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,20558,20559],{},"构造函数调用规则如下：",[1406,20561,20562,20565],{},[353,20563,20564],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[353,20566,20567],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[138,20569,20571],{"className":388,"code":20570,"language":390,"meta":143,"style":143},"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",[51,20572,20573,20581,20585,20590,20596,20608,20612,20617,20629,20638,20650,20654,20658,20674,20683,20695,20699,20703,20709,20721,20725,20729,20735,20739,20743,20751,20755,20767,20772,20780,20784,20802,20806,20810,20818,20822,20827,20835,20850,20863,20867,20872,20879,20895,20908,20912,20916,20924,20928,20934,20938,20948,20952,20960],{"__ignoreMap":143},[147,20574,20575,20577,20579],{"class":149,"line":150},[147,20576,14967],{"class":397},[147,20578,15842],{"class":2237},[147,20580,15845],{"class":157},[147,20582,20583],{"class":149,"line":312},[147,20584,14989],{"class":397},[147,20586,20587],{"class":149,"line":1454},[147,20588,20589],{"class":458},"    \u002F\u002F无参（默认）构造函数\n",[147,20591,20592,20594],{"class":149,"line":1469},[147,20593,18792],{"class":2237},[147,20595,11127],{"class":157},[147,20597,20598,20600,20602,20604,20606],{"class":149,"line":1475},[147,20599,9943],{"class":157},[147,20601,1443],{"class":397},[147,20603,20083],{"class":504},[147,20605,1719],{"class":397},[147,20607,9114],{"class":157},[147,20609,20610],{"class":149,"line":1489},[147,20611,2461],{"class":157},[147,20613,20614],{"class":149,"line":1495},[147,20615,20616],{"class":458},"    \u002F\u002F有参构造函数\n",[147,20618,20619,20621,20623,20625,20627],{"class":149,"line":1586},[147,20620,18792],{"class":2237},[147,20622,401],{"class":157},[147,20624,404],{"class":397},[147,20626,1673],{"class":5490},[147,20628,12716],{"class":157},[147,20630,20631,20634,20636],{"class":149,"line":1592},[147,20632,20633],{"class":157},"        age ",[147,20635,445],{"class":397},[147,20637,1707],{"class":157},[147,20639,20640,20642,20644,20646,20648],{"class":149,"line":1604},[147,20641,9943],{"class":157},[147,20643,1443],{"class":397},[147,20645,20123],{"class":504},[147,20647,1719],{"class":397},[147,20649,9114],{"class":157},[147,20651,20652],{"class":149,"line":1886},[147,20653,2461],{"class":157},[147,20655,20656],{"class":149,"line":1891},[147,20657,19147],{"class":458},[147,20659,20660,20662,20664,20666,20668,20670,20672],{"class":149,"line":1897},[147,20661,18792],{"class":2237},[147,20663,401],{"class":157},[147,20665,7066],{"class":397},[147,20667,15842],{"class":2237},[147,20669,752],{"class":397},[147,20671,7099],{"class":5490},[147,20673,12716],{"class":157},[147,20675,20676,20678,20680],{"class":149,"line":1902},[147,20677,20633],{"class":157},[147,20679,445],{"class":397},[147,20681,20682],{"class":157}," p.age;\n",[147,20684,20685,20687,20689,20691,20693],{"class":149,"line":1916},[147,20686,9943],{"class":157},[147,20688,1443],{"class":397},[147,20690,20164],{"class":504},[147,20692,1719],{"class":397},[147,20694,9114],{"class":157},[147,20696,20697],{"class":149,"line":1921},[147,20698,2461],{"class":157},[147,20700,20701],{"class":149,"line":1927},[147,20702,18820],{"class":458},[147,20704,20705,20707],{"class":149,"line":1948},[147,20706,18825],{"class":2237},[147,20708,11127],{"class":157},[147,20710,20711,20713,20715,20717,20719],{"class":149,"line":1953},[147,20712,9943],{"class":157},[147,20714,1443],{"class":397},[147,20716,20201],{"class":504},[147,20718,1719],{"class":397},[147,20720,9114],{"class":157},[147,20722,20723],{"class":149,"line":1967},[147,20724,2461],{"class":157},[147,20726,20727],{"class":149,"line":1972},[147,20728,14989],{"class":397},[147,20730,20731,20733],{"class":149,"line":2001},[147,20732,2259],{"class":397},[147,20734,8071],{"class":157},[147,20736,20737],{"class":149,"line":2006},[147,20738,4269],{"class":157},[147,20740,20741],{"class":149,"line":2023},[147,20742,2674],{"emptyLinePlaceholder":324},[147,20744,20745,20747,20749],{"class":149,"line":2028},[147,20746,5638],{"class":397},[147,20748,5862],{"class":2237},[147,20750,2250],{"class":157},[147,20752,20753],{"class":149,"line":2033},[147,20754,1820],{"class":157},[147,20756,20757,20759,20761,20763,20765],{"class":149,"line":2038},[147,20758,19704],{"class":157},[147,20760,7404],{"class":2237},[147,20762,401],{"class":157},[147,20764,1049],{"class":448},[147,20766,2993],{"class":157},[147,20768,20769],{"class":149,"line":2052},[147,20770,20771],{"class":458},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[147,20773,20774,20776,20778],{"class":149,"line":2057},[147,20775,19704],{"class":157},[147,20777,7307],{"class":2237},[147,20779,17788],{"class":157},[147,20781,20782],{"class":149,"line":2851},[147,20783,2674],{"emptyLinePlaceholder":324},[147,20785,20786,20788,20790,20793,20795,20798,20800],{"class":149,"line":2865},[147,20787,6803],{"class":157},[147,20789,1443],{"class":397},[147,20791,20792],{"class":504}," \"p2的年龄为： \"",[147,20794,1719],{"class":397},[147,20796,20797],{"class":157}," p2.age ",[147,20799,1443],{"class":397},[147,20801,9114],{"class":157},[147,20803,20804],{"class":149,"line":2873},[147,20805,1839],{"class":157},[147,20807,20808],{"class":149,"line":2878},[147,20809,2674],{"emptyLinePlaceholder":324},[147,20811,20812,20814,20816],{"class":149,"line":2884},[147,20813,5638],{"class":397},[147,20815,5931],{"class":2237},[147,20817,2250],{"class":157},[147,20819,20820],{"class":149,"line":2890},[147,20821,1820],{"class":157},[147,20823,20824],{"class":149,"line":2895},[147,20825,20826],{"class":458},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[147,20828,20829,20832],{"class":149,"line":8222},[147,20830,20831],{"class":157},"    Person p1;",[147,20833,20834],{"class":458}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[147,20836,20837,20839,20841,20843,20845,20847],{"class":149,"line":8246},[147,20838,19704],{"class":157},[147,20840,7307],{"class":2237},[147,20842,401],{"class":157},[147,20844,845],{"class":448},[147,20846,6240],{"class":157},[147,20848,20849],{"class":458}," \u002F\u002F用户提供的有参\n",[147,20851,20852,20854,20857,20860],{"class":149,"line":8251},[147,20853,19704],{"class":157},[147,20855,20856],{"class":2237},"p3",[147,20858,20859],{"class":157},"(p2);",[147,20861,20862],{"class":458}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[147,20864,20865],{"class":149,"line":8257},[147,20866,2674],{"emptyLinePlaceholder":324},[147,20868,20869],{"class":149,"line":8284},[147,20870,20871],{"class":458},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[147,20873,20874,20877],{"class":149,"line":8289},[147,20875,20876],{"class":157},"    Person p4;",[147,20878,20834],{"class":458},[147,20880,20881,20883,20886,20888,20890,20892],{"class":149,"line":8295},[147,20882,19704],{"class":157},[147,20884,20885],{"class":2237},"p5",[147,20887,401],{"class":157},[147,20889,845],{"class":448},[147,20891,6240],{"class":157},[147,20893,20894],{"class":458}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[147,20896,20897,20899,20902,20905],{"class":149,"line":8307},[147,20898,19704],{"class":157},[147,20900,20901],{"class":2237},"p6",[147,20903,20904],{"class":157},"(p5);",[147,20906,20907],{"class":458}," \u002F\u002F用户自己提供拷贝构造\n",[147,20909,20910],{"class":149,"line":8319},[147,20911,1839],{"class":157},[147,20913,20914],{"class":149,"line":8331},[147,20915,2674],{"emptyLinePlaceholder":324},[147,20917,20918,20920,20922],{"class":149,"line":9990},[147,20919,404],{"class":397},[147,20921,2247],{"class":2237},[147,20923,11127],{"class":157},[147,20925,20926],{"class":149,"line":10015},[147,20927,2674],{"emptyLinePlaceholder":324},[147,20929,20930,20932],{"class":149,"line":10038},[147,20931,5907],{"class":2237},[147,20933,5910],{"class":157},[147,20935,20936],{"class":149,"line":10062},[147,20937,2674],{"emptyLinePlaceholder":324},[147,20939,20940,20942,20944,20946],{"class":149,"line":10067},[147,20941,2577],{"class":2237},[147,20943,401],{"class":157},[147,20945,2582],{"class":504},[147,20947,2993],{"class":157},[147,20949,20950],{"class":149,"line":10072},[147,20951,2674],{"emptyLinePlaceholder":324},[147,20953,20954,20956,20958],{"class":149,"line":10077},[147,20955,4364],{"class":397},[147,20957,4367],{"class":448},[147,20959,1565],{"class":157},[147,20961,20962],{"class":149,"line":10086},[147,20963,1839],{"class":157},[367,20965,20967],{"id":20966},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,20969,20970],{},"浅拷贝：简单的赋值拷贝操作",[19,20972,20973],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[138,20975,20977],{"className":388,"code":20976,"language":390,"meta":143,"style":143},"#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",[51,20978,20979,20985,20995,21001,21005,21009,21014,21020,21024,21037,21041,21045,21052,21056,21066,21081,21094,21098,21103,21108,21124,21128,21141,21146,21151,21156,21165,21170,21185,21189,21193,21197,21203,21207,21212,21227,21231,21242,21256,21260,21269,21273,21279,21291,21295,21303,21307,21324,21355,21363,21391,21395,21399,21407,21411,21417],{"__ignoreMap":143},[147,20980,20981,20983],{"class":149,"line":150},[147,20982,2223],{"class":397},[147,20984,2226],{"class":504},[147,20986,20987,20989,20991,20993],{"class":149,"line":312},[147,20988,2231],{"class":397},[147,20990,2234],{"class":397},[147,20992,2238],{"class":2237},[147,20994,1565],{"class":157},[147,20996,20997,20999],{"class":149,"line":1454},[147,20998,14967],{"class":397},[147,21000,15444],{"class":2237},[147,21002,21003],{"class":149,"line":1469},[147,21004,1820],{"class":157},[147,21006,21007],{"class":149,"line":1475},[147,21008,14989],{"class":397},[147,21010,21011],{"class":149,"line":1489},[147,21012,21013],{"class":458},"    \u002F\u002F默认构造函数\n",[147,21015,21016,21018],{"class":149,"line":1495},[147,21017,18792],{"class":2237},[147,21019,2250],{"class":157},[147,21021,21022],{"class":149,"line":1586},[147,21023,2304],{"class":157},[147,21025,21026,21028,21030,21033,21035],{"class":149,"line":1592},[147,21027,3725],{"class":157},[147,21029,1443],{"class":397},[147,21031,21032],{"class":504},"\"默认构造函数\"",[147,21034,1443],{"class":397},[147,21036,1466],{"class":157},[147,21038,21039],{"class":149,"line":1604},[147,21040,2461],{"class":157},[147,21042,21043],{"class":149,"line":1886},[147,21044,20616],{"class":458},[147,21046,21047,21049],{"class":149,"line":1891},[147,21048,18825],{"class":2237},[147,21050,21051],{"class":157},"(int age,int height)\n",[147,21053,21054],{"class":149,"line":1897},[147,21055,2304],{"class":157},[147,21057,21058,21061,21063],{"class":149,"line":1902},[147,21059,21060],{"class":157},"        m_Age",[147,21062,445],{"class":397},[147,21064,21065],{"class":157},"age;\n",[147,21067,21068,21071,21073,21075,21078],{"class":149,"line":1916},[147,21069,21070],{"class":157},"        m_Height",[147,21072,11991],{"class":397},[147,21074,2656],{"class":397},[147,21076,21077],{"class":157},"(height);",[147,21079,21080],{"class":458},"\u002F\u002F放到堆区\n",[147,21082,21083,21085,21087,21090,21092],{"class":149,"line":1921},[147,21084,3725],{"class":157},[147,21086,1443],{"class":397},[147,21088,21089],{"class":504},"\"有参构造函数\"",[147,21091,1443],{"class":397},[147,21093,1466],{"class":157},[147,21095,21096],{"class":149,"line":1927},[147,21097,2461],{"class":157},[147,21099,21100],{"class":149,"line":1948},[147,21101,21102],{"class":458},"    \u002F\u002F深拷贝解决上述问题\n",[147,21104,21105],{"class":149,"line":1953},[147,21106,21107],{"class":458},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[147,21109,21110,21112,21114,21116,21118,21120,21122],{"class":149,"line":1967},[147,21111,18792],{"class":2237},[147,21113,401],{"class":157},[147,21115,7066],{"class":397},[147,21117,15842],{"class":2237},[147,21119,10858],{"class":397},[147,21121,19],{"class":5490},[147,21123,407],{"class":157},[147,21125,21126],{"class":149,"line":1972},[147,21127,2304],{"class":157},[147,21129,21130,21132,21134,21137,21139],{"class":149,"line":2001},[147,21131,3725],{"class":157},[147,21133,1443],{"class":397},[147,21135,21136],{"class":504},"\"拷贝构造函数\"",[147,21138,1443],{"class":397},[147,21140,1466],{"class":157},[147,21142,21143],{"class":149,"line":2006},[147,21144,21145],{"class":458},"        \u002F\u002F编译器默认的写如下注释部分\n",[147,21147,21148],{"class":149,"line":2023},[147,21149,21150],{"class":458},"        \u002F\u002Fm_Age=p.m_Age;\n",[147,21152,21153],{"class":149,"line":2028},[147,21154,21155],{"class":458},"        \u002F\u002Fm_Height=p.m_Height;\n",[147,21157,21158,21160,21162],{"class":149,"line":2033},[147,21159,21060],{"class":157},[147,21161,445],{"class":397},[147,21163,21164],{"class":157},"p.m_Age;\n",[147,21166,21167],{"class":149,"line":2038},[147,21168,21169],{"class":458},"        \u002F\u002F深拷贝操作\n",[147,21171,21172,21174,21176,21178,21180,21182],{"class":149,"line":2052},[147,21173,21070],{"class":157},[147,21175,11991],{"class":397},[147,21177,2656],{"class":397},[147,21179,401],{"class":157},[147,21181,854],{"class":397},[147,21183,21184],{"class":157},"p.m_Height);\n",[147,21186,21187],{"class":149,"line":2057},[147,21188,2461],{"class":157},[147,21190,21191],{"class":149,"line":2851},[147,21192,2674],{"emptyLinePlaceholder":324},[147,21194,21195],{"class":149,"line":2865},[147,21196,18820],{"class":458},[147,21198,21199,21201],{"class":149,"line":2873},[147,21200,18825],{"class":2237},[147,21202,2250],{"class":157},[147,21204,21205],{"class":149,"line":2878},[147,21206,2304],{"class":157},[147,21208,21209],{"class":149,"line":2884},[147,21210,21211],{"class":458},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[147,21213,21214,21216,21219,21222,21225],{"class":149,"line":2890},[147,21215,2771],{"class":397},[147,21217,21218],{"class":157},"(m_Height ",[147,21220,21221],{"class":397},"!=",[147,21223,21224],{"class":448}," NULL",[147,21226,407],{"class":157},[147,21228,21229],{"class":149,"line":2895},[147,21230,2784],{"class":157},[147,21232,21233,21236,21239],{"class":149,"line":8222},[147,21234,21235],{"class":397},"            delete",[147,21237,21238],{"class":157}," m_Height;",[147,21240,21241],{"class":458}," \u002F\u002F释放堆区内存\n",[147,21243,21244,21247,21249,21251,21253],{"class":149,"line":8246},[147,21245,21246],{"class":157},"            m_Height",[147,21248,445],{"class":397},[147,21250,2666],{"class":448},[147,21252,455],{"class":157},[147,21254,21255],{"class":458}," \u002F\u002F防止野指针\n",[147,21257,21258],{"class":149,"line":8251},[147,21259,2803],{"class":157},[147,21261,21262,21264,21266],{"class":149,"line":8257},[147,21263,3725],{"class":157},[147,21265,1443],{"class":397},[147,21267,21268],{"class":504},"\"Person的析构函数调用\"\n",[147,21270,21271],{"class":149,"line":8284},[147,21272,2461],{"class":157},[147,21274,21275,21277],{"class":149,"line":8289},[147,21276,2259],{"class":397},[147,21278,15939],{"class":157},[147,21280,21281,21283,21285,21288],{"class":149,"line":8295},[147,21282,2259],{"class":397},[147,21284,6792],{"class":397},[147,21286,21287],{"class":157},"m_Height;",[147,21289,21290],{"class":458}," \u002F\u002F定义一个指针，指向身高\n",[147,21292,21293],{"class":149,"line":8307},[147,21294,4269],{"class":157},[147,21296,21297,21299,21301],{"class":149,"line":8319},[147,21298,5638],{"class":397},[147,21300,5862],{"class":2237},[147,21302,2250],{"class":157},[147,21304,21305],{"class":149,"line":8331},[147,21306,1820],{"class":157},[147,21308,21309,21311,21313,21315,21317,21319,21322],{"class":149,"line":9990},[147,21310,19704],{"class":157},[147,21312,7404],{"class":2237},[147,21314,401],{"class":157},[147,21316,1049],{"class":448},[147,21318,777],{"class":157},[147,21320,21321],{"class":448},"160",[147,21323,2993],{"class":157},[147,21325,21326,21328,21330,21333,21335,21338,21340,21343,21345,21348,21350,21352],{"class":149,"line":10015},[147,21327,1825],{"class":157},[147,21329,1443],{"class":397},[147,21331,21332],{"class":504},"\"p1的年龄为:\"",[147,21334,1443],{"class":397},[147,21336,21337],{"class":157},"p1.m_Age",[147,21339,1443],{"class":397},[147,21341,21342],{"class":504},"\"身高为：\"",[147,21344,6693],{"class":397},[147,21346,21347],{"class":157},"p1.m_Height",[147,21349,1443],{"class":397},[147,21351,1513],{"class":157},[147,21353,21354],{"class":458},"  \u002F\u002F18\n",[147,21356,21357,21359,21361],{"class":149,"line":10038},[147,21358,19704],{"class":157},[147,21360,7307],{"class":2237},[147,21362,17788],{"class":157},[147,21364,21365,21367,21369,21372,21374,21376,21378,21380,21382,21385,21387,21389],{"class":149,"line":10062},[147,21366,1825],{"class":157},[147,21368,1443],{"class":397},[147,21370,21371],{"class":504},"\"p2的年龄为：\"",[147,21373,1443],{"class":397},[147,21375,19734],{"class":157},[147,21377,1443],{"class":397},[147,21379,21342],{"class":504},[147,21381,6693],{"class":397},[147,21383,21384],{"class":157},"p2.m_Height",[147,21386,1443],{"class":397},[147,21388,1513],{"class":157},[147,21390,21354],{"class":458},[147,21392,21393],{"class":149,"line":10067},[147,21394,13484],{"class":157},[147,21396,21397],{"class":149,"line":10072},[147,21398,1839],{"class":157},[147,21400,21401,21403,21405],{"class":149,"line":10077},[147,21402,404],{"class":397},[147,21404,2247],{"class":2237},[147,21406,2250],{"class":157},[147,21408,21409],{"class":149,"line":10086},[147,21410,1820],{"class":157},[147,21412,21413,21415],{"class":149,"line":10091},[147,21414,5907],{"class":2237},[147,21416,5910],{"class":157},[147,21418,21419],{"class":149,"line":10097},[147,21420,1839],{"class":157},[19,21422,21423],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,21425,21426],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,21428,21429],{},[29,21430],{"alt":143,"src":21431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,21433,21434],{},"浅拷贝问题要使用深拷贝来解决",[19,21436,21437],{},[29,21438],{"alt":143,"src":21439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,21441,21442],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[367,21444,21446],{"id":21445},"_826初始化列表","8.2.6初始化列表",[19,21448,21449],{},"作用：初始化属性",[19,21451,5455],{},[138,21453,21456],{"className":21454,"code":21455,"language":5461},[5459],"构造函数():属性1(值1),属性2(值2).....{}\n",[51,21457,21455],{"__ignoreMap":143},[19,21459,21460],{},"例子",[138,21462,21464],{"className":388,"code":21463,"language":390,"meta":143,"style":143},"#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",[51,21465,21466,21472,21482,21488,21492,21497,21501,21506,21511,21516,21521,21526,21531,21535,21540,21545,21588,21597,21615,21633,21651,21655,21659,21666,21673,21680,21684,21688,21696,21700,21704,21724,21733,21737,21741,21751,21755,21763],{"__ignoreMap":143},[147,21467,21468,21470],{"class":149,"line":150},[147,21469,2223],{"class":397},[147,21471,2226],{"class":504},[147,21473,21474,21476,21478,21480],{"class":149,"line":312},[147,21475,2231],{"class":397},[147,21477,2234],{"class":397},[147,21479,2238],{"class":2237},[147,21481,1565],{"class":157},[147,21483,21484,21486],{"class":149,"line":1454},[147,21485,14967],{"class":397},[147,21487,15444],{"class":2237},[147,21489,21490],{"class":149,"line":1469},[147,21491,1820],{"class":157},[147,21493,21494],{"class":149,"line":1475},[147,21495,21496],{"class":397},"    public:\n",[147,21498,21499],{"class":149,"line":1489},[147,21500,2674],{"emptyLinePlaceholder":324},[147,21502,21503],{"class":149,"line":1495},[147,21504,21505],{"class":458},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[147,21507,21508],{"class":149,"line":1586},[147,21509,21510],{"class":458},"    \u002F\u002FPerson(int a, int b, int c) {\n",[147,21512,21513],{"class":149,"line":1592},[147,21514,21515],{"class":458},"    \u002F\u002F  m_A = a;\n",[147,21517,21518],{"class":149,"line":1604},[147,21519,21520],{"class":458},"    \u002F\u002F  m_B = b;\n",[147,21522,21523],{"class":149,"line":1886},[147,21524,21525],{"class":458},"    \u002F\u002F  m_C = c;\n",[147,21527,21528],{"class":149,"line":1891},[147,21529,21530],{"class":458},"    \u002F\u002F}\n",[147,21532,21533],{"class":149,"line":1897},[147,21534,2674],{"emptyLinePlaceholder":324},[147,21536,21537],{"class":149,"line":1902},[147,21538,21539],{"class":458},"    \u002F\u002F初始化列表方式初始化\n",[147,21541,21542],{"class":149,"line":1916},[147,21543,21544],{"class":458},"    \u002F\u002F使用有参构造函数\n",[147,21546,21547,21549,21551,21553,21555,21557,21559,21561,21563,21565,21567,21570,21573,21576,21579,21582,21585],{"class":149,"line":1921},[147,21548,18792],{"class":2237},[147,21550,401],{"class":157},[147,21552,404],{"class":397},[147,21554,1673],{"class":5490},[147,21556,12709],{"class":157},[147,21558,404],{"class":397},[147,21560,3107],{"class":5490},[147,21562,12709],{"class":157},[147,21564,404],{"class":397},[147,21566,3123],{"class":5490},[147,21568,21569],{"class":157},") :",[147,21571,21572],{"class":2237},"m_A",[147,21574,21575],{"class":157},"(a), ",[147,21577,21578],{"class":2237},"m_B",[147,21580,21581],{"class":157},"(b), ",[147,21583,21584],{"class":2237},"m_C",[147,21586,21587],{"class":157},"(c) {}\n",[147,21589,21590,21592,21595],{"class":149,"line":1927},[147,21591,15182],{"class":397},[147,21593,21594],{"class":2237}," PrintPerson",[147,21596,11127],{"class":157},[147,21598,21599,21601,21603,21606,21608,21611,21613],{"class":149,"line":1948},[147,21600,9943],{"class":157},[147,21602,1443],{"class":397},[147,21604,21605],{"class":504}," \"mA:\"",[147,21607,1719],{"class":397},[147,21609,21610],{"class":157}," m_A ",[147,21612,1443],{"class":397},[147,21614,9114],{"class":157},[147,21616,21617,21619,21621,21624,21626,21629,21631],{"class":149,"line":1953},[147,21618,9943],{"class":157},[147,21620,1443],{"class":397},[147,21622,21623],{"class":504}," \"mB:\"",[147,21625,1719],{"class":397},[147,21627,21628],{"class":157}," m_B ",[147,21630,1443],{"class":397},[147,21632,9114],{"class":157},[147,21634,21635,21637,21639,21642,21644,21647,21649],{"class":149,"line":1967},[147,21636,9943],{"class":157},[147,21638,1443],{"class":397},[147,21640,21641],{"class":504}," \"mC:\"",[147,21643,1719],{"class":397},[147,21645,21646],{"class":157}," m_C ",[147,21648,1443],{"class":397},[147,21650,9114],{"class":157},[147,21652,21653],{"class":149,"line":1972},[147,21654,2461],{"class":157},[147,21656,21657],{"class":149,"line":2001},[147,21658,15495],{"class":397},[147,21660,21661,21663],{"class":149,"line":2006},[147,21662,2259],{"class":397},[147,21664,21665],{"class":157}," m_A;\n",[147,21667,21668,21670],{"class":149,"line":2023},[147,21669,2259],{"class":397},[147,21671,21672],{"class":157}," m_B;\n",[147,21674,21675,21677],{"class":149,"line":2028},[147,21676,2259],{"class":397},[147,21678,21679],{"class":157}," m_C;\n",[147,21681,21682],{"class":149,"line":2033},[147,21683,4269],{"class":157},[147,21685,21686],{"class":149,"line":2038},[147,21687,2674],{"emptyLinePlaceholder":324},[147,21689,21690,21692,21694],{"class":149,"line":2052},[147,21691,404],{"class":397},[147,21693,2247],{"class":2237},[147,21695,6252],{"class":157},[147,21697,21698],{"class":149,"line":2057},[147,21699,1820],{"class":157},[147,21701,21702],{"class":149,"line":2851},[147,21703,2674],{"emptyLinePlaceholder":324},[147,21705,21706,21708,21710,21712,21714,21716,21718,21720,21722],{"class":149,"line":2865},[147,21707,19704],{"class":157},[147,21709,19],{"class":2237},[147,21711,401],{"class":157},[147,21713,616],{"class":448},[147,21715,12709],{"class":157},[147,21717,477],{"class":448},[147,21719,12709],{"class":157},[147,21721,471],{"class":448},[147,21723,2993],{"class":157},[147,21725,21726,21728,21731],{"class":149,"line":2873},[147,21727,16139],{"class":157},[147,21729,21730],{"class":2237},"PrintPerson",[147,21732,5910],{"class":157},[147,21734,21735],{"class":149,"line":2878},[147,21736,2674],{"emptyLinePlaceholder":324},[147,21738,21739],{"class":149,"line":2884},[147,21740,2674],{"emptyLinePlaceholder":324},[147,21742,21743,21745,21747,21749],{"class":149,"line":2890},[147,21744,2577],{"class":2237},[147,21746,401],{"class":157},[147,21748,2582],{"class":504},[147,21750,2993],{"class":157},[147,21752,21753],{"class":149,"line":2895},[147,21754,2674],{"emptyLinePlaceholder":324},[147,21756,21757,21759,21761],{"class":149,"line":8222},[147,21758,4364],{"class":397},[147,21760,4367],{"class":448},[147,21762,1565],{"class":157},[147,21764,21765],{"class":149,"line":8246},[147,21766,1839],{"class":157},[19,21768,21769,21770,21773,21774],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[234,21771,21772],{},"参数名就是定义的对象属性","，",[234,21775,21776],{},"属性后面的值为有参构造函数的形参",[138,21778,21780],{"className":388,"code":21779,"language":390,"meta":143,"style":143},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[51,21781,21782],{"__ignoreMap":143},[147,21783,21784,21786,21788,21790,21793,21795,21798,21800,21803,21805,21808,21810,21813,21815],{"class":149,"line":150},[147,21785,19319],{"class":2237},[147,21787,401],{"class":157},[147,21789,404],{"class":397},[147,21791,21792],{"class":157}," a.",[147,21794,404],{"class":397},[147,21796,21797],{"class":157}," b,",[147,21799,404],{"class":397},[147,21801,21802],{"class":157}," b):",[147,21804,21572],{"class":2237},[147,21806,21807],{"class":157},"(a),",[147,21809,21578],{"class":2237},[147,21811,21812],{"class":157},"(c),",[147,21814,21584],{"class":2237},[147,21816,21817],{"class":157},"(b) {}\n",[367,21819,21821],{"id":21820},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,21823,21824],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,21826,14906],{},[138,21828,21830],{"className":388,"code":21829,"language":390,"meta":143,"style":143},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[51,21831,21832,21837,21842,21846,21851,21855],{"__ignoreMap":143},[147,21833,21834],{"class":149,"line":150},[147,21835,21836],{"class":157},"A{};\n",[147,21838,21839],{"class":149,"line":312},[147,21840,21841],{"class":157},"B\n",[147,21843,21844],{"class":149,"line":1454},[147,21845,1820],{"class":157},[147,21847,21848],{"class":149,"line":1469},[147,21849,21850],{"class":157},"    A a;\n",[147,21852,21853],{"class":149,"line":1475},[147,21854,1839],{"class":157},[147,21856,21857],{"class":149,"line":1489},[147,21858,21859],{"class":458},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,21861,21862],{},"案例",[138,21864,21866],{"className":388,"code":21865,"language":390,"meta":143,"style":143},"\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",[51,21867,21868,21873,21880,21884,21889,21894,21908,21912,21922,21933,21937,21944,21948,21961,21965,21970,21975,21979,21985,21989,21993,21997,22028,22032,22043,22047,22053,22057,22070,22074,22078,22082,22087,22092,22096,22104,22108,22125,22144,22148,22156,22160,22166],{"__ignoreMap":143},[147,21869,21870],{"class":149,"line":150},[147,21871,21872],{"class":458},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[147,21874,21875,21877],{"class":149,"line":312},[147,21876,14967],{"class":397},[147,21878,21879],{"class":2237}," Phone\n",[147,21881,21882],{"class":149,"line":1454},[147,21883,1820],{"class":157},[147,21885,21886],{"class":149,"line":1469},[147,21887,21888],{"class":157},"public：\n",[147,21890,21891],{"class":149,"line":1475},[147,21892,21893],{"class":458},"    \u002F\u002F 赋值(构造函数)\n",[147,21895,21896,21899,21901,21903,21906],{"class":149,"line":1489},[147,21897,21898],{"class":2237},"    Phone",[147,21900,401],{"class":157},[147,21902,15190],{"class":2237},[147,21904,21905],{"class":5490}," pName",[147,21907,407],{"class":157},[147,21909,21910],{"class":149,"line":1495},[147,21911,2304],{"class":157},[147,21913,21914,21917,21919],{"class":149,"line":1586},[147,21915,21916],{"class":157},"        m_pName",[147,21918,445],{"class":397},[147,21920,21921],{"class":157},"pName;\n",[147,21923,21924,21926,21928,21931],{"class":149,"line":1592},[147,21925,3725],{"class":157},[147,21927,1443],{"class":397},[147,21929,21930],{"class":504},"\"Phone的构造函数调用\"",[147,21932,1565],{"class":157},[147,21934,21935],{"class":149,"line":1604},[147,21936,2461],{"class":157},[147,21938,21939,21942],{"class":149,"line":1886},[147,21940,21941],{"class":2237},"    ~Phone",[147,21943,2250],{"class":157},[147,21945,21946],{"class":149,"line":1891},[147,21947,2304],{"class":157},[147,21949,21950,21952,21954,21957,21959],{"class":149,"line":1897},[147,21951,3725],{"class":157},[147,21953,1443],{"class":397},[147,21955,21956],{"class":504},"\"Phone析构函数调用\"",[147,21958,1443],{"class":397},[147,21960,1466],{"class":157},[147,21962,21963],{"class":149,"line":1902},[147,21964,2461],{"class":157},[147,21966,21967],{"class":149,"line":1916},[147,21968,21969],{"class":458},"    \u002F\u002F\n",[147,21971,21972],{"class":149,"line":1921},[147,21973,21974],{"class":157},"    string m_PName;\n",[147,21976,21977],{"class":149,"line":1927},[147,21978,4269],{"class":157},[147,21980,21981,21983],{"class":149,"line":1948},[147,21982,14967],{"class":397},[147,21984,15444],{"class":2237},[147,21986,21987],{"class":149,"line":1953},[147,21988,1820],{"class":157},[147,21990,21991],{"class":149,"line":1967},[147,21992,14989],{"class":397},[147,21994,21995],{"class":149,"line":1972},[147,21996,17267],{"class":458},[147,21998,21999,22001,22003,22005,22007,22009,22011,22014,22017,22019,22022,22025],{"class":149,"line":2001},[147,22000,18792],{"class":2237},[147,22002,401],{"class":157},[147,22004,15190],{"class":2237},[147,22006,15193],{"class":5490},[147,22008,777],{"class":157},[147,22010,15190],{"class":2237},[147,22012,22013],{"class":5490}," pname",[147,22015,22016],{"class":157},"):",[147,22018,15283],{"class":2237},[147,22020,22021],{"class":157},"(name),m_phone.",[147,22023,22024],{"class":2237},"m_PName",[147,22026,22027],{"class":157},"(pname) \n",[147,22029,22030],{"class":149,"line":2006},[147,22031,2304],{"class":157},[147,22033,22034,22036,22038,22041],{"class":149,"line":2023},[147,22035,3725],{"class":157},[147,22037,1443],{"class":397},[147,22039,22040],{"class":504},"\"Person的构造函数调用\"",[147,22042,1565],{"class":157},[147,22044,22045],{"class":149,"line":2028},[147,22046,2461],{"class":157},[147,22048,22049,22051],{"class":149,"line":2033},[147,22050,18825],{"class":2237},[147,22052,2250],{"class":157},[147,22054,22055],{"class":149,"line":2038},[147,22056,2304],{"class":157},[147,22058,22059,22061,22063,22066,22068],{"class":149,"line":2052},[147,22060,3725],{"class":157},[147,22062,1443],{"class":397},[147,22064,22065],{"class":504},"\"Person析构函数调用\"",[147,22067,1443],{"class":397},[147,22069,1466],{"class":157},[147,22071,22072],{"class":149,"line":2057},[147,22073,2461],{"class":157},[147,22075,22076],{"class":149,"line":2851},[147,22077,8054],{"class":458},[147,22079,22080],{"class":149,"line":2865},[147,22081,15165],{"class":157},[147,22083,22084],{"class":149,"line":2873},[147,22085,22086],{"class":458},"    \u002F\u002F手机\n",[147,22088,22089],{"class":149,"line":2878},[147,22090,22091],{"class":157},"    Phone m_Phone;\n",[147,22093,22094],{"class":149,"line":2884},[147,22095,4269],{"class":157},[147,22097,22098,22100,22102],{"class":149,"line":2890},[147,22099,5638],{"class":397},[147,22101,5862],{"class":2237},[147,22103,2250],{"class":157},[147,22105,22106],{"class":149,"line":2895},[147,22107,1820],{"class":157},[147,22109,22110,22112,22114,22116,22118,22120,22123],{"class":149,"line":8222},[147,22111,19704],{"class":157},[147,22113,19],{"class":2237},[147,22115,401],{"class":157},[147,22117,8190],{"class":504},[147,22119,777],{"class":157},[147,22121,22122],{"class":504},"\"安卓\"",[147,22124,2993],{"class":157},[147,22126,22127,22129,22131,22134,22136,22139,22141],{"class":149,"line":8246},[147,22128,1825],{"class":157},[147,22130,1443],{"class":397},[147,22132,22133],{"class":157},"p.Name",[147,22135,1443],{"class":397},[147,22137,22138],{"class":504},"\"拿着：\"",[147,22140,1443],{"class":397},[147,22142,22143],{"class":157},"p.m_phone.m_PName;\n",[147,22145,22146],{"class":149,"line":8251},[147,22147,1839],{"class":157},[147,22149,22150,22152,22154],{"class":149,"line":8257},[147,22151,404],{"class":397},[147,22153,2247],{"class":2237},[147,22155,2250],{"class":157},[147,22157,22158],{"class":149,"line":8284},[147,22159,1820],{"class":157},[147,22161,22162,22164],{"class":149,"line":8289},[147,22163,5907],{"class":2237},[147,22165,5910],{"class":157},[147,22167,22168],{"class":149,"line":8295},[147,22169,1839],{"class":157},[19,22171,9299],{},[138,22173,22175],{"className":388,"code":22174,"language":390,"meta":143,"style":143},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[51,22176,22177,22182],{"__ignoreMap":143},[147,22178,22179],{"class":149,"line":150},[147,22180,22181],{"class":458},"    \u002F\u002F不需要写这个：\n",[147,22183,22184],{"class":149,"line":312},[147,22185,22186],{"class":458},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,22188,22189],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[138,22191,22193],{"className":388,"code":22192,"language":390,"meta":143,"style":143},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[51,22194,22195],{"__ignoreMap":143},[147,22196,22197,22199,22202,22204,22207,22210],{"class":149,"line":150},[147,22198,19319],{"class":2237},[147,22200,22201],{"class":157},"(string name.string pname):",[147,22203,15283],{"class":2237},[147,22205,22206],{"class":157},"(name),",[147,22208,22209],{"class":2237},"m_phone",[147,22211,22212],{"class":157},"(pname) {}\n",[19,22214,22215,22216,445,22219],{},"采用的是隐式转换法，实际为如下：\n",[51,22217,22218],{},"m_phone(pname)",[51,22220,22221],{},"Phone m_phone=pname",[19,22223,22224,22227],{},[234,22225,22226],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,22229,22230],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[367,22232,22234],{"id":22233},"_828静态对象","8.2.8静态对象",[19,22236,22237],{},"静态对象在成员对象前static，称为静态对象",[19,22239,22240],{},"静态对象分为两类：",[350,22242,22243],{},[353,22244,22245],{},"静态成员变量",[1406,22247,22248,22251,22254],{},[353,22249,22250],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[353,22252,22253],{},"②在编译阶段分配内存",[353,22255,22256],{},"③类内声明，类外初始化",[350,22258,22259],{"start":312},[353,22260,22261],{},"静态成员函数",[1406,22263,22264,22267],{},[353,22265,22266],{},"①所有对象共享同一个函数",[353,22268,22269],{},"②静态成员函数只能访问静态成员变量",[22271,22272,22274],"h4",{"id":22273},"_8281静态成员变量","8.2.8.1静态成员变量",[138,22276,22278],{"className":388,"code":22277,"language":390,"meta":143,"style":143},"#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",[51,22279,22280,22286,22296,22302,22306,22310,22315,22320,22325,22333,22337,22341,22345,22353,22357,22361,22366,22379,22383,22391,22395,22401],{"__ignoreMap":143},[147,22281,22282,22284],{"class":149,"line":150},[147,22283,2223],{"class":397},[147,22285,2226],{"class":504},[147,22287,22288,22290,22292,22294],{"class":149,"line":312},[147,22289,2231],{"class":397},[147,22291,2234],{"class":397},[147,22293,2238],{"class":2237},[147,22295,1565],{"class":157},[147,22297,22298,22300],{"class":149,"line":1454},[147,22299,14967],{"class":397},[147,22301,15444],{"class":2237},[147,22303,22304],{"class":149,"line":1469},[147,22305,1820],{"class":157},[147,22307,22308],{"class":149,"line":1475},[147,22309,14989],{"class":397},[147,22311,22312],{"class":149,"line":1489},[147,22313,22314],{"class":458},"    \u002F\u002F非静态成员变量\n",[147,22316,22317],{"class":149,"line":1495},[147,22318,22319],{"class":458},"    \u002F\u002F int m_A;\n",[147,22321,22322],{"class":149,"line":1586},[147,22323,22324],{"class":458},"    \u002F\u002F定义静态成员变量\n",[147,22326,22327,22329,22331],{"class":149,"line":1592},[147,22328,11294],{"class":397},[147,22330,2656],{"class":397},[147,22332,21665],{"class":157},[147,22334,22335],{"class":149,"line":1604},[147,22336,2674],{"emptyLinePlaceholder":324},[147,22338,22339],{"class":149,"line":1886},[147,22340,2674],{"emptyLinePlaceholder":324},[147,22342,22343],{"class":149,"line":1891},[147,22344,4269],{"class":157},[147,22346,22347,22349,22351],{"class":149,"line":1897},[147,22348,5638],{"class":397},[147,22350,5862],{"class":2237},[147,22352,2250],{"class":157},[147,22354,22355],{"class":149,"line":1902},[147,22356,1820],{"class":157},[147,22358,22359],{"class":149,"line":1916},[147,22360,15586],{"class":157},[147,22362,22363],{"class":149,"line":1921},[147,22364,22365],{"class":458},"    \u002F\u002F输出类成员变量这块内存\n",[147,22367,22368,22370,22372,22375,22377],{"class":149,"line":1927},[147,22369,1825],{"class":157},[147,22371,1443],{"class":397},[147,22373,22374],{"class":157},"p.m_A",[147,22376,1443],{"class":397},[147,22378,1466],{"class":157},[147,22380,22381],{"class":149,"line":1948},[147,22382,1839],{"class":157},[147,22384,22385,22387,22389],{"class":149,"line":1953},[147,22386,404],{"class":397},[147,22388,2247],{"class":2237},[147,22390,2250],{"class":157},[147,22392,22393],{"class":149,"line":1967},[147,22394,1820],{"class":157},[147,22396,22397,22399],{"class":149,"line":1972},[147,22398,5907],{"class":2237},[147,22400,2250],{"class":157},[147,22402,22403],{"class":149,"line":2001},[147,22404,1839],{"class":157},[19,22406,22407],{},"此时输出是报错的：无法解析外部命令",[19,22409,22410],{},"解决这一问题：必须用到类内声明，类外初始化操作",[138,22412,22414],{"className":388,"code":22413,"language":390,"meta":143,"style":143},"#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",[51,22415,22416,22422,22432,22438,22442,22446,22451,22459,22463,22468,22483,22491,22495,22499,22504,22509,22521,22526,22537,22542,22547,22560,22564,22572,22576,22582],{"__ignoreMap":143},[147,22417,22418,22420],{"class":149,"line":150},[147,22419,2223],{"class":397},[147,22421,2226],{"class":504},[147,22423,22424,22426,22428,22430],{"class":149,"line":312},[147,22425,2231],{"class":397},[147,22427,2234],{"class":397},[147,22429,2238],{"class":2237},[147,22431,1565],{"class":157},[147,22433,22434,22436],{"class":149,"line":1454},[147,22435,14967],{"class":397},[147,22437,15444],{"class":2237},[147,22439,22440],{"class":149,"line":1469},[147,22441,1820],{"class":157},[147,22443,22444],{"class":149,"line":1475},[147,22445,14989],{"class":397},[147,22447,22448],{"class":149,"line":1489},[147,22449,22450],{"class":458},"    \u002F\u002F类内声明\n",[147,22452,22453,22455,22457],{"class":149,"line":1495},[147,22454,11294],{"class":397},[147,22456,2656],{"class":397},[147,22458,21665],{"class":157},[147,22460,22461],{"class":149,"line":1586},[147,22462,4269],{"class":157},[147,22464,22465],{"class":149,"line":1592},[147,22466,22467],{"class":458},"\u002F\u002F类外初始化\n",[147,22469,22470,22472,22474,22477,22479,22481],{"class":149,"line":1604},[147,22471,404],{"class":397},[147,22473,15842],{"class":2237},[147,22475,22476],{"class":157},"::m_A",[147,22478,445],{"class":397},[147,22480,845],{"class":448},[147,22482,1565],{"class":157},[147,22484,22485,22487,22489],{"class":149,"line":1886},[147,22486,5638],{"class":397},[147,22488,5862],{"class":2237},[147,22490,2250],{"class":157},[147,22492,22493],{"class":149,"line":1891},[147,22494,1820],{"class":157},[147,22496,22497],{"class":149,"line":1897},[147,22498,15586],{"class":157},[147,22500,22501],{"class":149,"line":1902},[147,22502,22503],{"class":458},"    \u002F\u002F访问变量的原内存空间\n",[147,22505,22506],{"class":149,"line":1916},[147,22507,22508],{"class":458},"    \u002F\u002F100\n",[147,22510,22511,22513,22515,22517,22519],{"class":149,"line":1921},[147,22512,1825],{"class":157},[147,22514,1443],{"class":397},[147,22516,22374],{"class":157},[147,22518,1443],{"class":397},[147,22520,1466],{"class":157},[147,22522,22523],{"class":149,"line":1927},[147,22524,22525],{"class":157},"    Person p2;\n",[147,22527,22528,22531,22533,22535],{"class":149,"line":1948},[147,22529,22530],{"class":157},"    p2.m_A",[147,22532,445],{"class":397},[147,22534,1996],{"class":448},[147,22536,1565],{"class":157},[147,22538,22539],{"class":149,"line":1953},[147,22540,22541],{"class":458},"    \u002F\u002F继续访问这片空间\n",[147,22543,22544],{"class":149,"line":1967},[147,22545,22546],{"class":458},"    \u002F\u002F200\n",[147,22548,22549,22551,22553,22556,22558],{"class":149,"line":1972},[147,22550,1825],{"class":157},[147,22552,1443],{"class":397},[147,22554,22555],{"class":157},"p2.m_A",[147,22557,1443],{"class":397},[147,22559,1466],{"class":157},[147,22561,22562],{"class":149,"line":2001},[147,22563,1839],{"class":157},[147,22565,22566,22568,22570],{"class":149,"line":2006},[147,22567,404],{"class":397},[147,22569,2247],{"class":2237},[147,22571,2250],{"class":157},[147,22573,22574],{"class":149,"line":2023},[147,22575,1820],{"class":157},[147,22577,22578,22580],{"class":149,"line":2028},[147,22579,5907],{"class":2237},[147,22581,5910],{"class":157},[147,22583,22584],{"class":149,"line":2033},[147,22585,1839],{"class":157},[19,22587,22588],{},[234,22589,22590],{},"静态变量的访问",[138,22592,22594],{"className":388,"code":22593,"language":390,"meta":143,"style":143},"#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",[51,22595,22596,22602,22612,22618,22622,22626,22630,22638,22642,22647,22655,22659,22663,22677,22692,22700,22704,22709,22714,22719,22724,22736,22741,22746,22760,22777,22781,22789,22793,22799],{"__ignoreMap":143},[147,22597,22598,22600],{"class":149,"line":150},[147,22599,2223],{"class":397},[147,22601,2226],{"class":504},[147,22603,22604,22606,22608,22610],{"class":149,"line":312},[147,22605,2231],{"class":397},[147,22607,2234],{"class":397},[147,22609,2238],{"class":2237},[147,22611,1565],{"class":157},[147,22613,22614,22616],{"class":149,"line":1454},[147,22615,14967],{"class":397},[147,22617,15444],{"class":2237},[147,22619,22620],{"class":149,"line":1469},[147,22621,1820],{"class":157},[147,22623,22624],{"class":149,"line":1475},[147,22625,14989],{"class":397},[147,22627,22628],{"class":149,"line":1489},[147,22629,22450],{"class":458},[147,22631,22632,22634,22636],{"class":149,"line":1495},[147,22633,11294],{"class":397},[147,22635,2656],{"class":397},[147,22637,21665],{"class":157},[147,22639,22640],{"class":149,"line":1586},[147,22641,15495],{"class":397},[147,22643,22644],{"class":149,"line":1592},[147,22645,22646],{"class":458},"    \u002F\u002F静态成员变量也是有访问权限的\n",[147,22648,22649,22651,22653],{"class":149,"line":1604},[147,22650,11294],{"class":397},[147,22652,2656],{"class":397},[147,22654,21672],{"class":157},[147,22656,22657],{"class":149,"line":1886},[147,22658,4269],{"class":157},[147,22660,22661],{"class":149,"line":1891},[147,22662,22467],{"class":458},[147,22664,22665,22667,22669,22671,22673,22675],{"class":149,"line":1897},[147,22666,404],{"class":397},[147,22668,15842],{"class":2237},[147,22670,22476],{"class":157},[147,22672,445],{"class":397},[147,22674,845],{"class":448},[147,22676,1565],{"class":157},[147,22678,22679,22681,22683,22686,22688,22690],{"class":149,"line":1902},[147,22680,404],{"class":397},[147,22682,15842],{"class":2237},[147,22684,22685],{"class":157},"::m_B",[147,22687,445],{"class":397},[147,22689,1099],{"class":448},[147,22691,1565],{"class":157},[147,22693,22694,22696,22698],{"class":149,"line":1916},[147,22695,5638],{"class":397},[147,22697,5931],{"class":2237},[147,22699,2250],{"class":157},[147,22701,22702],{"class":149,"line":1921},[147,22703,1820],{"class":157},[147,22705,22706],{"class":149,"line":1927},[147,22707,22708],{"class":458},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[147,22710,22711],{"class":149,"line":1948},[147,22712,22713],{"class":458},"    \u002F\u002F静态成员变量有两种访问方式：\n",[147,22715,22716],{"class":149,"line":1953},[147,22717,22718],{"class":458},"    \u002F\u002F1.通过对象进行访问\n",[147,22720,22721],{"class":149,"line":1967},[147,22722,22723],{"class":157},"    Person p;  \n",[147,22725,22726,22728,22730,22732,22734],{"class":149,"line":1972},[147,22727,1825],{"class":157},[147,22729,1443],{"class":397},[147,22731,22374],{"class":157},[147,22733,1443],{"class":397},[147,22735,1466],{"class":157},[147,22737,22738],{"class":149,"line":2001},[147,22739,22740],{"class":458},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[147,22742,22743],{"class":149,"line":2006},[147,22744,22745],{"class":458},"    \u002F\u002F2.通过类名进行访问\n",[147,22747,22748,22750,22752,22754,22756,22758],{"class":149,"line":2023},[147,22749,1825],{"class":157},[147,22751,1443],{"class":397},[147,22753,19319],{"class":2237},[147,22755,22476],{"class":157},[147,22757,1443],{"class":397},[147,22759,1466],{"class":157},[147,22761,22762,22764,22766,22768,22770,22772,22774],{"class":149,"line":2028},[147,22763,1825],{"class":157},[147,22765,1443],{"class":397},[147,22767,19319],{"class":2237},[147,22769,22685],{"class":157},[147,22771,1443],{"class":397},[147,22773,1513],{"class":157},[147,22775,22776],{"class":458}," \u002F\u002F没有访问权限，报错\n",[147,22778,22779],{"class":149,"line":2033},[147,22780,1839],{"class":157},[147,22782,22783,22785,22787],{"class":149,"line":2038},[147,22784,404],{"class":397},[147,22786,2247],{"class":2237},[147,22788,2250],{"class":157},[147,22790,22791],{"class":149,"line":2052},[147,22792,1820],{"class":157},[147,22794,22795,22797],{"class":149,"line":2057},[147,22796,5976],{"class":2237},[147,22798,5910],{"class":157},[147,22800,22801],{"class":149,"line":2851},[147,22802,1839],{"class":157},[22271,22804,22806],{"id":22805},"_8282静态成员函数","8.2.8.2静态成员函数",[19,22808,22809],{},"1.静态成员函数定义与访问",[138,22811,22813],{"className":388,"code":22812,"language":390,"meta":143,"style":143},"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",[51,22814,22815,22821,22825,22829,22834,22845,22849,22863,22867,22871,22879,22883,22888,22893,22897,22905,22910,22920],{"__ignoreMap":143},[147,22816,22817,22819],{"class":149,"line":150},[147,22818,14967],{"class":397},[147,22820,15444],{"class":2237},[147,22822,22823],{"class":149,"line":312},[147,22824,1820],{"class":157},[147,22826,22827],{"class":149,"line":1454},[147,22828,14989],{"class":397},[147,22830,22831],{"class":149,"line":1469},[147,22832,22833],{"class":458},"    \u002F\u002F在公共权限下定义静态成员函数\n",[147,22835,22836,22838,22841,22843],{"class":149,"line":1475},[147,22837,11294],{"class":397},[147,22839,22840],{"class":397}," void",[147,22842,11659],{"class":2237},[147,22844,2250],{"class":157},[147,22846,22847],{"class":149,"line":1489},[147,22848,2304],{"class":157},[147,22850,22851,22854,22856,22859,22861],{"class":149,"line":1495},[147,22852,22853],{"class":157},"        coout",[147,22855,1443],{"class":397},[147,22857,22858],{"class":504},"\"静态成员函数的调用\"",[147,22860,1443],{"class":397},[147,22862,1466],{"class":157},[147,22864,22865],{"class":149,"line":1586},[147,22866,2461],{"class":157},[147,22868,22869],{"class":149,"line":1592},[147,22870,4269],{"class":157},[147,22872,22873,22875,22877],{"class":149,"line":1604},[147,22874,5638],{"class":397},[147,22876,5862],{"class":2237},[147,22878,2250],{"class":157},[147,22880,22881],{"class":149,"line":1886},[147,22882,1820],{"class":157},[147,22884,22885],{"class":149,"line":1891},[147,22886,22887],{"class":458},"    \u002F\u002F静态成员函数的调用方式:\n",[147,22889,22890],{"class":149,"line":1897},[147,22891,22892],{"class":458},"    \u002F\u002F1.通过对象访问\n",[147,22894,22895],{"class":149,"line":1902},[147,22896,15586],{"class":157},[147,22898,22899,22901,22903],{"class":149,"line":1916},[147,22900,16139],{"class":157},[147,22902,11825],{"class":2237},[147,22904,5910],{"class":157},[147,22906,22907],{"class":149,"line":1921},[147,22908,22909],{"class":458},"    \u002F\u002F2.通过类名访问\n",[147,22911,22912,22914,22916,22918],{"class":149,"line":1927},[147,22913,18792],{"class":2237},[147,22915,18005],{"class":157},[147,22917,11825],{"class":2237},[147,22919,5910],{"class":157},[147,22921,22922],{"class":149,"line":1948},[147,22923,1839],{"class":157},[350,22925,22926],{"start":312},[353,22927,22928],{},"静态成员函数只能访问静态成员变量",[138,22930,22932],{"className":388,"code":22931,"language":390,"meta":143,"style":143},"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",[51,22933,22934,22940,22944,22948,22952,22962,22966,22980,22985,22997,23001,23012,23022,23026,23030,23034,23044,23048,23061,23065,23069,23073,23077,23091,23099,23103,23107,23111,23115,23123,23127,23137,23142,23146,23154,23158,23164],{"__ignoreMap":143},[147,22935,22936,22938],{"class":149,"line":150},[147,22937,14967],{"class":397},[147,22939,15444],{"class":2237},[147,22941,22942],{"class":149,"line":312},[147,22943,1820],{"class":157},[147,22945,22946],{"class":149,"line":1454},[147,22947,14989],{"class":397},[147,22949,22950],{"class":149,"line":1469},[147,22951,22833],{"class":458},[147,22953,22954,22956,22958,22960],{"class":149,"line":1475},[147,22955,11294],{"class":397},[147,22957,22840],{"class":397},[147,22959,11659],{"class":2237},[147,22961,2250],{"class":157},[147,22963,22964],{"class":149,"line":1489},[147,22965,2304],{"class":157},[147,22967,22968,22971,22973,22975,22977],{"class":149,"line":1495},[147,22969,22970],{"class":157},"        m_A",[147,22972,445],{"class":397},[147,22974,710],{"class":448},[147,22976,455],{"class":157},[147,22978,22979],{"class":458}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[147,22981,22982],{"class":149,"line":1586},[147,22983,22984],{"class":458},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[147,22986,22987,22989,22991,22993,22995],{"class":149,"line":1592},[147,22988,22853],{"class":157},[147,22990,1443],{"class":397},[147,22992,22858],{"class":504},[147,22994,1443],{"class":397},[147,22996,1466],{"class":157},[147,22998,22999],{"class":149,"line":1604},[147,23000,2461],{"class":157},[147,23002,23003,23005,23007,23009],{"class":149,"line":1886},[147,23004,11294],{"class":397},[147,23006,2656],{"class":397},[147,23008,15721],{"class":157},[147,23010,23011],{"class":458}," \u002F\u002F静态成员变量\n",[147,23013,23014,23016,23019],{"class":149,"line":1891},[147,23015,2259],{"class":397},[147,23017,23018],{"class":157}," m_B;",[147,23020,23021],{"class":458}," \u002F\u002F非静态成员变量\n",[147,23023,23024],{"class":149,"line":1897},[147,23025,2674],{"emptyLinePlaceholder":324},[147,23027,23028],{"class":149,"line":1902},[147,23029,15495],{"class":397},[147,23031,23032],{"class":149,"line":1916},[147,23033,22646],{"class":458},[147,23035,23036,23038,23040,23042],{"class":149,"line":1921},[147,23037,11294],{"class":397},[147,23039,22840],{"class":397},[147,23041,13892],{"class":2237},[147,23043,2250],{"class":157},[147,23045,23046],{"class":149,"line":1927},[147,23047,2304],{"class":157},[147,23049,23050,23052,23054,23057,23059],{"class":149,"line":1948},[147,23051,3725],{"class":157},[147,23053,1443],{"class":397},[147,23055,23056],{"class":504},"\"这是私有权限下的静态函数调用\"",[147,23058,1443],{"class":397},[147,23060,1466],{"class":157},[147,23062,23063],{"class":149,"line":1953},[147,23064,2461],{"class":157},[147,23066,23067],{"class":149,"line":1967},[147,23068,2674],{"emptyLinePlaceholder":324},[147,23070,23071],{"class":149,"line":1972},[147,23072,2674],{"emptyLinePlaceholder":324},[147,23074,23075],{"class":149,"line":2001},[147,23076,4269],{"class":157},[147,23078,23079,23081,23083,23085,23087,23089],{"class":149,"line":2006},[147,23080,404],{"class":397},[147,23082,15842],{"class":2237},[147,23084,22476],{"class":157},[147,23086,445],{"class":397},[147,23088,590],{"class":448},[147,23090,1565],{"class":157},[147,23092,23093,23095,23097],{"class":149,"line":2023},[147,23094,5638],{"class":397},[147,23096,5862],{"class":2237},[147,23098,2250],{"class":157},[147,23100,23101],{"class":149,"line":2028},[147,23102,1820],{"class":157},[147,23104,23105],{"class":149,"line":2033},[147,23106,22887],{"class":458},[147,23108,23109],{"class":149,"line":2038},[147,23110,22892],{"class":458},[147,23112,23113],{"class":149,"line":2052},[147,23114,15586],{"class":157},[147,23116,23117,23119,23121],{"class":149,"line":2057},[147,23118,16139],{"class":157},[147,23120,11825],{"class":2237},[147,23122,5910],{"class":157},[147,23124,23125],{"class":149,"line":2851},[147,23126,22909],{"class":458},[147,23128,23129,23131,23133,23135],{"class":149,"line":2865},[147,23130,18792],{"class":2237},[147,23132,18005],{"class":157},[147,23134,11825],{"class":2237},[147,23136,5910],{"class":157},[147,23138,23139],{"class":149,"line":2873},[147,23140,23141],{"class":458},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[147,23143,23144],{"class":149,"line":2878},[147,23145,1839],{"class":157},[147,23147,23148,23150,23152],{"class":149,"line":2884},[147,23149,404],{"class":397},[147,23151,2247],{"class":2237},[147,23153,2250],{"class":157},[147,23155,23156],{"class":149,"line":2890},[147,23157,1820],{"class":157},[147,23159,23160,23162],{"class":149,"line":2895},[147,23161,5907],{"class":2237},[147,23163,5910],{"class":157},[147,23165,23166],{"class":149,"line":8222},[147,23167,1839],{"class":157},[367,23169,23171],{"id":23170},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22271,23173,23175],{"id":23174},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,23177,23178],{},"在c++中，类内的成员变量和成员函数分开存储",[19,23180,23181],{},"只有非静态成员变量才属于类的对象上",[23183,23184,23186],"h5",{"id":23185},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[138,23188,23190],{"className":388,"code":23189,"language":390,"meta":143,"style":143},"#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",[51,23191,23192,23199,23209,23215,23219,23223,23227,23235,23239,23243,23266,23270,23278,23282,23288],{"__ignoreMap":143},[147,23193,23194,23196],{"class":149,"line":150},[147,23195,2223],{"class":397},[147,23197,23198],{"class":504},"\u003Ciostraem>\n",[147,23200,23201,23203,23205,23207],{"class":149,"line":312},[147,23202,2231],{"class":397},[147,23204,2234],{"class":397},[147,23206,2238],{"class":2237},[147,23208,1565],{"class":157},[147,23210,23211,23213],{"class":149,"line":1454},[147,23212,14967],{"class":397},[147,23214,15444],{"class":2237},[147,23216,23217],{"class":149,"line":1469},[147,23218,1820],{"class":157},[147,23220,23221],{"class":149,"line":1475},[147,23222,2674],{"emptyLinePlaceholder":324},[147,23224,23225],{"class":149,"line":1489},[147,23226,4269],{"class":157},[147,23228,23229,23231,23233],{"class":149,"line":1495},[147,23230,5638],{"class":397},[147,23232,5862],{"class":2237},[147,23234,2250],{"class":157},[147,23236,23237],{"class":149,"line":1586},[147,23238,1820],{"class":157},[147,23240,23241],{"class":149,"line":1592},[147,23242,15586],{"class":157},[147,23244,23245,23247,23249,23252,23254,23257,23259,23261,23263],{"class":149,"line":1604},[147,23246,1825],{"class":157},[147,23248,1443],{"class":397},[147,23250,23251],{"class":504},"\"size of p=\"",[147,23253,1443],{"class":397},[147,23255,23256],{"class":2237},"sizeoif",[147,23258,6813],{"class":157},[147,23260,1443],{"class":397},[147,23262,1513],{"class":157},[147,23264,23265],{"class":458}," \u002F\u002F查看这个空类的占用的内存空间\n",[147,23267,23268],{"class":149,"line":1886},[147,23269,1839],{"class":157},[147,23271,23272,23274,23276],{"class":149,"line":1891},[147,23273,404],{"class":397},[147,23275,2247],{"class":2237},[147,23277,2250],{"class":157},[147,23279,23280],{"class":149,"line":1897},[147,23281,1820],{"class":157},[147,23283,23284,23286],{"class":149,"line":1902},[147,23285,5907],{"class":2237},[147,23287,5910],{"class":157},[147,23289,23290],{"class":149,"line":1916},[147,23291,1839],{"class":157},[19,23293,23294],{},"输出结果为：size of p=1",[19,23296,23297],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,23299,23300],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[23183,23302,23304],{"id":23303},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[138,23306,23308],{"className":388,"code":23307,"language":390,"meta":143,"style":143},"#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",[51,23309,23310,23316,23326,23334,23338,23347,23351,23359,23363,23367,23386,23390,23394,23402,23406,23412],{"__ignoreMap":143},[147,23311,23312,23314],{"class":149,"line":150},[147,23313,2223],{"class":397},[147,23315,2226],{"class":504},[147,23317,23318,23320,23322,23324],{"class":149,"line":312},[147,23319,2231],{"class":397},[147,23321,2234],{"class":397},[147,23323,2238],{"class":2237},[147,23325,1565],{"class":157},[147,23327,23328,23330,23332],{"class":149,"line":1454},[147,23329,14967],{"class":397},[147,23331,15842],{"class":2237},[147,23333,2948],{"class":157},[147,23335,23336],{"class":149,"line":1469},[147,23337,1820],{"class":157},[147,23339,23340,23342,23344],{"class":149,"line":1475},[147,23341,2259],{"class":397},[147,23343,15721],{"class":157},[147,23345,23346],{"class":458},"\u002F\u002F非静态成员变量\n",[147,23348,23349],{"class":149,"line":1489},[147,23350,4269],{"class":157},[147,23352,23353,23355,23357],{"class":149,"line":1495},[147,23354,5638],{"class":397},[147,23356,5862],{"class":2237},[147,23358,2250],{"class":157},[147,23360,23361],{"class":149,"line":1586},[147,23362,1820],{"class":157},[147,23364,23365],{"class":149,"line":1592},[147,23366,15586],{"class":157},[147,23368,23369,23371,23373,23375,23377,23379,23381,23383],{"class":149,"line":1604},[147,23370,1825],{"class":157},[147,23372,1443],{"class":397},[147,23374,23251],{"class":504},[147,23376,1647],{"class":397},[147,23378,6813],{"class":157},[147,23380,1443],{"class":397},[147,23382,1513],{"class":157},[147,23384,23385],{"class":458}," \u002F\u002F查看不是空对象时占用多少内存\n",[147,23387,23388],{"class":149,"line":1886},[147,23389,2674],{"emptyLinePlaceholder":324},[147,23391,23392],{"class":149,"line":1891},[147,23393,1839],{"class":157},[147,23395,23396,23398,23400],{"class":149,"line":1897},[147,23397,404],{"class":397},[147,23399,2247],{"class":2237},[147,23401,2250],{"class":157},[147,23403,23404],{"class":149,"line":1902},[147,23405,1820],{"class":157},[147,23407,23408,23410],{"class":149,"line":1916},[147,23409,5907],{"class":2237},[147,23411,5910],{"class":157},[147,23413,23414],{"class":149,"line":1921},[147,23415,1839],{"class":157},[19,23417,23418],{},"输出结果：size of p=4",[19,23420,23421],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[350,23423,23424],{},[353,23425,23426],{},"如果加上非静态成员变量，Person类修改如下",[138,23428,23430],{"className":388,"code":23429,"language":390,"meta":143,"style":143},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[51,23431,23432,23438,23442,23448,23456,23460,23465],{"__ignoreMap":143},[147,23433,23434,23436],{"class":149,"line":150},[147,23435,14967],{"class":397},[147,23437,15444],{"class":2237},[147,23439,23440],{"class":149,"line":312},[147,23441,1820],{"class":157},[147,23443,23444,23446],{"class":149,"line":1454},[147,23445,2259],{"class":397},[147,23447,21665],{"class":157},[147,23449,23450,23452,23454],{"class":149,"line":1469},[147,23451,11294],{"class":397},[147,23453,2656],{"class":397},[147,23455,21672],{"class":157},[147,23457,23458],{"class":149,"line":1475},[147,23459,4269],{"class":157},[147,23461,23462],{"class":149,"line":1489},[147,23463,23464],{"class":458},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[147,23466,23467,23469,23471,23473,23475,23477],{"class":149,"line":1495},[147,23468,404],{"class":397},[147,23470,15842],{"class":2237},[147,23472,22685],{"class":157},[147,23474,445],{"class":397},[147,23476,590],{"class":448},[147,23478,1565],{"class":157},[19,23480,23481],{},"输出结果：4",[19,23483,23484],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[350,23486,23487],{"start":312},[353,23488,23489],{},"加上非静态成员函数",[138,23491,23493],{"className":388,"code":23492,"language":390,"meta":143,"style":143},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[51,23494,23495,23502,23506,23512,23520,23524,23528,23532],{"__ignoreMap":143},[147,23496,23497,23499],{"class":149,"line":150},[147,23498,14967],{"class":397},[147,23500,23501],{"class":2237},"  Person\n",[147,23503,23504],{"class":149,"line":312},[147,23505,1820],{"class":157},[147,23507,23508,23510],{"class":149,"line":1454},[147,23509,2259],{"class":397},[147,23511,21665],{"class":157},[147,23513,23514,23516,23518],{"class":149,"line":1469},[147,23515,15182],{"class":397},[147,23517,11659],{"class":2237},[147,23519,2250],{"class":157},[147,23521,23522],{"class":149,"line":1475},[147,23523,2304],{"class":157},[147,23525,23526],{"class":149,"line":1489},[147,23527,2674],{"emptyLinePlaceholder":324},[147,23529,23530],{"class":149,"line":1495},[147,23531,2461],{"class":157},[147,23533,23534],{"class":149,"line":1586},[147,23535,4269],{"class":157},[19,23537,23538],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[350,23540,23541],{"start":1454},[353,23542,23543],{},"加上静态成员函数",[138,23545,23547],{"className":388,"code":23546,"language":390,"meta":143,"style":143},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[51,23548,23549,23555,23559,23565,23573,23577,23581,23585,23596,23600,23604,23608],{"__ignoreMap":143},[147,23550,23551,23553],{"class":149,"line":150},[147,23552,14967],{"class":397},[147,23554,23501],{"class":2237},[147,23556,23557],{"class":149,"line":312},[147,23558,1820],{"class":157},[147,23560,23561,23563],{"class":149,"line":1454},[147,23562,2259],{"class":397},[147,23564,21665],{"class":157},[147,23566,23567,23569,23571],{"class":149,"line":1469},[147,23568,15182],{"class":397},[147,23570,11659],{"class":2237},[147,23572,2250],{"class":157},[147,23574,23575],{"class":149,"line":1475},[147,23576,2304],{"class":157},[147,23578,23579],{"class":149,"line":1489},[147,23580,2674],{"emptyLinePlaceholder":324},[147,23582,23583],{"class":149,"line":1495},[147,23584,2461],{"class":157},[147,23586,23587,23589,23591,23594],{"class":149,"line":1586},[147,23588,11294],{"class":397},[147,23590,22840],{"class":397},[147,23592,23593],{"class":2237}," func1",[147,23595,2250],{"class":157},[147,23597,23598],{"class":149,"line":1592},[147,23599,2304],{"class":157},[147,23601,23602],{"class":149,"line":1604},[147,23603,2674],{"emptyLinePlaceholder":324},[147,23605,23606],{"class":149,"line":1886},[147,23607,2461],{"class":157},[147,23609,23610],{"class":149,"line":1891},[147,23611,4269],{"class":157},[19,23613,23481],{},[19,23615,23616],{},"解释：静态成员函数也不属于类上",[308,23618,7948],{},{"title":143,"searchDepth":312,"depth":312,"links":23620},[23621,23627],{"id":14918,"depth":312,"text":14919,"children":23622},[23623,23624,23625,23626],{"id":14922,"depth":1454,"text":14923},{"id":15647,"depth":1454,"text":15648},{"id":15819,"depth":1454,"text":15820},{"id":16278,"depth":1454,"text":16279},{"id":18650,"depth":312,"text":18651,"children":23628},[23629,23630,23631,23632,23633,23634,23635,23636,23637],{"id":18662,"depth":1454,"text":18663},{"id":18955,"depth":1454,"text":18956},{"id":19446,"depth":1454,"text":19447},{"id":20543,"depth":1454,"text":20544},{"id":20966,"depth":1454,"text":20967},{"id":21445,"depth":1454,"text":21446},{"id":21820,"depth":1454,"text":21821},{"id":22233,"depth":1454,"text":22234},{"id":23170,"depth":1454,"text":23171},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14883,"description":23638},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23645,"title":390,"body":23646,"description":321,"extension":322,"meta":23650,"navigation":324,"path":23652,"seo":23653,"stem":23654,"__hash__":23655},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23647,"toc":23648},[],{"title":143,"searchDepth":312,"depth":312,"links":23649},[],{"category":23651},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":390,"description":321},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23657,"title":23658,"body":23659,"description":143,"extension":322,"meta":24250,"navigation":324,"path":24251,"seo":24252,"stem":24253,"__hash__":24254},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23660,"toc":24232},[23661,23664,23668,23671,23674,23677,23695,23700,23703,23706,23709,23712,23717,23720,23725,23728,23731,23735,23738,23741,23747,23750,23768,23772,23776,23779,23784,23787,23791,23794,23807,23810,23814,23817,23820,23823,23848,23851,23860,23871,23886,23918,23922,23929,23937,23941,23944,23947,23952,23956,23959,23962,23967,23970,23974,23977,23980,23985,23988,23992,23997,24001,24068,24072,24075,24078,24081,24084,24087,24093,24114,24117,24131,24140,24144,24147,24150,24155,24158,24163,24168,24171,24174,24179,24184,24187,24192,24197,24200,24205,24210,24213,24216,24221,24224,24229],[10,23662,23658],{"id":23663},"_1强化学习基本认识",[14,23665,23667],{"id":23666},"_11什么是强化学习","1.1.什么是强化学习",[19,23669,23670],{},"强化学习有两部分组成：智能体和环境；",[19,23672,23673],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,23675,23676],{},"强化学习与监督学习的区别:",[350,23678,23679,23682,23685,23688],{},[353,23680,23681],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[353,23683,23684],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[353,23686,23687],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[353,23689,23690,23691,23694],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[234,23692,23693],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,23696,23697],{},[29,23698],{"alt":143,"src":23699},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,23701,23702],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,23704,23705],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,23707,23708],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,23710,23711],{},"获取奖励",[19,23713,23714],{},[29,23715],{"alt":143,"src":23716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,23718,23719],{},"强化学习可以分成标准强化学习和深度强化学习",[19,23721,23722],{},[29,23723],{"alt":143,"src":23724},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,23726,23727],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,23729,23730],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,23732,23734],{"id":23733},"_12强化学习应用场景","1.2.强化学习应用场景",[19,23736,23737],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,23739,23740],{},"具身智能中的应用",[19,23742,23743,23746],{},[234,23744,23745],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,23748,23749],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,23751,23752,23753,23756,23757,23760,23761,23764,23765],{},"机器人是",[234,23754,23755],{},"躯体","，深度学习是",[234,23758,23759],{},"神经元****网络","，VLA是",[234,23762,23763],{},"通用的行为逻辑","，而强化学习是",[234,23766,23767],{},"教练",[14,23769,23771],{"id":23770},"_13序列决策","1.3.序列决策",[367,23773,23775],{"id":23774},"_131智能体与环境","1.3.1.智能体与环境",[19,23777,23778],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,23780,23781],{},[29,23782],{"alt":143,"src":23783},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,23785,23786],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[367,23788,23790],{"id":23789},"_132奖励","1.3.2.奖励",[19,23792,23793],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,23795,23796,23797,23806],{},"取某个策略的表现如何。强化学习的目的就是",[234,23798,23799,23800,23805],{},"最大化",[234,23801,23802],{},[234,23803,23804],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,23808,23809],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[367,23811,23813],{"id":23812},"_133序列决策","1.3.3.序列决策",[19,23815,23816],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,23818,23819],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,23821,23822],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,23824,23825,23829,23830,23832,23833,23835,23836,23838,23839,249,23842,249,23845],{},[23826,23827,23828],"em",{},"Ht"," = ",[23826,23831,995],{},"1*, a",[23826,23834,616],{},", r",[23826,23837,616],{},", . . . ,* ",[23826,23840,23841],{},"ot",[23826,23843,23844],{},", at ,",[23826,23846,23847],{},"rt",[19,23849,23850],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,23852,23853,23829,23856,1932,23858,828],{},[23826,23854,23855],{},"st",[23826,23857,452],{},[23826,23859,23828],{},[19,23861,23862,23863,23866,23867,23870],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[234,23864,23865],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[234,23868,23869],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,23872,23873,23874,23877,23878,23881,23882,23885],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[234,23875,23876],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[234,23879,23880],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23826,23883,23884],{},"S, A, T, R, Ω, O, γ",")。",[19,23887,23888,23889,23891,23892,23894,23895,401,23897,23900,23901,23903,23904,401,23907,23910,23911,23913,23914,23917],{},"其中 ",[23826,23890,1088],{}," 表示状态空间，为隐变量，",[23826,23893,631],{}," 为动作空间，",[23826,23896,1113],{},[23826,23898,23899],{},"s ′ |s, a",") 为状态转移概率，",[23826,23902,1063],{}," 为奖励函数，",[23826,23905,23906],{},"Ω",[23826,23908,23909],{},"o|s, a",") 为观测概率，",[23826,23912,989],{}," 为观测空间，",[23826,23915,23916],{},"γ"," 为折扣因子。",[14,23919,23921],{"id":23920},"_14动作空间","1.4.动作空间",[19,23923,23924,23925,23928],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[234,23926,23927],{},"动作空间"," ，动作空间分为:",[350,23930,23931,23934],{},[353,23932,23933],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[353,23935,23936],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,23938,23940],{"id":23939},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,23942,23943],{},"由策略、价值函数、模型三部分组成",[19,23945,23946],{},"这三者组成马尔可夫决策过程",[19,23948,23949],{},[29,23950],{"alt":143,"src":23951},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[367,23953,23955],{"id":23954},"_151策略","1.5.1.策略",[19,23957,23958],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,23960,23961],{},"策略可分为两种：",[19,23963,23964],{},[29,23965],{"alt":143,"src":23966},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,23968,23969],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[367,23971,23973],{"id":23972},"_152价值函数","1.5.2.价值函数",[19,23975,23976],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,23978,23979],{},"价值函数中有一个折扣因子，类似于存款利息",[19,23981,23982],{},[29,23983],{"alt":143,"src":23984},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,23986,23987],{},"进入某个状态采取的最优动作可以通过Q函数得到",[367,23989,23991],{"id":23990},"_153模型","1.5.3.模型",[19,23993,23994],{},[29,23995],{"alt":143,"src":23996},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,23998,24000],{"id":23999},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[537,24002,24003,24014],{},[540,24004,24005],{},[543,24006,24007,24011],{},[546,24008,24010],{"align":24009},"left","类型",[546,24012,24013],{"align":24009},"特点",[583,24015,24016,24026,24036,24046,24058],{},[543,24017,24018,24023],{},[588,24019,24020],{"align":24009},[234,24021,24022],{},"基于价值的智能体",[588,24024,24025],{"align":24009},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[543,24027,24028,24033],{},[588,24029,24030],{"align":24009},[234,24031,24032],{},"基于策略的智能体",[588,24034,24035],{"align":24009},"直接学习策略，没有学习价值函数",[543,24037,24038,24043],{},[588,24039,24040],{"align":24009},[234,24041,24042],{},"演员-评论员智能体",[588,24044,24045],{"align":24009},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[543,24047,24048,24053],{},[588,24049,24050],{"align":24009},[234,24051,24052],{},"有模型强化学习智能体",[588,24054,24055],{"align":24009},[29,24056],{"alt":143,"src":24057},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[543,24059,24060,24065],{},[588,24061,24062],{"align":24009},[234,24063,24064],{},"免模型强化学习智能体",[588,24066,24067],{"align":24009},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,24069,24071],{"id":24070},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,24073,24074],{},"学习和规划是序列决策的两个基本问题",[19,24076,24077],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,24079,24080],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,24082,24083],{},"强化学习用到的库：Gym",[19,24085,24086],{},"Gym可以检验强化学习算法的优劣",[19,24088,24089,24092],{},[234,24090,24091],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[138,24094,24098],{"className":24095,"code":24096,"language":24097,"meta":143,"style":143},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[51,24099,24100],{"__ignoreMap":143},[147,24101,24102,24105,24108,24111],{"class":149,"line":150},[147,24103,24104],{"class":2237},"pip",[147,24106,24107],{"class":504}," install",[147,24109,24110],{"class":504}," gym==",[147,24112,24113],{"class":448},"0.25.2\n",[19,24115,24116],{},"显示图形界面需要",[138,24118,24120],{"className":24095,"code":24119,"language":24097,"meta":143,"style":143},"pip install pygame\n",[51,24121,24122],{"__ignoreMap":143},[147,24123,24124,24126,24128],{"class":149,"line":150},[147,24125,24104],{"class":2237},[147,24127,24107],{"class":504},[147,24129,24130],{"class":504}," pygame\n",[19,24132,24133,24134],{},"有关Gym库的相关文档介绍：",[637,24135,24139],{"href":24136,"rel":24137},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[24138],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,24141,24143],{"id":24142},"_18一些补充基础概念","1.8.一些补充基础概念",[19,24145,24146],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,24148,24149],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,24151,24152],{},[29,24153],{"alt":143,"src":24154},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,24156,24157],{},"折扣率需要自己来设定",[19,24159,24160],{},[29,24161],{"alt":143,"src":24162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[350,24164,24165],{},[353,24166,24167],{},"状态转移函数：",[19,24169,24170],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,24172,24173],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,24175,24176],{},[29,24177],{"alt":143,"src":24178},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[350,24180,24181],{"start":312},[353,24182,24183],{},"动作价值函数：",[19,24185,24186],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,24188,24189],{},[29,24190],{"alt":143,"src":24191},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[350,24193,24194],{"start":1454},[353,24195,24196],{},"最优动作价值函数：",[19,24198,24199],{},"这个函数是对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,24201,24202],{},[29,24203],{"alt":143,"src":24204},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[350,24206,24207],{"start":1469},[353,24208,24209],{},"状态价值函数:",[19,24211,24212],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,24214,24215],{},"它衡量的是“一个具体动作”的长期价值",[19,24217,24218],{},[29,24219],{"alt":143,"src":24220},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,24222,24223],{},"几个价值函数之间的比较：",[19,24225,24226],{},[29,24227],{"alt":143,"src":24228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[308,24230,24231],{},"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":143,"searchDepth":312,"depth":312,"links":24233},[24234,24235,24236,24241,24242,24247,24248,24249],{"id":23666,"depth":312,"text":23667},{"id":23733,"depth":312,"text":23734},{"id":23770,"depth":312,"text":23771,"children":24237},[24238,24239,24240],{"id":23774,"depth":1454,"text":23775},{"id":23789,"depth":1454,"text":23790},{"id":23812,"depth":1454,"text":23813},{"id":23920,"depth":312,"text":23921},{"id":23939,"depth":312,"text":23940,"children":24243},[24244,24245,24246],{"id":23954,"depth":1454,"text":23955},{"id":23972,"depth":1454,"text":23973},{"id":23990,"depth":1454,"text":23991},{"id":23999,"depth":312,"text":24000},{"id":24070,"depth":312,"text":24071},{"id":24142,"depth":312,"text":24143},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23658,"description":143},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":24256,"title":24257,"body":24258,"description":24265,"extension":322,"meta":24276,"navigation":324,"path":24277,"seo":24278,"stem":24279,"__hash__":24280},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":24259,"toc":24274},[24260,24263,24266,24271],[10,24261,24257],{"id":24262},"_2马尔可夫决策过程",[19,24264,24265],{},"这是强化学习的基本框架",[19,24267,24268],{},[29,24269],{"alt":143,"src":24270},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,24272,24273],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":143,"searchDepth":312,"depth":312,"links":24275},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":24257,"description":24265},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24282,"title":24283,"body":24284,"description":143,"extension":322,"meta":24400,"navigation":324,"path":24401,"seo":24402,"stem":24403,"__hash__":24404},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24285,"toc":24395},[24286,24289,24293,24296,24301,24306,24309,24314,24317,24322,24325,24329,24334,24337,24342,24347,24352,24355,24359,24364,24367,24372,24377,24382,24387,24390],[10,24287,24283],{"id":24288},"_3动作价值函数",[14,24290,24292],{"id":24291},"_31dqn","3.1.DQN",[19,24294,24295],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,24297,24298],{},[29,24299],{"alt":143,"src":24300},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,24302,24303],{},[29,24304],{"alt":143,"src":24305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,24307,24308],{},"DQN算法的描述：",[19,24310,24311],{},[29,24312],{"alt":143,"src":24313},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,24315,24316],{},"这里的Dense指的是全连接层",[19,24318,24319],{},[29,24320],{"alt":143,"src":24321},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,24323,24324],{},"当前观测的状态为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,24326,24328],{"id":24327},"_32dqn的举例","3.2.DQN的举例",[19,24330,24331],{},[29,24332],{"alt":143,"src":24333},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,24335,24336],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,24338,24339],{},[29,24340],{"alt":143,"src":24341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,24343,24344],{},[29,24345],{"alt":143,"src":24346},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,24348,24349],{},[29,24350],{"alt":143,"src":24351},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,24353,24354],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,24356,24358],{"id":24357},"_33td算法","3.3.TD算法",[19,24360,24361],{},[29,24362],{"alt":143,"src":24363},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,24365,24366],{},"强化学习TD算法公式的粗略解释：",[19,24368,24369],{},[29,24370],{"alt":143,"src":24371},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,24373,24374],{},[29,24375],{"alt":143,"src":24376},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,24378,24379],{},[29,24380],{"alt":143,"src":24381},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,24383,24384],{},[29,24385],{"alt":143,"src":24386},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,24388,24389],{},"TD算法总结：",[19,24391,24392],{},[29,24393],{"alt":143,"src":24394},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":143,"searchDepth":312,"depth":312,"links":24396},[24397,24398,24399],{"id":24291,"depth":312,"text":24292},{"id":24327,"depth":312,"text":24328},{"id":24357,"depth":312,"text":24358},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24283,"description":143},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24406,"title":24407,"body":24408,"description":143,"extension":322,"meta":24641,"navigation":324,"path":24642,"seo":24643,"stem":24644,"__hash__":24645},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24409,"toc":24637},[24410,24413,24417,24420,24423,24428,24433,24436,24441,24446,24449,24454,24457,24462,24465,24470,24473,24478,24481,24486,24491,24494,24499,24502,24505,24510,24513,24518,24523,24527,24530,24533,24538,24543,24546,24551,24556,24559,24564,24567,24570,24575,24578,24583,24586,24591,24596,24599,24604,24609,24612,24617,24620,24625,24628],[10,24411,24407],{"id":24412},"_4策略学习",[14,24414,24416],{"id":24415},"_41概念描述","4.1.概念描述",[19,24418,24419],{},"用神经网络（策略网络）近似策略函数",[19,24421,24422],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,24424,24425],{},[29,24426],{"alt":143,"src":24427},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,24429,24430],{},[29,24431],{"alt":143,"src":24432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,24434,24435],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,24437,24438],{},[29,24439],{"alt":143,"src":24440},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,24442,24443],{},[29,24444],{"alt":143,"src":24445},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,24447,24448],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,24450,24451],{},[29,24452],{"alt":143,"src":24453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,24455,24456],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,24458,24459],{},[29,24460],{"alt":143,"src":24461},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,24463,24464],{},"改进theta要用到策略梯度算法",[19,24466,24467],{},[29,24468],{"alt":143,"src":24469},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,24471,24472],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,24474,24475],{},[29,24476],{"alt":143,"src":24477},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,24479,24480],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,24482,24483],{},[29,24484],{"alt":143,"src":24485},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,24487,24488],{},[29,24489],{"alt":143,"src":24490},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,24492,24493],{},"梯度公式总结：",[19,24495,24496],{},[29,24497],{"alt":143,"src":24498},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,24500,24501],{},"两个公式的分别应用场景：",[19,24503,24504],{},"对于离散的动作：",[19,24506,24507],{},[29,24508],{"alt":143,"src":24509},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,24511,24512],{},"对于连续的动作：",[19,24514,24515],{},[29,24516],{"alt":143,"src":24517},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,24519,24520],{},[29,24521],{"alt":143,"src":24522},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,24524,24526],{"id":24525},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,24528,24529],{},"使用蒙特卡洛来近似计算策略梯度",[19,24531,24532],{},"蒙特卡洛法的解释如下：",[19,24534,24535],{},[29,24536],{"alt":143,"src":24537},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,24539,24540],{},[29,24541],{"alt":143,"src":24542},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,24544,24545],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[350,24547,24548],{},[353,24549,24550],{},"方法一：reinforce算法",[19,24552,24553],{},[29,24554],{"alt":143,"src":24555},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,24557,24558],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[350,24560,24561],{"start":312},[353,24562,24563],{},"方法二：actor-critic算法",[19,24565,24566],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,24568,24569],{},"两个网络的构建：",[19,24571,24572],{},[29,24573],{"alt":143,"src":24574},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,24576,24577],{},"actor网路：",[19,24579,24580],{},[29,24581],{"alt":143,"src":24582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,24584,24585],{},"critic网络",[19,24587,24588],{},[29,24589],{"alt":143,"src":24590},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[350,24592,24593],{"start":1454},[353,24594,24595],{},"网络的训练",[19,24597,24598],{},"网络描述",[19,24600,24601],{},[29,24602],{"alt":143,"src":24603},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,24605,24606],{},[29,24607],{"alt":143,"src":24608},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,24610,24611],{},"TD算法更新梯度：",[19,24613,24614],{},[29,24615],{"alt":143,"src":24616},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,24618,24619],{},"策略网络更新梯度：",[19,24621,24622],{},[29,24623],{"alt":143,"src":24624},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,24626,24627],{},"训练整个流程的具体描述：",[19,24629,24630,24633,24634],{},[29,24631],{"alt":143,"src":24632},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[29,24635],{"alt":143,"src":24636},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":143,"searchDepth":312,"depth":312,"links":24638},[24639,24640],{"id":24415,"depth":312,"text":24416},{"id":24525,"depth":312,"text":24526},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24407,"description":143},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24647,"title":24648,"body":24649,"description":24656,"extension":322,"meta":24706,"navigation":324,"path":24707,"seo":24708,"stem":24709,"__hash__":24710},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24650,"toc":24702},[24651,24654,24657,24661,24664,24669,24673,24676,24681,24684,24689,24694,24697],[10,24652,24648],{"id":24653},"_5alphago算法",[19,24655,24656],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,24658,24660],{"id":24659},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,24662,24663],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,24665,24666],{},[29,24667],{"alt":143,"src":24668},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,24670,24672],{"id":24671},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,24674,24675],{},"采用强化学习的方式训练策略网络",[19,24677,24678],{},[29,24679],{"alt":143,"src":24680},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,24682,24683],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,24685,24686],{},[29,24687],{"alt":143,"src":24688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,24690,24691],{},[29,24692],{"alt":143,"src":24693},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,24695,24696],{},"强化学习训练策略网络的总结：",[19,24698,24699],{},[29,24700],{"alt":143,"src":24701},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":143,"searchDepth":312,"depth":312,"links":24703},[24704,24705],{"id":24659,"depth":312,"text":24660},{"id":24671,"depth":312,"text":24672},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24648,"description":24656},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24712,"title":24713,"body":24714,"description":24721,"extension":322,"meta":24724,"navigation":324,"path":24725,"seo":24726,"stem":24727,"__hash__":24728},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24715,"toc":24722},[24716,24719],[10,24717,24713],{"id":24718},"_6价值网络",[19,24720,24721],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":143,"searchDepth":312,"depth":312,"links":24723},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24713,"description":24721},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24730,"title":24731,"body":24732,"description":24736,"extension":322,"meta":24737,"navigation":324,"path":24738,"seo":24739,"stem":24740,"__hash__":24741},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24733,"toc":24734},[],{"title":143,"searchDepth":312,"depth":312,"links":24735},[],"记录自己的强化学习笔记。",{"category":23651},"\u002Fwiki\u002F2025-12-04",{"title":24731,"description":24736},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24743,"title":24744,"body":24745,"description":321,"extension":322,"meta":24784,"navigation":324,"path":24785,"seo":24786,"stem":24787,"__hash__":24788},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24746,"toc":24782},[24747,24750,24753,24759,24762,24768,24771,24776,24779],[10,24748,24744],{"id":24749},"_1-项目概览与官方资源",[19,24751,24752],{},"官方文档：",[19,24754,24755],{},[637,24756,24757],{"href":24757,"rel":24758},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[24138],[19,24760,24761],{},"官方代码仓库：",[19,24763,24764],{},[637,24765,24766],{"href":24766,"rel":24767},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[24138],[19,24769,24770],{},"复现大体流程：",[19,24772,24773],{},[29,24774],{"alt":143,"src":24775},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,24777,24778],{},"本教程的目标是打通这条链路：",[19,24780,24781],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":143,"searchDepth":312,"depth":312,"links":24783},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24744,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24790,"title":24791,"body":24792,"description":321,"extension":322,"meta":24908,"navigation":324,"path":24909,"seo":24910,"stem":24911,"__hash__":24912},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24793,"toc":24903},[24794,24797,24801,24804,24811,24815,24818,24827,24837,24841,24871,24874,24900],[10,24795,24791],{"id":24796},"_2-环境准备与设备连接",[14,24798,24800],{"id":24799},"_21-系统与环境","2.1 系统与环境",[19,24802,24803],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,24805,24806,24807,24810],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[51,24808,24809],{},"lerobot"," 依赖。",[14,24812,24814],{"id":24813},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,24816,24817],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[138,24819,24821],{"className":24095,"code":24820,"language":24097,"meta":143,"style":143},"lerobot-find-out\n",[51,24822,24823],{"__ignoreMap":143},[147,24824,24825],{"class":149,"line":150},[147,24826,24820],{"class":2237},[19,24828,24829,24830,611,24833,24836],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[51,24831,24832],{},"\u002Fdev\u002FttyACM0",[51,24834,24835],{},"\u002Fdev\u002FttyACM1","）。",[14,24838,24840],{"id":24839},"_23-串口授权","2.3 串口授权",[138,24842,24844],{"className":24095,"code":24843,"language":24097,"meta":143,"style":143},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[51,24845,24846,24860],{"__ignoreMap":143},[147,24847,24848,24851,24854,24857],{"class":149,"line":150},[147,24849,24850],{"class":2237},"sudo",[147,24852,24853],{"class":504}," chmod",[147,24855,24856],{"class":448}," 666",[147,24858,24859],{"class":504}," \u002Fdev\u002FttyACM0\n",[147,24861,24862,24864,24866,24868],{"class":149,"line":312},[147,24863,24850],{"class":2237},[147,24865,24853],{"class":504},[147,24867,24856],{"class":448},[147,24869,24870],{"class":504}," \u002Fdev\u002FttyACM1\n",[19,24872,24873],{},"说明：",[1406,24875,24876,24881,24887,24897],{},[353,24877,24878,24880],{},[51,24879,24850],{},"：以 root 权限执行命令。",[353,24882,24883,24886],{},[51,24884,24885],{},"chmod","：修改设备节点权限。",[353,24888,24889,24892,24893,24896],{},[51,24890,24891],{},"666","：",[51,24894,24895],{},"rw-rw-rw-","，所有用户可读写。",[353,24898,24899],{},"串口号必须替换为你机器上的真实端口。",[308,24901,24902],{},"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":143,"searchDepth":312,"depth":312,"links":24904},[24905,24906,24907],{"id":24799,"depth":312,"text":24800},{"id":24813,"depth":312,"text":24814},{"id":24839,"depth":312,"text":24840},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24791,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24914,"title":24915,"body":24916,"description":321,"extension":322,"meta":25077,"navigation":324,"path":25078,"seo":25079,"stem":25080,"__hash__":25081},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24917,"toc":25073},[24918,24922,24926,24932,24935,24992,24995,24999,25002,25070],[10,24919,24921],{"id":24920},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,24923,24925],{"id":24924},"_31-配置电机-id","3.1 配置电机 ID",[19,24927,24928,24929,24931],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[51,24930,616],{},"，需要改成机械臂链路里不冲突的编号。",[19,24933,24934],{},"方式一：用 LeRobot 命令逐步写入。",[138,24936,24938],{"className":24095,"code":24937,"language":24097,"meta":143,"style":143},"# 主臂舵机配置 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",[51,24939,24940,24945,24953,24960,24965,24969,24974,24980,24987],{"__ignoreMap":143},[147,24941,24942],{"class":149,"line":150},[147,24943,24944],{"class":458},"# 主臂舵机配置 ID\n",[147,24946,24947,24950],{"class":149,"line":312},[147,24948,24949],{"class":2237},"lerobot-setup-motors",[147,24951,24952],{"class":448}," \\\n",[147,24954,24955,24958],{"class":149,"line":1454},[147,24956,24957],{"class":448},"  --teleop.type=so101_leader",[147,24959,24952],{"class":448},[147,24961,24962],{"class":149,"line":1469},[147,24963,24964],{"class":448},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[147,24966,24967],{"class":149,"line":1475},[147,24968,2674],{"emptyLinePlaceholder":324},[147,24970,24971],{"class":149,"line":1489},[147,24972,24973],{"class":458},"# 从臂舵机配置 ID\n",[147,24975,24976,24978],{"class":149,"line":1495},[147,24977,24949],{"class":2237},[147,24979,24952],{"class":448},[147,24981,24982,24985],{"class":149,"line":1586},[147,24983,24984],{"class":448},"  --robot.type=so101_follower",[147,24986,24952],{"class":448},[147,24988,24989],{"class":149,"line":1592},[147,24990,24991],{"class":448},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,24993,24994],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,24996,24998],{"id":24997},"_32-机械臂校准","3.2 机械臂校准",[19,25000,25001],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[138,25003,25005],{"className":24095,"code":25004,"language":24097,"meta":143,"style":143},"# 主臂校准\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",[51,25006,25007,25012,25019,25025,25032,25037,25041,25046,25052,25058,25065],{"__ignoreMap":143},[147,25008,25009],{"class":149,"line":150},[147,25010,25011],{"class":458},"# 主臂校准\n",[147,25013,25014,25017],{"class":149,"line":312},[147,25015,25016],{"class":2237},"lerobot-calibrate",[147,25018,24952],{"class":448},[147,25020,25021,25023],{"class":149,"line":1454},[147,25022,24957],{"class":448},[147,25024,24952],{"class":448},[147,25026,25027,25030],{"class":149,"line":1469},[147,25028,25029],{"class":448},"  --teleop.port=\u002Fdev\u002FttyACM0",[147,25031,24952],{"class":448},[147,25033,25034],{"class":149,"line":1475},[147,25035,25036],{"class":448},"  --teleop.id=my_awesome_leader_arm\n",[147,25038,25039],{"class":149,"line":1489},[147,25040,2674],{"emptyLinePlaceholder":324},[147,25042,25043],{"class":149,"line":1495},[147,25044,25045],{"class":458},"# 从臂校准\n",[147,25047,25048,25050],{"class":149,"line":1586},[147,25049,25016],{"class":2237},[147,25051,24952],{"class":448},[147,25053,25054,25056],{"class":149,"line":1592},[147,25055,24984],{"class":448},[147,25057,24952],{"class":448},[147,25059,25060,25063],{"class":149,"line":1604},[147,25061,25062],{"class":448},"  --robot.port=\u002Fdev\u002FttyACM1",[147,25064,24952],{"class":448},[147,25066,25067],{"class":149,"line":1886},[147,25068,25069],{"class":448},"  --robot.id=my_awesome_follower_arm\n",[308,25071,25072],{},"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":143,"searchDepth":312,"depth":312,"links":25074},[25075,25076],{"id":24924,"depth":312,"text":24925},{"id":24997,"depth":312,"text":24998},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24915,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":25083,"title":25084,"body":25085,"description":321,"extension":322,"meta":25276,"navigation":324,"path":25277,"seo":25278,"stem":25279,"__hash__":25280},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":25086,"toc":25272},[25087,25090,25094,25141,25145,25158,25221,25224,25269],[10,25088,25084],{"id":25089},"_4-遥操与相机接入",[14,25091,25093],{"id":25092},"_41-不带相机遥操","4.1 不带相机遥操",[138,25095,25097],{"className":24095,"code":25096,"language":24097,"meta":143,"style":143},"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",[51,25098,25099,25106,25112,25118,25125,25131,25137],{"__ignoreMap":143},[147,25100,25101,25104],{"class":149,"line":150},[147,25102,25103],{"class":2237},"lerobot-teleoperate",[147,25105,24952],{"class":448},[147,25107,25108,25110],{"class":149,"line":312},[147,25109,24984],{"class":448},[147,25111,24952],{"class":448},[147,25113,25114,25116],{"class":149,"line":1454},[147,25115,25062],{"class":448},[147,25117,24952],{"class":448},[147,25119,25120,25123],{"class":149,"line":1469},[147,25121,25122],{"class":448},"  --robot.id=my_awesome_follower_arm",[147,25124,24952],{"class":448},[147,25126,25127,25129],{"class":149,"line":1475},[147,25128,24957],{"class":448},[147,25130,24952],{"class":448},[147,25132,25133,25135],{"class":149,"line":1489},[147,25134,25029],{"class":448},[147,25136,24952],{"class":448},[147,25138,25139],{"class":149,"line":1495},[147,25140,25036],{"class":448},[14,25142,25144],{"id":25143},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[138,25146,25148],{"className":24095,"code":25147,"language":24097,"meta":143,"style":143},"lerobot-find-cameras opencv\n",[51,25149,25150],{"__ignoreMap":143},[147,25151,25152,25155],{"class":149,"line":150},[147,25153,25154],{"class":2237},"lerobot-find-cameras",[147,25156,25157],{"class":504}," opencv\n",[138,25159,25161],{"className":24095,"code":25160,"language":24097,"meta":143,"style":143},"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",[51,25162,25163,25169,25175,25181,25187,25197,25203,25209,25216],{"__ignoreMap":143},[147,25164,25165,25167],{"class":149,"line":150},[147,25166,25103],{"class":2237},[147,25168,24952],{"class":448},[147,25170,25171,25173],{"class":149,"line":312},[147,25172,24984],{"class":448},[147,25174,24952],{"class":448},[147,25176,25177,25179],{"class":149,"line":1454},[147,25178,25062],{"class":448},[147,25180,24952],{"class":448},[147,25182,25183,25185],{"class":149,"line":1469},[147,25184,25122],{"class":448},[147,25186,24952],{"class":448},[147,25188,25189,25192,25195],{"class":149,"line":1475},[147,25190,25191],{"class":448},"  --robot.cameras=",[147,25193,25194],{"class":504},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[147,25196,24952],{"class":448},[147,25198,25199,25201],{"class":149,"line":1489},[147,25200,24957],{"class":448},[147,25202,24952],{"class":448},[147,25204,25205,25207],{"class":149,"line":1495},[147,25206,25029],{"class":448},[147,25208,24952],{"class":448},[147,25210,25211,25214],{"class":149,"line":1586},[147,25212,25213],{"class":448},"  --teleop.id=my_awesome_leader_arm",[147,25215,24952],{"class":448},[147,25217,25218],{"class":149,"line":1592},[147,25219,25220],{"class":448},"  --display_data=true\n",[19,25222,25223],{},"相机参数说明：",[1406,25225,25226,25232,25238,25247,25257,25263],{},[353,25227,25228,25231],{},[51,25229,25230],{},"front","：相机名称。",[353,25233,25234,25237],{},[51,25235,25236],{},"type: opencv","：相机驱动类型。",[353,25239,25240,25243,25244,24836],{},[51,25241,25242],{},"index_or_path","：设备编号或设备路径（如 ",[51,25245,25246],{},"\u002Fdev\u002Fvideo4",[353,25248,25249,25252,25253,25256],{},[51,25250,25251],{},"width"," \u002F ",[51,25254,25255],{},"height","：图像分辨率。",[353,25258,25259,25262],{},[51,25260,25261],{},"fps","：采样帧率。",[353,25264,25265,25268],{},[51,25266,25267],{},"--display_data=true","：启用实时可视化。",[308,25270,25271],{},"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":143,"searchDepth":312,"depth":312,"links":25273},[25274,25275],{"id":25092,"depth":312,"text":25093},{"id":25143,"depth":312,"text":25144},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":25084,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25282,"title":25283,"body":25284,"description":321,"extension":322,"meta":25456,"navigation":324,"path":25457,"seo":25458,"stem":25459,"__hash__":25460},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25285,"toc":25451},[25286,25290,25294,25299,25304,25307,25349,25355,25359,25408,25413,25417,25420,25428,25433,25438,25443,25448],[10,25287,25289],{"id":25288},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,25291,25293],{"id":25292},"_51-生成访问令牌","5.1 生成访问令牌",[19,25295,25296],{},[29,25297],{"alt":143,"src":25298},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,25300,25301],{},[29,25302],{"alt":143,"src":25303},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,25305,25306],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[138,25308,25310],{"className":24095,"code":25309,"language":24097,"meta":143,"style":143},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[51,25311,25312,25325],{"__ignoreMap":143},[147,25313,25314,25317,25320,25322],{"class":149,"line":150},[147,25315,25316],{"class":397},"export",[147,25318,25319],{"class":157}," HF_TOKEN",[147,25321,445],{"class":397},[147,25323,25324],{"class":504},"\"your_huggingface_token\"\n",[147,25326,25327,25330,25333,25336,25339,25341,25344,25346],{"class":149,"line":312},[147,25328,25329],{"class":2237},"hf",[147,25331,25332],{"class":504}," auth",[147,25334,25335],{"class":504}," login",[147,25337,25338],{"class":448}," --token",[147,25340,9998],{"class":504},[147,25342,25343],{"class":157},"$HF_TOKEN",[147,25345,650],{"class":504},[147,25347,25348],{"class":448}," --add-to-git-credential\n",[19,25350,25351,25354],{},[51,25352,25353],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,25356,25358],{"id":25357},"_52-验证登录","5.2 验证登录",[138,25360,25362],{"className":24095,"code":25361,"language":24097,"meta":143,"style":143},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[51,25363,25364,25395],{"__ignoreMap":143},[147,25365,25366,25369,25371,25374,25376,25378,25381,25384,25387,25390,25393],{"class":149,"line":150},[147,25367,25368],{"class":157},"HF_USER",[147,25370,445],{"class":397},[147,25372,25373],{"class":157},"$(",[147,25375,25329],{"class":2237},[147,25377,25332],{"class":504},[147,25379,25380],{"class":504}," whoami",[147,25382,25383],{"class":397}," |",[147,25385,25386],{"class":2237}," head",[147,25388,25389],{"class":448}," -n",[147,25391,25392],{"class":448}," 1",[147,25394,407],{"class":157},[147,25396,25397,25400,25402,25405],{"class":149,"line":312},[147,25398,25399],{"class":448},"echo",[147,25401,9998],{"class":504},[147,25403,25404],{"class":157},"$HF_USER",[147,25406,25407],{"class":504},"\"\n",[19,25409,25410],{},[29,25411],{"alt":143,"src":25412},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,25414,25416],{"id":25415},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,25418,25419],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1406,25421,25422,25425],{},[353,25423,25424],{},"Dataset Repo（用于上传演示数据）",[353,25426,25427],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,25429,25430],{},[29,25431],{"alt":143,"src":25432},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,25434,25435],{},[29,25436],{"alt":143,"src":25437},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,25439,25440],{},[29,25441],{"alt":143,"src":25442},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,25444,25445],{},[29,25446],{"alt":143,"src":25447},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[308,25449,25450],{},"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":143,"searchDepth":312,"depth":312,"links":25452},[25453,25454,25455],{"id":25292,"depth":312,"text":25293},{"id":25357,"depth":312,"text":25358},{"id":25415,"depth":312,"text":25416},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25283,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25462,"title":25463,"body":25464,"description":321,"extension":322,"meta":25661,"navigation":324,"path":25662,"seo":25663,"stem":25664,"__hash__":25665},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25465,"toc":25656},[25466,25470,25474,25570,25578,25583,25587,25603,25606,25610,25653],[10,25467,25469],{"id":25468},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,25471,25473],{"id":25472},"_61-录制示教数据","6.1 录制示教数据",[138,25475,25477],{"className":24095,"code":25476,"language":24097,"meta":143,"style":143},"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",[51,25478,25479,25486,25492,25498,25504,25513,25519,25525,25531,25538,25548,25555,25565],{"__ignoreMap":143},[147,25480,25481,25484],{"class":149,"line":150},[147,25482,25483],{"class":2237},"lerobot-record",[147,25485,24952],{"class":448},[147,25487,25488,25490],{"class":149,"line":312},[147,25489,24984],{"class":448},[147,25491,24952],{"class":448},[147,25493,25494,25496],{"class":149,"line":1454},[147,25495,25062],{"class":448},[147,25497,24952],{"class":448},[147,25499,25500,25502],{"class":149,"line":1469},[147,25501,25122],{"class":448},[147,25503,24952],{"class":448},[147,25505,25506,25508,25511],{"class":149,"line":1475},[147,25507,25191],{"class":448},[147,25509,25510],{"class":504},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[147,25512,24952],{"class":448},[147,25514,25515,25517],{"class":149,"line":1489},[147,25516,24957],{"class":448},[147,25518,24952],{"class":448},[147,25520,25521,25523],{"class":149,"line":1495},[147,25522,25029],{"class":448},[147,25524,24952],{"class":448},[147,25526,25527,25529],{"class":149,"line":1586},[147,25528,25213],{"class":448},[147,25530,24952],{"class":448},[147,25532,25533,25536],{"class":149,"line":1592},[147,25534,25535],{"class":448},"  --display_data=true",[147,25537,24952],{"class":448},[147,25539,25540,25543,25546],{"class":149,"line":1604},[147,25541,25542],{"class":448},"  --dataset.repo_id=",[147,25544,25545],{"class":504},"\"Embodied-AI-6\u002Fso101_test\"",[147,25547,24952],{"class":448},[147,25549,25550,25553],{"class":149,"line":1886},[147,25551,25552],{"class":448},"  --dataset.num_episodes=10",[147,25554,24952],{"class":448},[147,25556,25557,25560,25563],{"class":149,"line":1891},[147,25558,25559],{"class":448},"  --dataset.single_task=",[147,25561,25562],{"class":504},"\"Grab the green cube\"",[147,25564,24952],{"class":448},[147,25566,25567],{"class":149,"line":1897},[147,25568,25569],{"class":448},"  --resume=true\n",[1406,25571,25572],{},[353,25573,25574,25577],{},[51,25575,25576],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,25579,25580],{},[29,25581],{"alt":143,"src":25582},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,25584,25586],{"id":25585},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[138,25588,25590],{"className":24095,"code":25589,"language":24097,"meta":143,"style":143},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[51,25591,25592],{"__ignoreMap":143},[147,25593,25594,25597,25600],{"class":149,"line":150},[147,25595,25596],{"class":2237},"rm",[147,25598,25599],{"class":448}," -rf",[147,25601,25602],{"class":504}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,25604,25605],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,25607,25609],{"id":25608},"_63-回放指定-episode","6.3 回放指定 episode",[138,25611,25613],{"className":24095,"code":25612,"language":24097,"meta":143,"style":143},"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",[51,25614,25615,25622,25628,25634,25640,25648],{"__ignoreMap":143},[147,25616,25617,25620],{"class":149,"line":150},[147,25618,25619],{"class":2237},"lerobot-replay",[147,25621,24952],{"class":448},[147,25623,25624,25626],{"class":149,"line":312},[147,25625,24984],{"class":448},[147,25627,24952],{"class":448},[147,25629,25630,25632],{"class":149,"line":1454},[147,25631,25062],{"class":448},[147,25633,24952],{"class":448},[147,25635,25636,25638],{"class":149,"line":1469},[147,25637,25122],{"class":448},[147,25639,24952],{"class":448},[147,25641,25642,25644,25646],{"class":149,"line":1475},[147,25643,25542],{"class":448},[147,25645,25545],{"class":504},[147,25647,24952],{"class":448},[147,25649,25650],{"class":149,"line":1489},[147,25651,25652],{"class":448},"  --dataset.episode=0\n",[308,25654,25655],{},"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":143,"searchDepth":312,"depth":312,"links":25657},[25658,25659,25660],{"id":25472,"depth":312,"text":25473},{"id":25585,"depth":312,"text":25586},{"id":25608,"depth":312,"text":25609},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25463,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25667,"title":25668,"body":25669,"description":321,"extension":322,"meta":25797,"navigation":324,"path":25798,"seo":25799,"stem":25800,"__hash__":25801},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25670,"toc":25795},[25671,25675,25738,25741,25788,25793],[10,25672,25674],{"id":25673},"_7-act-模型训练","7. ACT 模型训练",[138,25676,25678],{"className":24095,"code":25677,"language":24097,"meta":143,"style":143},"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",[51,25679,25680,25687,25695,25702,25709,25716,25723,25730],{"__ignoreMap":143},[147,25681,25682,25685],{"class":149,"line":150},[147,25683,25684],{"class":2237},"lerobot-train",[147,25686,24952],{"class":448},[147,25688,25689,25691,25693],{"class":149,"line":312},[147,25690,25542],{"class":448},[147,25692,25545],{"class":504},[147,25694,24952],{"class":448},[147,25696,25697,25700],{"class":149,"line":1454},[147,25698,25699],{"class":448},"  --policy.type=act",[147,25701,24952],{"class":448},[147,25703,25704,25707],{"class":149,"line":1469},[147,25705,25706],{"class":448},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[147,25708,24952],{"class":448},[147,25710,25711,25714],{"class":149,"line":1475},[147,25712,25713],{"class":448},"  --job_name=act_so101_test",[147,25715,24952],{"class":448},[147,25717,25718,25721],{"class":149,"line":1489},[147,25719,25720],{"class":448},"  --policy.device=cuda",[147,25722,24952],{"class":448},[147,25724,25725,25728],{"class":149,"line":1495},[147,25726,25727],{"class":448},"  --wandb.enable=false",[147,25729,24952],{"class":448},[147,25731,25732,25735],{"class":149,"line":1586},[147,25733,25734],{"class":448},"  --policy.repo_id=",[147,25736,25737],{"class":504},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,25739,25740],{},"参数说明：",[1406,25742,25743,25749,25755,25761,25767,25776,25782],{},[353,25744,25745,25748],{},[51,25746,25747],{},"--dataset.repo_id","：训练数据集仓库。",[353,25750,25751,25754],{},[51,25752,25753],{},"--policy.type=act","：策略模型类型为 ACT。",[353,25756,25757,25760],{},[51,25758,25759],{},"--output_dir","：本地训练输出目录。",[353,25762,25763,25766],{},[51,25764,25765],{},"--job_name","：训练任务名称。",[353,25768,25769,25772,25773,24836],{},[51,25770,25771],{},"--policy.device","：训练设备（如 ",[51,25774,25775],{},"cuda",[353,25777,25778,25781],{},[51,25779,25780],{},"--wandb.enable","：是否启用 WandB 可视化。",[353,25783,25784,25787],{},[51,25785,25786],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,25789,25790],{},[29,25791],{"alt":143,"src":25792},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[308,25794,25655],{},{"title":143,"searchDepth":312,"depth":312,"links":25796},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25668,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25803,"title":25804,"body":25805,"description":321,"extension":322,"meta":25892,"navigation":324,"path":25893,"seo":25894,"stem":25895,"__hash__":25896},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25806,"toc":25890},[25807,25810,25813,25880,25888],[10,25808,25804],{"id":25809},"_8-策略部署与自动采集",[19,25811,25812],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[138,25814,25816],{"className":24095,"code":25815,"language":24097,"meta":143,"style":143},"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",[51,25817,25818,25824,25830,25836,25844,25850,25857,25865,25873],{"__ignoreMap":143},[147,25819,25820,25822],{"class":149,"line":150},[147,25821,25483],{"class":2237},[147,25823,24952],{"class":448},[147,25825,25826,25828],{"class":149,"line":312},[147,25827,24984],{"class":448},[147,25829,24952],{"class":448},[147,25831,25832,25834],{"class":149,"line":1454},[147,25833,25062],{"class":448},[147,25835,24952],{"class":448},[147,25837,25838,25840,25842],{"class":149,"line":1469},[147,25839,25191],{"class":448},[147,25841,25510],{"class":504},[147,25843,24952],{"class":448},[147,25845,25846,25848],{"class":149,"line":1475},[147,25847,25122],{"class":448},[147,25849,24952],{"class":448},[147,25851,25852,25855],{"class":149,"line":1489},[147,25853,25854],{"class":448},"  --display_data=false",[147,25856,24952],{"class":448},[147,25858,25859,25861,25863],{"class":149,"line":1495},[147,25860,25542],{"class":448},[147,25862,25545],{"class":504},[147,25864,24952],{"class":448},[147,25866,25867,25869,25871],{"class":149,"line":1586},[147,25868,25559],{"class":448},[147,25870,25562],{"class":504},[147,25872,24952],{"class":448},[147,25874,25875,25878],{"class":149,"line":1592},[147,25876,25877],{"class":448},"  --policy.path=",[147,25879,25737],{"class":504},[1406,25881,25882],{},[353,25883,25884,25887],{},[51,25885,25886],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[308,25889,25655],{},{"title":143,"searchDepth":312,"depth":312,"links":25891},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25804,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25898,"title":25899,"body":25900,"description":321,"extension":322,"meta":25929,"navigation":324,"path":25930,"seo":25931,"stem":25932,"__hash__":25933},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25901,"toc":25927},[25902,25906,25909,25915,25918,25924],[10,25903,25905],{"id":25904},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,25907,25908],{},"项目地址：",[19,25910,25911],{},[637,25912,25913],{"href":25913,"rel":25914},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[24138],[19,25916,25917],{},"参考教程：",[19,25919,25920],{},[637,25921,25922],{"href":25922,"rel":25923},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[24138],[19,25925,25926],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":143,"searchDepth":312,"depth":312,"links":25928},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25899,"description":321},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25935,"title":25936,"body":25937,"description":25941,"extension":322,"meta":25942,"navigation":324,"path":25943,"seo":25944,"stem":25945,"__hash__":25946},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25938,"toc":25939},[],{"title":143,"searchDepth":312,"depth":312,"links":25940},[],"act复现",{"category":23651},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25936,"description":25941},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25948,"title":25949,"body":25950,"description":143,"extension":322,"meta":26252,"navigation":324,"path":26253,"seo":26254,"stem":26255,"__hash__":26256},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25951,"toc":26244},[25952,25955,25959,25969,25976,25983,25986,25993,25996,25999,26003,26015,26019,26065,26068,26071,26074,26077,26080,26084,26122,26128,26132,26186,26191,26194,26197,26202,26205,26210,26213,26216,26220,26223,26226,26230],[10,25953,25949],{"id":25954},"_1简介",[367,25956,25958],{"id":25957},"_11什么是-docker","1.1什么是 Docker？",[19,25960,25961,25962,25965,25966],{},"Docker 是一个开源的 ",[234,25963,25964],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[234,25967,25968],{},"一次构建，到处运行。",[19,25970,25971,25972,25975],{},"“ ",[234,25973,25974],{},"一次构建，到处运行"," ”也就是说：",[350,25977,25978],{},[353,25979,25980],{},[234,25981,25982],{},"之前：",[19,25984,25985],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[350,25987,25988],{},[353,25989,25990],{},[234,25991,25992],{},"使用docker后：",[19,25994,25995],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,25997,25998],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[367,26000,26002],{"id":26001},"_12它是怎么工作的","1.2.它是怎么工作的？",[1406,26004,26005,26008],{},[353,26006,26007],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[353,26009,26010,26011,26014],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[234,26012,26013],{},"无论在哪运行都一样稳定"," 。",[367,26016,26018],{"id":26017},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[537,26020,26021,26031],{},[540,26022,26023],{},[543,26024,26025,26028],{},[546,26026,26027],{"align":24009},"概念",[546,26029,26030],{"align":24009},"解释",[583,26032,26033,26041,26049,26057],{},[543,26034,26035,26038],{},[588,26036,26037],{"align":24009},"镜像",[588,26039,26040],{"align":24009},"Image，运行容器的模板，像是一个应用快照",[543,26042,26043,26046],{},[588,26044,26045],{"align":24009},"容器",[588,26047,26048],{"align":24009},"Container，运行中的镜像实例，有自己的文件系统、网络等",[543,26050,26051,26054],{},[588,26052,26053],{"align":24009},"Dockerfile",[588,26055,26056],{"align":24009},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[543,26058,26059,26062],{},[588,26060,26061],{"align":24009},"仓库",[588,26063,26064],{"align":24009},"Registry，存放镜像的地方，比如 Docker Hub",[19,26066,26067],{},"抽象化理解:",[19,26069,26070],{},"Docker镜像≈C++类",[19,26072,26073],{},"Docker容器≈C++类实例(即对象)",[19,26075,26076],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,26078,26079],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[367,26081,26083],{"id":26082},"_14类比理解","1.4.类比理解",[537,26085,26086,26096],{},[540,26087,26088],{},[543,26089,26090,26093],{},[546,26091,26092],{"align":24009},"传统部署",[546,26094,26095],{"align":24009},"Docker部署",[583,26097,26098,26106,26114],{},[543,26099,26100,26103],{},[588,26101,26102],{"align":24009},"手动安装依赖、调试版本不一致问题",[588,26104,26105],{"align":24009},"一次打包环境和代码",[543,26107,26108,26111],{},[588,26109,26110],{"align":24009},"程序“裸奔”跑在系统上",[588,26112,26113],{"align":24009},"程序“穿着容器”隔离运行",[543,26115,26116,26119],{},[588,26117,26118],{"align":24009},"容易“在我电脑上能跑”",[588,26120,26121],{"align":24009},"保证“无论在哪都能跑”",[19,26123,26124,26125],{},"就像快递包裹： ",[234,26126,26127],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[367,26129,26131],{"id":26130},"_15docker-的核心优势","1.5.Docker 的核心优势",[537,26133,26134,26144],{},[540,26135,26136],{},[543,26137,26138,26141],{},[546,26139,26140],{"align":24009},"优势",[546,26142,26143],{"align":24009},"说明",[583,26145,26146,26154,26162,26170,26178],{},[543,26147,26148,26151],{},[588,26149,26150],{"align":24009},"轻量级",[588,26152,26153],{"align":24009},"基于系统内核共享，启动速度快，占资源少",[543,26155,26156,26159],{},[588,26157,26158],{"align":24009},"跨平台",[588,26160,26161],{"align":24009},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[543,26163,26164,26167],{},[588,26165,26166],{"align":24009},"易于迁移部署",[588,26168,26169],{"align":24009},"应用和环境一起封装，不怕依赖不一致",[543,26171,26172,26175],{},[588,26173,26174],{"align":24009},"易于版本控制",[588,26176,26177],{"align":24009},"镜像版本可控，支持回滚",[543,26179,26180,26183],{},[588,26181,26182],{"align":24009},"生态丰富",[588,26184,26185],{"align":24009},"Docker Hub 上有成千上万的现成镜像可用",[350,26187,26188],{},[353,26189,26190],{},"在Linux上可以几乎实现无性能损失。",[19,26192,26193],{},"docker里的发行版和本机共用Linux内核。",[19,26195,26196],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[350,26198,26199],{},[353,26200,26201],{},"可以快速部署在绝大多数Linux发行版",[19,26203,26204],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[350,26206,26207],{},[353,26208,26209],{},"配置环境简单",[19,26211,26212],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,26214,26215],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[350,26217,26218],{},[353,26219,26182],{},[19,26221,26222],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,26224,26225],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[367,26227,26229],{"id":26228},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1406,26231,26232,26235,26238,26241],{},[353,26233,26234],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[353,26236,26237],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[353,26239,26240],{},"微服务架构：每个服务一个容器，灵活组合",[353,26242,26243],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":143,"searchDepth":312,"depth":312,"links":26245},[26246,26247,26248,26249,26250,26251],{"id":25957,"depth":1454,"text":25958},{"id":26001,"depth":1454,"text":26002},{"id":26017,"depth":1454,"text":26018},{"id":26082,"depth":1454,"text":26083},{"id":26130,"depth":1454,"text":26131},{"id":26228,"depth":1454,"text":26229},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25949,"description":143},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":26258,"title":26259,"body":26260,"description":143,"extension":322,"meta":26993,"navigation":324,"path":26994,"seo":26995,"stem":26996,"__hash__":26997},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":26261,"toc":26988},[26262,26265,26269,26272,26275,26281,26287,26291,26300,26303,26360,26363,26414,26417,26500,26503,26540,26544,26555,26568,26575,26578,26658,26661,26711,26714,26737,26741,26748,26751,26767,26773,26776,26792,26798,26801,26817,26831,26837,26857,26863,26866,26878,26884,26887,26901,26907,26910,26930,26935,26938,26941,26945,26948,26951,26954,26961,26964,26967,26970,26975,26980,26985],[10,26263,26259],{"id":26264},"_2安装docker",[367,26266,26268],{"id":26267},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,26270,26271],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,26273,26274],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,26276,26277],{},[637,26278,26279],{"href":26279,"rel":26280},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[24138],[19,26282,26283],{},[637,26284,26285],{"href":26285,"rel":26286},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[24138],[22271,26288,26290],{"id":26289},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,26292,26293,26294,26299],{},"以下内容根据 ",[637,26295,26298],{"href":26296,"rel":26297},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[24138],"官方文档"," 修改而来。",[19,26301,26302],{},"如果你过去安装过 docker，先删掉：",[138,26304,26306],{"className":24095,"code":26305,"language":24097,"meta":143,"style":143},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[51,26307,26308],{"__ignoreMap":143},[147,26309,26310,26312,26315,26318,26321,26324,26327,26330,26333,26336,26339,26342,26345,26348,26351,26354,26357],{"class":149,"line":150},[147,26311,3299],{"class":397},[147,26313,26314],{"class":157}," pkg ",[147,26316,26317],{"class":397},"in",[147,26319,26320],{"class":504}," docker.io",[147,26322,26323],{"class":504}," docker-doc",[147,26325,26326],{"class":504}," docker-compose",[147,26328,26329],{"class":504}," docker-compose-v2",[147,26331,26332],{"class":504}," podman-docker",[147,26334,26335],{"class":504}," containerd",[147,26337,26338],{"class":504}," runc",[147,26340,26341],{"class":157},"; ",[147,26343,26344],{"class":397},"do",[147,26346,26347],{"class":2237}," sudo",[147,26349,26350],{"class":504}," apt-get",[147,26352,26353],{"class":504}," remove",[147,26355,26356],{"class":157}," $pkg; ",[147,26358,26359],{"class":397},"done\n",[19,26361,26362],{},"首先安装依赖和GPG：",[138,26364,26368],{"className":26365,"code":26366,"language":26367,"meta":143,"style":143},"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",[51,26369,26370,26375,26380,26385,26390,26395,26400,26404,26409],{"__ignoreMap":143},[147,26371,26372],{"class":149,"line":150},[147,26373,26374],{},"# Add Docker's official GPG key:\n",[147,26376,26377],{"class":149,"line":312},[147,26378,26379],{},"sudo apt-get update\n",[147,26381,26382],{"class":149,"line":1454},[147,26383,26384],{},"sudo apt-get install ca-certificates curl\n",[147,26386,26387],{"class":149,"line":1469},[147,26388,26389],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[147,26391,26392],{"class":149,"line":1475},[147,26393,26394],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[147,26396,26397],{"class":149,"line":1489},[147,26398,26399],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[147,26401,26402],{"class":149,"line":1495},[147,26403,2674],{"emptyLinePlaceholder":324},[147,26405,26406],{"class":149,"line":1586},[147,26407,26408],{},"# 如果上面这行报错就弄下面这行\n",[147,26410,26411],{"class":149,"line":1592},[147,26412,26413],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,26415,26416],{},"信任 Docker 的 GPG 公钥并添加仓库：",[138,26418,26420],{"className":24095,"code":26419,"language":24097,"meta":143,"style":143},"# 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",[51,26421,26422,26427,26433,26450,26483],{"__ignoreMap":143},[147,26423,26424],{"class":149,"line":150},[147,26425,26426],{"class":458},"# Add the repository to Apt sources:\n",[147,26428,26429,26431],{"class":149,"line":312},[147,26430,25399],{"class":448},[147,26432,24952],{"class":448},[147,26434,26435,26438,26441,26444,26447],{"class":149,"line":1454},[147,26436,26437],{"class":504},"  \"deb [arch=$(",[147,26439,26440],{"class":2237},"dpkg",[147,26442,26443],{"class":448}," --print-architecture",[147,26445,26446],{"class":504},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[147,26448,26449],{"class":448},"\\\n",[147,26451,26452,26455,26457,26459,26462,26465,26467,26469,26472,26474,26476,26479,26481],{"class":149,"line":1469},[147,26453,26454],{"class":504},"  \"",[147,26456,25373],{"class":157},[147,26458,957],{"class":448},[147,26460,26461],{"class":504}," \u002Fetc\u002Fos-release",[147,26463,26464],{"class":157}," && ",[147,26466,25399],{"class":448},[147,26468,9998],{"class":504},[147,26470,26471],{"class":157},"$VERSION_CODENAME",[147,26473,650],{"class":504},[147,26475,828],{"class":157},[147,26477,26478],{"class":504},"\" stable\"",[147,26480,25383],{"class":397},[147,26482,24952],{"class":448},[147,26484,26485,26488,26491,26494,26497],{"class":149,"line":1475},[147,26486,26487],{"class":2237},"  sudo",[147,26489,26490],{"class":504}," tee",[147,26492,26493],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[147,26495,26496],{"class":397}," >",[147,26498,26499],{"class":504}," \u002Fdev\u002Fnull\n",[19,26501,26502],{},"最后安装",[138,26504,26506],{"className":24095,"code":26505,"language":24097,"meta":143,"style":143},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[51,26507,26508,26517],{"__ignoreMap":143},[147,26509,26510,26512,26514],{"class":149,"line":150},[147,26511,24850],{"class":2237},[147,26513,26350],{"class":504},[147,26515,26516],{"class":504}," update\n",[147,26518,26519,26521,26523,26525,26528,26531,26534,26537],{"class":149,"line":312},[147,26520,24850],{"class":2237},[147,26522,26350],{"class":504},[147,26524,24107],{"class":504},[147,26526,26527],{"class":504}," docker-ce",[147,26529,26530],{"class":504}," docker-ce-cli",[147,26532,26533],{"class":504}," containerd.io",[147,26535,26536],{"class":504}," docker-buildx-plugin",[147,26538,26539],{"class":504}," docker-compose-plugin\n",[22271,26541,26543],{"id":26542},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,26545,26546,26547,26550,26551,26554],{},"查看自己自己包管理工具版本（dnf是 ",[234,26548,26549],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[234,26552,26553],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[138,26556,26558],{"className":24095,"code":26557,"language":24097,"meta":143,"style":143},"dnf --version\n",[51,26559,26560],{"__ignoreMap":143},[147,26561,26562,26565],{"class":149,"line":150},[147,26563,26564],{"class":2237},"dnf",[147,26566,26567],{"class":448}," --version\n",[19,26569,26293,26570,26574],{},[637,26571,26298],{"href":26572,"rel":26573},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[24138]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,26576,26577],{},"如果你之前安装过 docker，请先删掉",[138,26579,26581],{"className":24095,"code":26580,"language":24097,"meta":143,"style":143},"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",[51,26582,26583,26597,26604,26611,26618,26625,26632,26639,26646,26653],{"__ignoreMap":143},[147,26584,26585,26587,26590,26592,26595],{"class":149,"line":150},[147,26586,24850],{"class":2237},[147,26588,26589],{"class":504}," dnf",[147,26591,26353],{"class":504},[147,26593,26594],{"class":504}," docker",[147,26596,24952],{"class":448},[147,26598,26599,26602],{"class":149,"line":312},[147,26600,26601],{"class":504},"                  docker-client",[147,26603,24952],{"class":448},[147,26605,26606,26609],{"class":149,"line":1454},[147,26607,26608],{"class":504},"                  docker-client-latest",[147,26610,24952],{"class":448},[147,26612,26613,26616],{"class":149,"line":1469},[147,26614,26615],{"class":504},"                  docker-common",[147,26617,24952],{"class":448},[147,26619,26620,26623],{"class":149,"line":1475},[147,26621,26622],{"class":504},"                  docker-latest",[147,26624,24952],{"class":448},[147,26626,26627,26630],{"class":149,"line":1489},[147,26628,26629],{"class":504},"                  docker-latest-logrotate",[147,26631,24952],{"class":448},[147,26633,26634,26637],{"class":149,"line":1495},[147,26635,26636],{"class":504},"                  docker-logrotate",[147,26638,24952],{"class":448},[147,26640,26641,26644],{"class":149,"line":1586},[147,26642,26643],{"class":504},"                  docker-selinux",[147,26645,24952],{"class":448},[147,26647,26648,26651],{"class":149,"line":1592},[147,26649,26650],{"class":504},"                  docker-engine-selinux",[147,26652,24952],{"class":448},[147,26654,26655],{"class":149,"line":1604},[147,26656,26657],{"class":504},"                  docker-engine\n",[19,26659,26660],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[138,26662,26664],{"className":24095,"code":26663,"language":24097,"meta":143,"style":143},"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",[51,26665,26666,26680,26695],{"__ignoreMap":143},[147,26667,26668,26670,26672,26675,26677],{"class":149,"line":150},[147,26669,24850],{"class":2237},[147,26671,26589],{"class":504},[147,26673,26674],{"class":448}," -y",[147,26676,24107],{"class":504},[147,26678,26679],{"class":504}," dnf-plugins-core\n",[147,26681,26682,26684,26686,26689,26692],{"class":149,"line":312},[147,26683,24850],{"class":2237},[147,26685,26589],{"class":504},[147,26687,26688],{"class":504}," config-manager",[147,26690,26691],{"class":504}," addrepo",[147,26693,26694],{"class":448}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[147,26696,26697,26699,26702,26705,26708],{"class":149,"line":1454},[147,26698,24850],{"class":2237},[147,26700,26701],{"class":504}," sed",[147,26703,26704],{"class":448}," -i",[147,26706,26707],{"class":504}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[147,26709,26710],{"class":504}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,26712,26713],{},"最后安装：",[138,26715,26717],{"className":24095,"code":26716,"language":24097,"meta":143,"style":143},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[51,26718,26719],{"__ignoreMap":143},[147,26720,26721,26723,26725,26727,26729,26731,26733,26735],{"class":149,"line":150},[147,26722,24850],{"class":2237},[147,26724,26589],{"class":504},[147,26726,24107],{"class":504},[147,26728,26527],{"class":504},[147,26730,26530],{"class":504},[147,26732,26533],{"class":504},[147,26734,26536],{"class":504},[147,26736,26539],{"class":504},[367,26738,26740],{"id":26739},"_22配置环境","2.2.配置环境",[22271,26742,26744,26747],{"id":26743},"_221检查-docker-服务状态",[234,26745,26746],{},"2.2.1.检查 Docker 服务状态"," ：",[19,26749,26750],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[138,26752,26754],{"className":24095,"code":26753,"language":24097,"meta":143,"style":143},"systemctl status docker\n",[51,26755,26756],{"__ignoreMap":143},[147,26757,26758,26761,26764],{"class":149,"line":150},[147,26759,26760],{"class":2237},"systemctl",[147,26762,26763],{"class":504}," status",[147,26765,26766],{"class":504}," docker\n",[22271,26768,26770,26747],{"id":26769},"_222启动-docker-服务",[234,26771,26772],{},"2.2.2.启动 Docker 服务",[19,26774,26775],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[138,26777,26779],{"className":24095,"code":26778,"language":24097,"meta":143,"style":143},"sudo systemctl start docker\n",[51,26780,26781],{"__ignoreMap":143},[147,26782,26783,26785,26788,26790],{"class":149,"line":150},[147,26784,24850],{"class":2237},[147,26786,26787],{"class":504}," systemctl",[147,26789,4458],{"class":504},[147,26791,26766],{"class":504},[22271,26793,26795,26747],{"id":26794},"_223设置-docker-开机自启",[234,26796,26797],{},"2.2.3.设置 Docker 开机自启",[19,26799,26800],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[138,26802,26804],{"className":24095,"code":26803,"language":24097,"meta":143,"style":143},"sudo systemctl enable docker\n",[51,26805,26806],{"__ignoreMap":143},[147,26807,26808,26810,26812,26815],{"class":149,"line":150},[147,26809,24850],{"class":2237},[147,26811,26787],{"class":504},[147,26813,26814],{"class":504}," enable",[147,26816,26766],{"class":504},[22271,26818,26820,249,26823,249,26828,26747],{"id":26819},"_224将用户添加到-docker-组",[234,26821,26822],{},"2.2.4.将用户添加到",[234,26824,26825],{},[51,26826,26827],{},"docker",[234,26829,26830],{},"组",[19,26832,26833,26834,26836],{},"使用以下命令将当前用户添加到 ",[51,26835,26827],{}," 组：",[138,26838,26840],{"className":24095,"code":26839,"language":24097,"meta":143,"style":143},"sudo usermod -aG docker $USER\n",[51,26841,26842],{"__ignoreMap":143},[147,26843,26844,26846,26849,26852,26854],{"class":149,"line":150},[147,26845,24850],{"class":2237},[147,26847,26848],{"class":504}," usermod",[147,26850,26851],{"class":448}," -aG",[147,26853,26594],{"class":504},[147,26855,26856],{"class":157}," $USER\n",[22271,26858,26860,26747],{"id":26859},"_225退出并重新登录",[234,26861,26862],{},"2.2.5.退出并重新登录",[19,26864,26865],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[138,26867,26869],{"className":24095,"code":26868,"language":24097,"meta":143,"style":143},"newgrp docker\n",[51,26870,26871],{"__ignoreMap":143},[147,26872,26873,26876],{"class":149,"line":150},[147,26874,26875],{"class":2237},"newgrp",[147,26877,26766],{"class":504},[22271,26879,26881,26747],{"id":26880},"_226重新启动-docker-服务如果需要",[234,26882,26883],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,26885,26886],{},"确保 Docker 服务正在运行，可以使用以下命令：",[138,26888,26889],{"className":24095,"code":26778,"language":24097,"meta":143,"style":143},[51,26890,26891],{"__ignoreMap":143},[147,26892,26893,26895,26897,26899],{"class":149,"line":150},[147,26894,24850],{"class":2237},[147,26896,26787],{"class":504},[147,26898,4458],{"class":504},[147,26900,26766],{"class":504},[22271,26902,26904,26747],{"id":26903},"_227重启电脑后检查-docker-服务状态",[234,26905,26906],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,26908,26909],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[138,26911,26913],{"className":24095,"code":26912,"language":24097,"meta":143,"style":143},"sudo reboot\nsystemctl status docker\n",[51,26914,26915,26922],{"__ignoreMap":143},[147,26916,26917,26919],{"class":149,"line":150},[147,26918,24850],{"class":2237},[147,26920,26921],{"class":504}," reboot\n",[147,26923,26924,26926,26928],{"class":149,"line":312},[147,26925,26760],{"class":2237},[147,26927,26763],{"class":504},[147,26929,26766],{"class":504},[19,26931,26932],{},[29,26933],{"alt":143,"src":26934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,26936,26937],{},"第三行显示enabled说明开机自启动成功",[19,26939,26940],{},"按q退出",[367,26942,26944],{"id":26943},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,26946,26947],{},"优先使用linux来使用docker是比较好的",[19,26949,26950],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,26952,26953],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,26955,26956,26957],{},"官方下载安装:",[637,26958,26959],{"href":26959,"rel":26960},"https:\u002F\u002Fwww.docker.com\u002F",[24138],[19,26962,26963],{},"Windows的Docker显卡直通与USB直通:",[19,26965,26966],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,26968,26969],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,26971,26972],{},[29,26973],{"alt":143,"src":26974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,26976,26977],{},[29,26978],{"alt":143,"src":26979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,26981,26982],{},[29,26983],{"alt":143,"src":26984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[308,26986,26987],{},"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":143,"searchDepth":312,"depth":312,"links":26989},[26990,26991,26992],{"id":26267,"depth":1454,"text":26268},{"id":26739,"depth":1454,"text":26740},{"id":26943,"depth":1454,"text":26944},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":26259,"description":143},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26999,"title":27000,"body":27001,"description":27008,"extension":322,"meta":27701,"navigation":324,"path":27702,"seo":27703,"stem":27704,"__hash__":27705},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":27002,"toc":27695},[27003,27006,27009,27013,27018,27023,27026,27054,27059,27068,27071,27076,27080,27087,27092,27098,27102,27105,27109,27114,27206,27211,27229,27234,27255,27260,27276,27280,27285,27314,27319,27365,27370,27414,27422,27439,27444,27460,27465,27479,27482,27485,27488,27491,27520,27523,27528,27532,27535,27538,27544,27547,27550,27553,27615,27622,27627,27630,27648,27652,27655,27672,27675,27678,27692],[10,27004,27000],{"id":27005},"_3docker直通",[19,27007,27008],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[367,27010,27012],{"id":27011},"_31usb直通","3.1.USB直通",[19,27014,27015],{},[29,27016],{"alt":143,"src":27017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[350,27019,27020],{},[353,27021,27022],{},"方法一(不是很推荐新手)：",[19,27024,27025],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[138,27027,27029],{"className":24095,"code":27028,"language":24097,"meta":143,"style":143},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[51,27030,27031,27039,27044],{"__ignoreMap":143},[147,27032,27033,27036],{"class":149,"line":150},[147,27034,27035],{"class":2237},"ls",[147,27037,27038],{"class":504}," \u002Fdev\n",[147,27040,27041],{"class":149,"line":312},[147,27042,27043],{"class":458},"#例如\n",[147,27045,27046,27049,27051],{"class":149,"line":1454},[147,27047,27048],{"class":157},"--device",[147,27050,445],{"class":397},[147,27052,27053],{"class":504},"\u002Fdev\u002Ftty_USB0\n",[350,27055,27056],{"start":312},[353,27057,27058],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[138,27060,27062],{"className":24095,"code":27061,"language":24097,"meta":143,"style":143},"--privileged\n",[51,27063,27064],{"__ignoreMap":143},[147,27065,27066],{"class":149,"line":150},[147,27067,27061],{"class":2237},[19,27069,27070],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,27072,27073],{},[29,27074],{"alt":143,"src":27075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[367,27077,27079],{"id":27078},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,27081,27082,27083,27086],{},"NVIDIA Container Toolkit使用户 ",[234,27084,27085],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,27088,27089],{},[29,27090],{"alt":143,"src":27091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,27093,27094],{},[637,27095,27096],{"href":27096,"rel":27097},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[24138],[22271,27099,27101],{"id":27100},"_321安装","3.2.1.安装",[19,27103,27104],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[23183,27106,27108],{"id":27107},"_3211ubuntu","3.2.1.1.Ubuntu",[350,27110,27111],{},[353,27112,27113],{},"配置存储库 并更新",[138,27115,27117],{"className":24095,"code":27116,"language":24097,"meta":143,"style":143},"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",[51,27118,27119,27148,27168,27180,27192,27198],{"__ignoreMap":143},[147,27120,27121,27124,27127,27130,27132,27134,27137,27140,27143,27146],{"class":149,"line":150},[147,27122,27123],{"class":2237},"curl",[147,27125,27126],{"class":448}," -fsSL",[147,27128,27129],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[147,27131,25383],{"class":397},[147,27133,26347],{"class":2237},[147,27135,27136],{"class":504}," gpg",[147,27138,27139],{"class":448}," --dearmor",[147,27141,27142],{"class":448}," -o",[147,27144,27145],{"class":504}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[147,27147,24952],{"class":448},[147,27149,27150,27153,27155,27158,27161,27164,27166],{"class":149,"line":312},[147,27151,27152],{"class":157},"  && ",[147,27154,27123],{"class":2237},[147,27156,27157],{"class":448}," -s",[147,27159,27160],{"class":448}," -L",[147,27162,27163],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[147,27165,25383],{"class":397},[147,27167,24952],{"class":448},[147,27169,27170,27173,27176,27178],{"class":149,"line":1454},[147,27171,27172],{"class":2237},"    sed",[147,27174,27175],{"class":504}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[147,27177,25383],{"class":397},[147,27179,24952],{"class":448},[147,27181,27182,27185,27187,27190],{"class":149,"line":1469},[147,27183,27184],{"class":2237},"    sudo",[147,27186,26490],{"class":504},[147,27188,27189],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[147,27191,24952],{"class":448},[147,27193,27194,27196],{"class":149,"line":1475},[147,27195,27152],{"class":157},[147,27197,26449],{"class":448},[147,27199,27200,27202,27204],{"class":149,"line":1489},[147,27201,27184],{"class":2237},[147,27203,26350],{"class":504},[147,27205,26516],{"class":504},[350,27207,27208],{"start":312},[353,27209,27210],{},"安装nvidia-docker2",[138,27212,27214],{"className":24095,"code":27213,"language":24097,"meta":143,"style":143},"sudo apt-get install -y nvidia-docker2\n",[51,27215,27216],{"__ignoreMap":143},[147,27217,27218,27220,27222,27224,27226],{"class":149,"line":150},[147,27219,24850],{"class":2237},[147,27221,26350],{"class":504},[147,27223,24107],{"class":504},[147,27225,26674],{"class":448},[147,27227,27228],{"class":504}," nvidia-docker2\n",[350,27230,27231],{"start":1454},[353,27232,27233],{},"使用nvidia-ctk命令配置container runtime",[138,27235,27237],{"className":24095,"code":27236,"language":24097,"meta":143,"style":143},"sudo nvidia-ctk runtime configure --runtime=docker\n",[51,27238,27239],{"__ignoreMap":143},[147,27240,27241,27243,27246,27249,27252],{"class":149,"line":150},[147,27242,24850],{"class":2237},[147,27244,27245],{"class":504}," nvidia-ctk",[147,27247,27248],{"class":504}," runtime",[147,27250,27251],{"class":504}," configure",[147,27253,27254],{"class":448}," --runtime=docker\n",[350,27256,27257],{"start":1469},[353,27258,27259],{},"重启docker服务:",[138,27261,27263],{"className":24095,"code":27262,"language":24097,"meta":143,"style":143},"sudo systemctl restart docker\n",[51,27264,27265],{"__ignoreMap":143},[147,27266,27267,27269,27271,27274],{"class":149,"line":150},[147,27268,24850],{"class":2237},[147,27270,26787],{"class":504},[147,27272,27273],{"class":504}," restart",[147,27275,26766],{"class":504},[23183,27277,27279],{"id":27278},"_3212fedora","3.2.1.2.Fedora",[350,27281,27282],{},[353,27283,27284],{},"配置存储库",[138,27286,27288],{"className":24095,"code":27287,"language":24097,"meta":143,"style":143},"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",[51,27289,27290,27305],{"__ignoreMap":143},[147,27291,27292,27294,27296,27298,27301,27303],{"class":149,"line":150},[147,27293,27123],{"class":2237},[147,27295,27157],{"class":448},[147,27297,27160],{"class":448},[147,27299,27300],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[147,27302,25383],{"class":397},[147,27304,24952],{"class":448},[147,27306,27307,27309,27311],{"class":149,"line":312},[147,27308,24850],{"class":2237},[147,27310,26490],{"class":504},[147,27312,27313],{"class":504}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[350,27315,27316],{"start":312},[353,27317,27318],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[138,27320,27322],{"className":24095,"code":27321,"language":24097,"meta":143,"style":143},"# 如果是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",[51,27323,27324,27329,27343,27347,27352],{"__ignoreMap":143},[147,27325,27326],{"class":149,"line":150},[147,27327,27328],{"class":458},"# 如果是RHEL或者Rocky（DNF4）\n",[147,27330,27331,27333,27335,27337,27340],{"class":149,"line":312},[147,27332,24850],{"class":2237},[147,27334,26589],{"class":504},[147,27336,26688],{"class":504},[147,27338,27339],{"class":448}," --add-repo",[147,27341,27342],{"class":504}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[147,27344,27345],{"class":149,"line":1454},[147,27346,2674],{"emptyLinePlaceholder":324},[147,27348,27349],{"class":149,"line":1469},[147,27350,27351],{"class":458},"# 如果是Feodra41+（DNF5）\n",[147,27353,27354,27356,27358,27360,27362],{"class":149,"line":1475},[147,27355,24850],{"class":2237},[147,27357,26589],{"class":504},[147,27359,26688],{"class":504},[147,27361,26691],{"class":504},[147,27363,27364],{"class":448}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[350,27366,27367],{"start":1454},[353,27368,27369],{},"安装NVIDIA Container Toolki包",[138,27371,27373],{"className":24095,"code":27372,"language":24097,"meta":143,"style":143},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[51,27374,27375,27380,27393,27397,27402],{"__ignoreMap":143},[147,27376,27377],{"class":149,"line":150},[147,27378,27379],{"class":458},"# 如果是RHEL或者Rocky\n",[147,27381,27382,27384,27386,27388,27390],{"class":149,"line":312},[147,27383,24850],{"class":2237},[147,27385,26589],{"class":504},[147,27387,24107],{"class":504},[147,27389,26674],{"class":448},[147,27391,27392],{"class":504}," nvidia-container-toolkit\n",[147,27394,27395],{"class":149,"line":1454},[147,27396,2674],{"emptyLinePlaceholder":324},[147,27398,27399],{"class":149,"line":1469},[147,27400,27401],{"class":458},"# 如果是Fedora\n",[147,27403,27404,27406,27408,27410,27412],{"class":149,"line":1475},[147,27405,24850],{"class":2237},[147,27407,26589],{"class":504},[147,27409,24107],{"class":504},[147,27411,26674],{"class":448},[147,27413,27392],{"class":504},[350,27415,27416],{"start":1469},[353,27417,27418,27419,27421],{},"安装nvidia-docker2 ： 在Fedora上使用",[51,27420,26564],{},"进行安装",[138,27423,27425],{"className":24095,"code":27424,"language":24097,"meta":143,"style":143},"sudo dnf install -y nvidia-docker2\n",[51,27426,27427],{"__ignoreMap":143},[147,27428,27429,27431,27433,27435,27437],{"class":149,"line":150},[147,27430,24850],{"class":2237},[147,27432,26589],{"class":504},[147,27434,24107],{"class":504},[147,27436,26674],{"class":448},[147,27438,27228],{"class":504},[350,27440,27441],{"start":1475},[353,27442,27443],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[138,27445,27446],{"className":24095,"code":27236,"language":24097,"meta":143,"style":143},[51,27447,27448],{"__ignoreMap":143},[147,27449,27450,27452,27454,27456,27458],{"class":149,"line":150},[147,27451,24850],{"class":2237},[147,27453,27245],{"class":504},[147,27455,27248],{"class":504},[147,27457,27251],{"class":504},[147,27459,27254],{"class":448},[350,27461,27462],{"start":1489},[353,27463,27464],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[138,27466,27467],{"className":24095,"code":27262,"language":24097,"meta":143,"style":143},[51,27468,27469],{"__ignoreMap":143},[147,27470,27471,27473,27475,27477],{"class":149,"line":150},[147,27472,24850],{"class":2237},[147,27474,26787],{"class":504},[147,27476,27273],{"class":504},[147,27478,26766],{"class":504},[19,27480,27481],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,27483,27484],{},"方法：",[19,27486,27487],{},"1️⃣nvidia-smi",[19,27489,27490],{},"2️⃣运行nvidia cuda 容器进行测试",[138,27492,27494],{"className":24095,"code":27493,"language":24097,"meta":143,"style":143},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[51,27495,27496],{"__ignoreMap":143},[147,27497,27498,27500,27502,27505,27508,27511,27514,27517],{"class":149,"line":150},[147,27499,24850],{"class":2237},[147,27501,26594],{"class":504},[147,27503,27504],{"class":504}," run",[147,27506,27507],{"class":448}," --rm",[147,27509,27510],{"class":448}," --gpus",[147,27512,27513],{"class":504}," all",[147,27515,27516],{"class":504}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[147,27518,27519],{"class":504}," nvidia-smi\n",[19,27521,27522],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,27524,27525],{},[29,27526],{"alt":143,"src":27527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[367,27529,27531],{"id":27530},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,27533,27534],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,27536,27537],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,27539,27540],{},[637,27541,27542],{"href":27542,"rel":27543},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[24138],[19,27545,27546],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,27548,27549],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,27551,27552],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[537,27554,27555,27571],{},[540,27556,27557],{},[543,27558,27559,27562,27565,27568],{},[546,27560,27561],{"align":24009},"镜像类型",[546,27563,27564],{"align":24009},"适用场景",[546,27566,27567],{"align":24009},"示例标签",[546,27569,27570],{"align":24009},"大小",[583,27572,27573,27587,27601],{},[543,27574,27575,27578,27581,27584],{},[588,27576,27577],{"align":24009},"base",[588,27579,27580],{"align":24009},"仅需 CUDA 运行时库",[588,27582,27583],{"align":24009},"12.4.0-base-ubuntu22.04",[588,27585,27586],{"align":24009},"~240MB",[543,27588,27589,27592,27595,27598],{},[588,27590,27591],{"align":24009},"runtime",[588,27593,27594],{"align":24009},"部署编译后的应用（含数学库）",[588,27596,27597],{"align":24009},"12.4.0-runtime-ubuntu22.04",[588,27599,27600],{"align":24009},"~2GB",[543,27602,27603,27606,27609,27612],{},[588,27604,27605],{"align":24009},"devel",[588,27607,27608],{"align":24009},"开发环境（含编译工具）",[588,27610,27611],{"align":24009},"12.4.0-devel-ubuntu22.04",[588,27613,27614],{"align":24009},"~3GB",[19,27616,27617,27618,27621],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[51,27619,27620],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,27623,27624],{},[29,27625],{"alt":143,"src":27626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,27628,27629],{},"在dockerfile里就可以开头这么写：",[138,27631,27633],{"className":24095,"code":27632,"language":24097,"meta":143,"style":143},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[51,27634,27635,27640],{"__ignoreMap":143},[147,27636,27637],{"class":149,"line":150},[147,27638,27639],{"class":458},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[147,27641,27642,27645],{"class":149,"line":312},[147,27643,27644],{"class":2237},"FROM",[147,27646,27647],{"class":504}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[367,27649,27651],{"id":27650},"_34配置以太网","3.4.配置以太网",[19,27653,27654],{},"指定网络模式",[138,27656,27658],{"className":24095,"code":27657,"language":24097,"meta":143,"style":143},"--net=host \\\n",[51,27659,27660],{"__ignoreMap":143},[147,27661,27662,27665,27667,27670],{"class":149,"line":150},[147,27663,27664],{"class":157},"--net",[147,27666,445],{"class":397},[147,27668,27669],{"class":504},"host",[147,27671,24952],{"class":2237},[19,27673,27674],{},"启动参数里加上这行即可。具体在下方",[19,27676,27677],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1406,27679,27680,27683,27686,27689],{},[353,27681,27682],{},"--net=bridge:默认选项，表示连接到默认的网桥",[353,27684,27685],{},"--net=host:容器使用宿主机的网络",[353,27687,27688],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[353,27690,27691],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[308,27693,27694],{},"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":143,"searchDepth":312,"depth":312,"links":27696},[27697,27698,27699,27700],{"id":27011,"depth":1454,"text":27012},{"id":27078,"depth":1454,"text":27079},{"id":27530,"depth":1454,"text":27531},{"id":27650,"depth":1454,"text":27651},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":27000,"description":27008},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27707,"title":27708,"body":27709,"description":27716,"extension":322,"meta":27722,"navigation":324,"path":27723,"seo":27724,"stem":27725,"__hash__":27726},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27710,"toc":27720},[27711,27714,27717],[10,27712,27708],{"id":27713},"_4dockerhub换源",[19,27715,27716],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,27718,27719],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":143,"searchDepth":312,"depth":312,"links":27721},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27708,"description":27716},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27728,"title":27729,"body":27730,"description":143,"extension":322,"meta":28742,"navigation":324,"path":28743,"seo":28744,"stem":28745,"__hash__":28746},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27731,"toc":28737},[27732,27735,27739,27745,27749,27752,28092,28095,28098,28101,28106,28111,28114,28117,28120,28123,28142,28145,28156,28162,28344,28354,28370,28633,28635,28660,28675,28684,28734],[10,27733,27729],{"id":27734},"_5docker命令学习",[367,27736,27738],{"id":27737},"_51参考文档","5.1.参考文档",[19,27740,27741],{},[637,27742,27743],{"href":27743,"rel":27744},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[24138],[367,27746,27748],{"id":27747},"_52常用命令","5.2.常用命令",[19,27750,27751],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[537,27753,27754,27767],{},[540,27755,27756],{},[543,27757,27758,27761,27764],{},[546,27759,27760],{"align":24009},"命令",[546,27762,27763],{"align":24009},"描述",[546,27765,27766],{"align":24009},"示例",[583,27768,27769,27780,27791,27802,27813,27824,27835,27846,27856,27867,27878,27889,27899,27910,27921,27932,27942,27952,27962,27972,27983,27994,28005,28016,28027,28038,28048,28059,28070,28081],{},[543,27770,27771,27774,27777],{},[588,27772,27773],{"align":24009},"docker run",[588,27775,27776],{"align":24009},"创建并启动一个新的容器。",[588,27778,27779],{"align":24009},"docker run -it ubuntu bash",[543,27781,27782,27785,27788],{},[588,27783,27784],{"align":24009},"docker build",[588,27786,27787],{"align":24009},"通过指定的 Dockerfile 创建一个新的镜像。",[588,27789,27790],{"align":24009},"docker build -t myimage .",[543,27792,27793,27796,27799],{},[588,27794,27795],{"align":24009},"docker pull",[588,27797,27798],{"align":24009},"从 Docker 仓库拉取镜像。",[588,27800,27801],{"align":24009},"docker pull ubuntu",[543,27803,27804,27807,27810],{},[588,27805,27806],{"align":24009},"docker push",[588,27808,27809],{"align":24009},"将本地镜像推送到 Docker 仓库。",[588,27811,27812],{"align":24009},"docker push myimage",[543,27814,27815,27818,27821],{},[588,27816,27817],{"align":24009},"docker stop",[588,27819,27820],{"align":24009},"停止一个正在运行的容器。",[588,27822,27823],{"align":24009},"docker stop container_id",[543,27825,27826,27829,27832],{},[588,27827,27828],{"align":24009},"docker start",[588,27830,27831],{"align":24009},"启动一个已经存在的容器。",[588,27833,27834],{"align":24009},"docker start container_id",[543,27836,27837,27840,27843],{},[588,27838,27839],{"align":24009},"docker restart",[588,27841,27842],{"align":24009},"重新启动容器。",[588,27844,27845],{"align":24009},"docker restart container_id",[543,27847,27848,27851,27854],{},[588,27849,27850],{"align":24009},"docker ps",[588,27852,27853],{"align":24009},"列出当前正在运行的容器。",[588,27855,27850],{"align":24009},[543,27857,27858,27861,27864],{},[588,27859,27860],{"align":24009},"docker rm",[588,27862,27863],{"align":24009},"删除一个或多个停止的容器。",[588,27865,27866],{"align":24009},"docker rm container_id",[543,27868,27869,27872,27875],{},[588,27870,27871],{"align":24009},"docker exec",[588,27873,27874],{"align":24009},"在一个正在运行的容器中执行命令。",[588,27876,27877],{"align":24009},"docker exec -it container_id bash",[543,27879,27880,27883,27886],{},[588,27881,27882],{"align":24009},"docker logs",[588,27884,27885],{"align":24009},"查看容器的日志输出。",[588,27887,27888],{"align":24009},"docker logs container_id",[543,27890,27891,27894,27897],{},[588,27892,27893],{"align":24009},"docker images",[588,27895,27896],{"align":24009},"列出本地所有镜像。",[588,27898,27893],{"align":24009},[543,27900,27901,27904,27907],{},[588,27902,27903],{"align":24009},"docker rmi",[588,27905,27906],{"align":24009},"删除一个或多个镜像。",[588,27908,27909],{"align":24009},"docker rmi myimage",[543,27911,27912,27915,27918],{},[588,27913,27914],{"align":24009},"docker network",[588,27916,27917],{"align":24009},"管理 Docker 网络。",[588,27919,27920],{"align":24009},"docker network ls",[543,27922,27923,27926,27929],{},[588,27924,27925],{"align":24009},"docker volume",[588,27927,27928],{"align":24009},"管理 Docker 数据卷。",[588,27930,27931],{"align":24009},"docker volume ls",[543,27933,27934,27937,27940],{},[588,27935,27936],{"align":24009},"docker-compose up",[588,27938,27939],{"align":24009},"启动 docker-compose.yml 中定义的所有服务。",[588,27941,27936],{"align":24009},[543,27943,27944,27947,27950],{},[588,27945,27946],{"align":24009},"docker-compose down",[588,27948,27949],{"align":24009},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[588,27951,27946],{"align":24009},[543,27953,27954,27957,27960],{},[588,27955,27956],{"align":24009},"docker info",[588,27958,27959],{"align":24009},"显示 Docker 系统的详细信息。",[588,27961,27956],{"align":24009},[543,27963,27964,27967,27970],{},[588,27965,27966],{"align":24009},"docker stats",[588,27968,27969],{"align":24009},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[588,27971,27966],{"align":24009},[543,27973,27974,27977,27980],{},[588,27975,27976],{"align":24009},"docker inspect",[588,27978,27979],{"align":24009},"查看容器或镜像的详细信息（JSON 格式）。",[588,27981,27982],{"align":24009},"docker inspect container_id",[543,27984,27985,27988,27991],{},[588,27986,27987],{"align":24009},"docker save",[588,27989,27990],{"align":24009},"将一个镜像保存为 tar 文件。",[588,27992,27993],{"align":24009},"docker save -o myimage.tar myimage",[543,27995,27996,27999,28002],{},[588,27997,27998],{"align":24009},"docker load",[588,28000,28001],{"align":24009},"从 tar 文件中加载镜像。",[588,28003,28004],{"align":24009},"docker load -i myimage.tar",[543,28006,28007,28010,28013],{},[588,28008,28009],{"align":24009},"docker tag",[588,28011,28012],{"align":24009},"为镜像添加标签（tag）。",[588,28014,28015],{"align":24009},"docker tag myimage myimage:v1",[543,28017,28018,28021,28024],{},[588,28019,28020],{"align":24009},"docker buildx build",[588,28022,28023],{"align":24009},"使用 Buildx 构建多架构镜像。",[588,28025,28026],{"align":24009},"docker buildx build -t myimage .",[543,28028,28029,28032,28035],{},[588,28030,28031],{"align":24009},"docker buildx create",[588,28033,28034],{"align":24009},"创建一个新的 Buildx 构建实例。",[588,28036,28037],{"align":24009},"docker buildx create –use",[543,28039,28040,28043,28046],{},[588,28041,28042],{"align":24009},"docker buildx ls",[588,28044,28045],{"align":24009},"列出所有可用的 Buildx 构建实例。",[588,28047,28042],{"align":24009},[543,28049,28050,28053,28056],{},[588,28051,28052],{"align":24009},"docker buildx use",[588,28054,28055],{"align":24009},"设置当前的 Buildx 构建实例。",[588,28057,28058],{"align":24009},"docker buildx use mybuilder",[543,28060,28061,28064,28067],{},[588,28062,28063],{"align":24009},"docker buildx bake",[588,28065,28066],{"align":24009},"使用 Bake 文件批量构建镜像。",[588,28068,28069],{"align":24009},"docker buildx bake -f bake.hcl",[543,28071,28072,28075,28078],{},[588,28073,28074],{"align":24009},"docker buildx build –push",[588,28076,28077],{"align":24009},"构建镜像并推送到镜像仓库。",[588,28079,28080],{"align":24009},"docker buildx build –push -t myimage .",[543,28082,28083,28086,28089],{},[588,28084,28085],{"align":24009},"docker buildx build –platform",[588,28087,28088],{"align":24009},"构建镜像并为多个平台生成支持。",[588,28090,28091],{"align":24009},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,28093,28094],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,28096,28097],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,28099,28100],{},"docker images 可以查看已经下载的镜像",[19,28102,28103],{},[29,28104],{"alt":143,"src":28105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,28107,28108],{},[234,28109,28110],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,28112,28113],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,28115,28116],{},"docker container logs 查看容器日志",[19,28118,28119],{},"docker top 查看容器里的进程",[19,28121,28122],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[138,28124,28126],{"className":24095,"code":28125,"language":24097,"meta":143,"style":143},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[51,28127,28128],{"__ignoreMap":143},[147,28129,28130,28133,28136,28139],{"class":149,"line":150},[147,28131,28132],{"class":2237},"如：docker",[147,28134,28135],{"class":504}," cp",[147,28137,28138],{"class":504}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[147,28140,28141],{"class":504}," \u002Fmydata\u002Fnginx\n",[19,28143,28144],{},"docker run时在启动容器的时候会有几个常用的选项：",[1406,28146,28147,28150,28153],{},[353,28148,28149],{},"-d选项：表示后台运行",[353,28151,28152],{},"-P选项：随机端口映射",[353,28154,28155],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[367,28157,28159],{"id":28158},"_53run命令的参数非常重要",[234,28160,28161],{},"5.3.run命令的参数（非常重要）",[537,28163,28164,28177],{},[540,28165,28166],{},[543,28167,28168,28171,28174],{},[546,28169,28170],{"align":24009},"参数\u002F配置",[546,28172,28173],{"align":24009},"功能说明",[546,28175,28176],{"align":24009},"重要性与参考依据",[583,28178,28179,28190,28201,28212,28223,28234,28245,28256,28267,28278,28289,28300,28311,28322,28333],{},[543,28180,28181,28184,28187],{},[588,28182,28183],{"align":24009},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[588,28185,28186],{"align":24009},"指定容器名称，便于后续管理",[588,28188,28189],{"align":24009},"替代随机生成的容器名。",[543,28191,28192,28195,28198],{},[588,28193,28194],{"align":24009},"–gpus all",[588,28196,28197],{"align":24009},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[588,28199,28200],{"align":24009},"用于CUDA加速等GPU依赖任务。",[543,28202,28203,28206,28209],{},[588,28204,28205],{"align":24009},"-e NVIDIA_DRIVER_CAPABILITIES=all",[588,28207,28208],{"align":24009},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[588,28210,28211],{"align":24009},"确保容器内GPU功能完整67。",[543,28213,28214,28217,28220],{},[588,28215,28216],{"align":24009},"-dit",[588,28218,28219],{"align":24009},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[588,28221,28222],{"align":24009},"允许容器在后台运行并支持交互操作。",[543,28224,28225,28228,28231],{},[588,28226,28227],{"align":24009},"–privileged",[588,28229,28230],{"align":24009},"赋予容器完全主机权限（可访问设备、内核模块等）",[588,28232,28233],{"align":24009},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[543,28235,28236,28239,28242],{},[588,28237,28238],{"align":24009},"–net=host",[588,28240,28241],{"align":24009},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[588,28243,28244],{"align":24009},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[543,28246,28247,28250,28253],{},[588,28248,28249],{"align":24009},"–group-add audio–group-add video–group-add dialout",[588,28251,28252],{"align":24009},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[588,28254,28255],{"align":24009},"避免权限问题（如避免无法调用摄像头、麦克风）。",[543,28257,28258,28261,28264],{},[588,28259,28260],{"align":24009},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[588,28262,28263],{"align":24009},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[588,28265,28266],{"align":24009},"支持容器内运行图形界面应用（如OpenCV可视化）。",[543,28268,28269,28272,28275],{},[588,28270,28271],{"align":24009},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[588,28273,28274],{"align":24009},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[588,28276,28277],{"align":24009},"实现容器内图形显示。",[543,28279,28280,28283,28286],{},[588,28281,28282],{"align":24009},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[588,28284,28285],{"align":24009},"挂载X11认证文件（只读）",[588,28287,28288],{"align":24009},"确保容器有权连接宿主机显示服务。",[543,28290,28291,28294,28297],{},[588,28292,28293],{"align":24009},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[588,28295,28296],{"align":24009},"挂载Wayland显示协议相关目录",[588,28298,28299],{"align":24009},"支持Wayland协议的图形显示。",[543,28301,28302,28305,28308],{},[588,28303,28304],{"align":24009},"–ulimit nofile=1024:524288",[588,28306,28307],{"align":24009},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[588,28309,28310],{"align":24009},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[543,28312,28313,28316,28319],{},[588,28314,28315],{"align":24009},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[588,28317,28318],{"align":24009},"挂载宿主机用户目录到容器内同名路径",[588,28320,28321],{"align":24009},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[543,28323,28324,28327,28330],{},[588,28325,28326],{"align":24009},"-w \u002Fhome\u002Ftungchiahui",[588,28328,28329],{"align":24009},"设置容器启动后的默认工作目录",[588,28331,28332],{"align":24009},"直接进入项目路径，方便执行命令2324。",[543,28334,28335,28338,28341],{},[588,28336,28337],{"align":24009},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[588,28339,28340],{"align":24009},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[588,28342,28343],{"align":24009},"提供预配置的深度学习与机器人开发环境。",[19,28345,28346,28347,28349,28350,28353],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[51,28348,24850],{},"加不加",[51,28351,28352],{},"sudo -E","都无所谓。",[19,28355,28356,28357,28359,28360,28362,28363,28366,28367,28369],{},"用户已经被加到docker组了，不用",[51,28358,24850],{},"也行跑，其次，",[51,28361,24850],{},"运行的话，你的",[51,28364,28365],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[51,28368,28365],{},"更不可能变了。",[138,28371,28373],{"className":24095,"code":28372,"language":24097,"meta":143,"style":143},"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",[51,28374,28375,28388,28398,28408,28420,28427,28434,28441,28451,28460,28469,28483,28495,28507,28516,28526,28535,28550,28583,28610,28621,28628],{"__ignoreMap":143},[147,28376,28377,28379,28381,28383,28386],{"class":149,"line":150},[147,28378,24850],{"class":2237},[147,28380,26594],{"class":504},[147,28382,27504],{"class":504},[147,28384,28385],{"class":448}," --name=ros_opencv_cuda",[147,28387,24952],{"class":448},[147,28389,28390,28393,28396],{"class":149,"line":312},[147,28391,28392],{"class":157},"--gpus ",[147,28394,28395],{"class":504},"all",[147,28397,24952],{"class":448},[147,28399,28400,28403,28406],{"class":149,"line":1454},[147,28401,28402],{"class":157},"-e ",[147,28404,28405],{"class":504},"NVIDIA_DRIVER_CAPABILITIES=all",[147,28407,24952],{"class":448},[147,28409,28410,28412,28415,28418],{"class":149,"line":1469},[147,28411,28402],{"class":157},[147,28413,28414],{"class":504},"DISPLAY=",[147,28416,28417],{"class":157},"$DISPLAY ",[147,28419,26449],{"class":448},[147,28421,28422,28425],{"class":149,"line":1475},[147,28423,28424],{"class":157},"-dit ",[147,28426,26449],{"class":448},[147,28428,28429,28432],{"class":149,"line":1489},[147,28430,28431],{"class":157},"--privileged ",[147,28433,26449],{"class":448},[147,28435,28436,28439],{"class":149,"line":1495},[147,28437,28438],{"class":157},"--net=host ",[147,28440,26449],{"class":448},[147,28442,28443,28446,28449],{"class":149,"line":1586},[147,28444,28445],{"class":157},"--group-add ",[147,28447,28448],{"class":504},"audio",[147,28450,24952],{"class":448},[147,28452,28453,28455,28458],{"class":149,"line":1592},[147,28454,28445],{"class":157},[147,28456,28457],{"class":504},"video",[147,28459,24952],{"class":448},[147,28461,28462,28464,28467],{"class":149,"line":1604},[147,28463,28445],{"class":157},[147,28465,28466],{"class":504},"dialout",[147,28468,24952],{"class":448},[147,28470,28471,28473,28476,28478,28481],{"class":149,"line":1886},[147,28472,28402],{"class":157},[147,28474,28475],{"class":504},"XAUTHORITY=",[147,28477,28365],{"class":157},[147,28479,28480],{"class":504},"\u002F.Xauthority",[147,28482,24952],{"class":448},[147,28484,28485,28487,28490,28493],{"class":149,"line":1891},[147,28486,28402],{"class":157},[147,28488,28489],{"class":504},"WAYLAND_DISPLAY=",[147,28491,28492],{"class":157},"$WAYLAND_DISPLAY ",[147,28494,26449],{"class":448},[147,28496,28497,28499,28502,28505],{"class":149,"line":1897},[147,28498,28402],{"class":157},[147,28500,28501],{"class":504},"XDG_RUNTIME_DIR=",[147,28503,28504],{"class":157},"$XDG_RUNTIME_DIR ",[147,28506,26449],{"class":448},[147,28508,28509,28511,28514],{"class":149,"line":1902},[147,28510,28402],{"class":157},[147,28512,28513],{"class":504},"QT_QPA_PLATFORM=xcb",[147,28515,24952],{"class":448},[147,28517,28518,28521,28524],{"class":149,"line":1916},[147,28519,28520],{"class":157},"-v ",[147,28522,28523],{"class":504},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[147,28525,24952],{"class":448},[147,28527,28528,28530,28533],{"class":149,"line":1921},[147,28529,28520],{"class":157},[147,28531,28532],{"class":504},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[147,28534,24952],{"class":448},[147,28536,28537,28540,28543,28545,28548],{"class":149,"line":1927},[147,28538,28539],{"class":157},"-v $HOME",[147,28541,28542],{"class":504},"\u002F.Xauthority:",[147,28544,28365],{"class":157},[147,28546,28547],{"class":504},"\u002F.Xauthority:ro",[147,28549,24952],{"class":448},[147,28551,28552,28554,28557,28559,28562,28565,28567,28570,28572,28574,28576,28578,28581],{"class":149,"line":1948},[147,28553,28520],{"class":157},[147,28555,28556],{"class":504},"\u002Frun\u002Fuser\u002F",[147,28558,25373],{"class":157},[147,28560,28561],{"class":2237},"id",[147,28563,28564],{"class":448}," -u",[147,28566,828],{"class":157},[147,28568,28569],{"class":504},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[147,28571,25373],{"class":157},[147,28573,28561],{"class":2237},[147,28575,28564],{"class":448},[147,28577,828],{"class":157},[147,28579,28580],{"class":504},"\u002Fwayland-0",[147,28582,24952],{"class":448},[147,28584,28585,28587,28589,28591,28593,28595,28597,28600,28602,28604,28606,28608],{"class":149,"line":1953},[147,28586,28520],{"class":157},[147,28588,28556],{"class":504},[147,28590,25373],{"class":157},[147,28592,28561],{"class":2237},[147,28594,28564],{"class":448},[147,28596,828],{"class":157},[147,28598,28599],{"class":504},":\u002Frun\u002Fuser\u002F",[147,28601,25373],{"class":157},[147,28603,28561],{"class":2237},[147,28605,28564],{"class":448},[147,28607,13988],{"class":157},[147,28609,26449],{"class":448},[147,28611,28612,28614,28616,28619],{"class":149,"line":1967},[147,28613,28539],{"class":157},[147,28615,1258],{"class":504},[147,28617,28618],{"class":157},"$HOME ",[147,28620,26449],{"class":448},[147,28622,28623,28626],{"class":149,"line":1972},[147,28624,28625],{"class":157},"-w $HOME ",[147,28627,26449],{"class":448},[147,28629,28630],{"class":149,"line":2001},[147,28631,28632],{"class":157},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,28634,9299],{},[350,28636,28637,28645,28648,28651],{},[353,28638,28639,249,28641,28644],{},[51,28640,28405],{},[51,28642,28643],{},"--gpus all","没有英伟达显卡请注释。",[353,28646,28647],{},"--name后面请自己为容器起名。",[353,28649,28650],{},"最后一行仓库名称请你自己找对应的镜像填上。",[353,28652,28653,28654,28659],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23826,28655,28656],{},[234,28657,28658],{},"请不要加","。",[138,28661,28663],{"className":24095,"code":28662,"language":24097,"meta":143,"style":143},"--ulimit nofile=1024:524288 \\\n",[51,28664,28665],{"__ignoreMap":143},[147,28666,28667,28670,28673],{"class":149,"line":150},[147,28668,28669],{"class":2237},"--ulimit",[147,28671,28672],{"class":504}," nofile=1024:524288",[147,28674,24952],{"class":448},[19,28676,28677,28678,28683],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23826,28679,28680],{},[234,28681,28682],{},"不建议","**.**",[138,28685,28687],{"className":24095,"code":28686,"language":24097,"meta":143,"style":143},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[51,28688,28689,28716,28725],{"__ignoreMap":143},[147,28690,28691,28694,28697,28699,28701,28703,28705,28707,28709,28712,28714],{"class":149,"line":150},[147,28692,28693],{"class":2237},"--user",[147,28695,28696],{"class":157}," $(",[147,28698,28561],{"class":2237},[147,28700,28564],{"class":448},[147,28702,828],{"class":157},[147,28704,1258],{"class":504},[147,28706,25373],{"class":157},[147,28708,28561],{"class":2237},[147,28710,28711],{"class":448}," -g",[147,28713,13988],{"class":157},[147,28715,26449],{"class":448},[147,28717,28718,28720,28723],{"class":149,"line":312},[147,28719,28520],{"class":157},[147,28721,28722],{"class":504},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[147,28724,24952],{"class":448},[147,28726,28727,28729,28732],{"class":149,"line":1454},[147,28728,28520],{"class":157},[147,28730,28731],{"class":504},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[147,28733,24952],{"class":448},[308,28735,28736],{},"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":143,"searchDepth":312,"depth":312,"links":28738},[28739,28740,28741],{"id":27737,"depth":1454,"text":27738},{"id":27747,"depth":1454,"text":27748},{"id":28158,"depth":1454,"text":28161},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27729,"description":143},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28748,"title":28749,"body":28750,"description":143,"extension":322,"meta":30373,"navigation":324,"path":30374,"seo":30375,"stem":30376,"__hash__":30377},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28751,"toc":30368},[28752,28755,28759,28762,28984,28988,28992,28995,29101,29106,29109,29114,29117,29122,29125,29130,29133,29145,29148,29153,29160,29188,29195,29271,29276,29279,29302,29304,29379,29384,29387,29391,29399,29404,29409,29413,29424,29430,29433,29436,29460,29463,29466,29494,29497,29500,29965,29968,29973,29978,29982,30005,30010,30014,30018,30021,30024,30027,30054,30057,30060,30078,30081,30084,30106,30114,30119,30124,30128,30131,30134,30137,30140,30185,30188,30206,30209,30214,30217,30238,30241,30297,30300,30305,30309,30312,30319,30322,30325,30330,30333,30349,30352,30365],[10,28753,28749],{"id":28754},"_6手动创建docker镜像",[367,28756,28758],{"id":28757},"_61dockerfile","6.1.DockerFile",[19,28760,28761],{},"常用命令：",[537,28763,28764,28775],{},[540,28765,28766],{},[543,28767,28768,28771,28773],{},[546,28769,28770],{"align":24009},"指令",[546,28772,26143],{"align":24009},[546,28774,27766],{"align":24009},[583,28776,28777,28787,28803,28814,28825,28836,28847,28858,28869,28883,28897,28908,28922,28933,28944,28958,28973],{},[543,28778,28779,28781,28784],{},[588,28780,27644],{"align":24009},[588,28782,28783],{"align":24009},"指定基础镜像，是 Dockerfile 的起点",[588,28785,28786],{"align":24009},"FROM ubuntu:22.04",[543,28788,28789,28792,28795],{},[588,28790,28791],{"align":24009},"LABEL",[588,28793,28794],{"align":24009},"添加元数据（如作者、版本等）",[588,28796,28797,28798,28802],{"align":24009},"LABEL maintainer=”",[637,28799,28801],{"href":28800},"mailto:you@example.com","you@example.com","”",[543,28804,28805,28808,28811],{},[588,28806,28807],{"align":24009},"ENV",[588,28809,28810],{"align":24009},"设置环境变量",[588,28812,28813],{"align":24009},"ENV PORT=8080",[543,28815,28816,28819,28822],{},[588,28817,28818],{"align":24009},"ARG",[588,28820,28821],{"align":24009},"构建参数，只在构建期间可用",[588,28823,28824],{"align":24009},"ARG VERSION=1.0",[543,28826,28827,28830,28833],{},[588,28828,28829],{"align":24009},"RUN",[588,28831,28832],{"align":24009},"构建镜像时运行命令",[588,28834,28835],{"align":24009},"RUN apt-get update && apt-get install -y curl",[543,28837,28838,28841,28844],{},[588,28839,28840],{"align":24009},"COPY",[588,28842,28843],{"align":24009},"复制文件到镜像中",[588,28845,28846],{"align":24009},"COPY . \u002Fapp",[543,28848,28849,28852,28855],{},[588,28850,28851],{"align":24009},"ADD",[588,28853,28854],{"align":24009},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[588,28856,28857],{"align":24009},"ADD archive.tar.gz \u002Fdata\u002F",[543,28859,28860,28863,28866],{},[588,28861,28862],{"align":24009},"WORKDIR",[588,28864,28865],{"align":24009},"设置工作目录",[588,28867,28868],{"align":24009},"WORKDIR \u002Fopt",[543,28870,28871,28874,28877],{},[588,28872,28873],{"align":24009},"CMD",[588,28875,28876],{"align":24009},"设置容器启动时默认命令（可被 docker run 覆盖）",[588,28878,28879,28880],{"align":24009},"CMD ",[147,28881,28882],{},"“node”, “index.js”",[543,28884,28885,28888,28891],{},[588,28886,28887],{"align":24009},"ENTRYPOINT",[588,28889,28890],{"align":24009},"设置容器启动时固定命令（通常用于 CLI 工具等）",[588,28892,28893,28894],{"align":24009},"ENTRYPOINT ",[147,28895,28896],{},"“python3”",[543,28898,28899,28902,28905],{},[588,28900,28901],{"align":24009},"EXPOSE",[588,28903,28904],{"align":24009},"声明镜像内服务监听的端口（不会自动映射）",[588,28906,28907],{"align":24009},"EXPOSE 80",[543,28909,28910,28913,28916],{},[588,28911,28912],{"align":24009},"VOLUME",[588,28914,28915],{"align":24009},"声明数据卷挂载点",[588,28917,28918,28919],{"align":24009},"VOLUME ",[147,28920,28921],{},"“\u002Fdata”",[543,28923,28924,28927,28930],{},[588,28925,28926],{"align":24009},"USER",[588,28928,28929],{"align":24009},"设置后续命令执行的用户",[588,28931,28932],{"align":24009},"USER appuser",[543,28934,28935,28938,28941],{},[588,28936,28937],{"align":24009},"ONBUILD",[588,28939,28940],{"align":24009},"当镜像作为其他镜像基础镜像时触发的构建指令",[588,28942,28943],{"align":24009},"ONBUILD COPY . \u002Fsrc",[543,28945,28946,28949,28952],{},[588,28947,28948],{"align":24009},"SHELL",[588,28950,28951],{"align":24009},"更改默认 shell，比如将 sh -c 改为 bash -c",[588,28953,28954,28955],{"align":24009},"SHELL ",[147,28956,28957],{},"“\u002Fbin\u002Fbash”, “-c”",[543,28959,28960,28963,28966],{},[588,28961,28962],{"align":24009},"HEALTHCHECK",[588,28964,28965],{"align":24009},"定义容器运行时的健康检查命令",[588,28967,28968,28969],{"align":24009},"`HEALTHCHECK CMD curl –fail ",[637,28970,28971],{"href":28971,"rel":28972},"http:\u002F\u002Flocalhost:8080",[24138],[543,28974,28975,28978,28981],{},[588,28976,28977],{"align":24009},"STOPSIGNAL",[588,28979,28980],{"align":24009},"容器停止时发送的信号",[588,28982,28983],{"align":24009},"STOPSIGNAL SIGKILL",[367,28985,28987],{"id":28986},"_62自己创建容器","6.2.自己创建容器",[22271,28989,28991],{"id":28990},"_621手动创建","6.2.1.手动创建",[19,28993,28994],{},"在x86电脑上编译x86的：",[138,28996,28998],{"className":24095,"code":28997,"language":24097,"meta":143,"style":143},"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",[51,28999,29000,29016,29020,29033,29037,29050,29054,29067,29071,29084,29088],{"__ignoreMap":143},[147,29001,29002,29004,29007,29010,29013],{"class":149,"line":150},[147,29003,26827],{"class":2237},[147,29005,29006],{"class":504}," build",[147,29008,29009],{"class":448}," -t",[147,29011,29012],{"class":504}," ros-melodic-cuda118-cudnn8-bionic:latest",[147,29014,29015],{"class":504}," .\n",[147,29017,29018],{"class":149,"line":312},[147,29019,2674],{"emptyLinePlaceholder":324},[147,29021,29022,29024,29026,29028,29031],{"class":149,"line":1454},[147,29023,26827],{"class":2237},[147,29025,29006],{"class":504},[147,29027,29009],{"class":448},[147,29029,29030],{"class":504}," ros-noetic-focal:latest",[147,29032,29015],{"class":504},[147,29034,29035],{"class":149,"line":1469},[147,29036,2674],{"emptyLinePlaceholder":324},[147,29038,29039,29041,29043,29045,29048],{"class":149,"line":1475},[147,29040,26827],{"class":2237},[147,29042,29006],{"class":504},[147,29044,29009],{"class":448},[147,29046,29047],{"class":504}," ros-humble-jammy:latest",[147,29049,29015],{"class":504},[147,29051,29052],{"class":149,"line":1489},[147,29053,2674],{"emptyLinePlaceholder":324},[147,29055,29056,29058,29060,29062,29065],{"class":149,"line":1495},[147,29057,26827],{"class":2237},[147,29059,29006],{"class":504},[147,29061,29009],{"class":448},[147,29063,29064],{"class":504}," ros-jazzy-noble:latest",[147,29066,29015],{"class":504},[147,29068,29069],{"class":149,"line":1586},[147,29070,2674],{"emptyLinePlaceholder":324},[147,29072,29073,29075,29077,29079,29082],{"class":149,"line":1592},[147,29074,26827],{"class":2237},[147,29076,29006],{"class":504},[147,29078,29009],{"class":448},[147,29080,29081],{"class":504}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[147,29083,29015],{"class":504},[147,29085,29086],{"class":149,"line":1604},[147,29087,2674],{"emptyLinePlaceholder":324},[147,29089,29090,29092,29094,29096,29099],{"class":149,"line":1886},[147,29091,26827],{"class":2237},[147,29093,29006],{"class":504},[147,29095,29009],{"class":448},[147,29097,29098],{"class":504}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[147,29100,29015],{"class":504},[19,29102,29103],{},[29,29104],{"alt":143,"src":29105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,29107,29108],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,29110,29111],{},[29,29112],{"alt":143,"src":29113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,29115,29116],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[350,29118,29119],{},[353,29120,29121],{},"创建 Docker Hub 账户",[19,29123,29124],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[350,29126,29127],{"start":312},[353,29128,29129],{},"登录 Docker Hub",[19,29131,29132],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[138,29134,29136],{"className":24095,"code":29135,"language":24097,"meta":143,"style":143},"docker login\n",[51,29137,29138],{"__ignoreMap":143},[147,29139,29140,29142],{"class":149,"line":150},[147,29141,26827],{"class":2237},[147,29143,29144],{"class":504}," login\n",[19,29146,29147],{},"输入你的 Docker Hub 用户名和密码进行验证。",[350,29149,29150],{},[353,29151,29152],{},"为你的镜像打标签",[19,29154,29155,29156,29159],{},"Docker Hub 使用 ",[51,29157,29158],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[138,29161,29163],{"className":24095,"code":29162,"language":24097,"meta":143,"style":143},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[51,29164,29165],{"__ignoreMap":143},[147,29166,29167,29169,29172,29174,29177,29180,29183,29185],{"class":149,"line":150},[147,29168,26827],{"class":2237},[147,29170,29171],{"class":504}," tag",[147,29173,29064],{"class":504},[147,29175,29176],{"class":397}," \u003C",[147,29178,29179],{"class":504},"你的用户",[147,29181,29182],{"class":157},"名",[147,29184,1359],{"class":397},[147,29186,29187],{"class":504},"\u002Fros-jazzy-noble:latest\n",[19,29189,29190,29191,29194],{},"例如，如果你的 Docker Hub 用户名是 ",[51,29192,29193],{},"tungchiahui","，你应该执行：",[138,29196,29198],{"className":24095,"code":29197,"language":24097,"meta":143,"style":143},"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",[51,29199,29200,29211,29215,29226,29230,29241,29245,29256,29260],{"__ignoreMap":143},[147,29201,29202,29204,29206,29208],{"class":149,"line":150},[147,29203,26827],{"class":2237},[147,29205,29171],{"class":504},[147,29207,29030],{"class":504},[147,29209,29210],{"class":504}," tungchiahui\u002Fros-noetic-focal:latest\n",[147,29212,29213],{"class":149,"line":312},[147,29214,2674],{"emptyLinePlaceholder":324},[147,29216,29217,29219,29221,29223],{"class":149,"line":1454},[147,29218,26827],{"class":2237},[147,29220,29171],{"class":504},[147,29222,29047],{"class":504},[147,29224,29225],{"class":504}," tungchiahui\u002Fros-humble-jammy:latest\n",[147,29227,29228],{"class":149,"line":1469},[147,29229,2674],{"emptyLinePlaceholder":324},[147,29231,29232,29234,29236,29238],{"class":149,"line":1475},[147,29233,26827],{"class":2237},[147,29235,29171],{"class":504},[147,29237,29064],{"class":504},[147,29239,29240],{"class":504}," tungchiahui\u002Fros-jazzy-noble:latest\n",[147,29242,29243],{"class":149,"line":1489},[147,29244,2674],{"emptyLinePlaceholder":324},[147,29246,29247,29249,29251,29253],{"class":149,"line":1495},[147,29248,26827],{"class":2237},[147,29250,29171],{"class":504},[147,29252,29081],{"class":504},[147,29254,29255],{"class":504}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[147,29257,29258],{"class":149,"line":1586},[147,29259,2674],{"emptyLinePlaceholder":324},[147,29261,29262,29264,29266,29268],{"class":149,"line":1592},[147,29263,26827],{"class":2237},[147,29265,29171],{"class":504},[147,29267,29098],{"class":504},[147,29269,29270],{"class":504}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[350,29272,29273],{"start":312},[353,29274,29275],{},"推送镜像到 Docker Hub",[19,29277,29278],{},"使用以下命令将镜像推送到 Docker Hub：",[138,29280,29282],{"className":24095,"code":29281,"language":24097,"meta":143,"style":143},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[51,29283,29284],{"__ignoreMap":143},[147,29285,29286,29288,29291,29293,29295,29297,29299],{"class":149,"line":150},[147,29287,26827],{"class":2237},[147,29289,29290],{"class":504}," push",[147,29292,29176],{"class":397},[147,29294,29179],{"class":504},[147,29296,29182],{"class":157},[147,29298,1359],{"class":397},[147,29300,29301],{"class":504},"\u002Fros-noetic-jazzy-noble:latest\n",[19,29303,14906],{},[138,29305,29307],{"className":24095,"code":29306,"language":24097,"meta":143,"style":143},"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",[51,29308,29309,29317,29321,29329,29333,29341,29345,29354,29358,29366,29370],{"__ignoreMap":143},[147,29310,29311,29313,29315],{"class":149,"line":150},[147,29312,26827],{"class":2237},[147,29314,29290],{"class":504},[147,29316,29210],{"class":504},[147,29318,29319],{"class":149,"line":312},[147,29320,2674],{"emptyLinePlaceholder":324},[147,29322,29323,29325,29327],{"class":149,"line":1454},[147,29324,26827],{"class":2237},[147,29326,29290],{"class":504},[147,29328,29225],{"class":504},[147,29330,29331],{"class":149,"line":1469},[147,29332,2674],{"emptyLinePlaceholder":324},[147,29334,29335,29337,29339],{"class":149,"line":1475},[147,29336,26827],{"class":2237},[147,29338,29290],{"class":504},[147,29340,29240],{"class":504},[147,29342,29343],{"class":149,"line":1489},[147,29344,2674],{"emptyLinePlaceholder":324},[147,29346,29347,29349,29351],{"class":149,"line":1495},[147,29348,26827],{"class":2237},[147,29350,29290],{"class":504},[147,29352,29353],{"class":504}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[147,29355,29356],{"class":149,"line":1586},[147,29357,2674],{"emptyLinePlaceholder":324},[147,29359,29360,29362,29364],{"class":149,"line":1592},[147,29361,26827],{"class":2237},[147,29363,29290],{"class":504},[147,29365,29270],{"class":504},[147,29367,29368],{"class":149,"line":1604},[147,29369,2674],{"emptyLinePlaceholder":324},[147,29371,29372,29374,29376],{"class":149,"line":1886},[147,29373,26827],{"class":2237},[147,29375,29290],{"class":504},[147,29377,29378],{"class":504}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[350,29380,29381],{"start":1454},[353,29382,29383],{},"验证推送成功",[19,29385,29386],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,29388,29389],{},[234,29390,4058],{},[1406,29392,29393,29396],{},[353,29394,29395],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[353,29397,29398],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,29400,29401],{},[29,29402],{"alt":143,"src":29403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,29405,29406],{},[29,29407],{"alt":143,"src":29408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22271,29410,29412],{"id":29411},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,29414,29415,29416,29419,29420,29423],{},"如果您想在 ",[234,29417,29418],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[234,29421,29422],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,29425,29426,29427],{},"1. ",[234,29428,29429],{},"启用 Docker 跨平台构建",[19,29431,29432],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,29434,29435],{},"第一步：启用 buildx（只需执行一次）",[138,29437,29439],{"className":24095,"code":29438,"language":24097,"meta":143,"style":143},"docker buildx create --name multiarch_builder --use\n",[51,29440,29441],{"__ignoreMap":143},[147,29442,29443,29445,29448,29451,29454,29457],{"class":149,"line":150},[147,29444,26827],{"class":2237},[147,29446,29447],{"class":504}," buildx",[147,29449,29450],{"class":504}," create",[147,29452,29453],{"class":448}," --name",[147,29455,29456],{"class":504}," multiarch_builder",[147,29458,29459],{"class":448}," --use\n",[19,29461,29462],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,29464,29465],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[138,29467,29469],{"className":24095,"code":29468,"language":24097,"meta":143,"style":143},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[51,29470,29471],{"__ignoreMap":143},[147,29472,29473,29475,29477,29479,29482,29485,29488,29491],{"class":149,"line":150},[147,29474,26827],{"class":2237},[147,29476,27504],{"class":504},[147,29478,27507],{"class":448},[147,29480,29481],{"class":448}," --privileged",[147,29483,29484],{"class":504}," multiarch\u002Fqemu-user-static",[147,29486,29487],{"class":448}," --reset",[147,29489,29490],{"class":448}," -p",[147,29492,29493],{"class":504}," yes\n",[19,29495,29496],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,29498,29499],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[138,29501,29503],{"className":24095,"code":29502,"language":24097,"meta":143,"style":143},"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",[51,29504,29505,29547,29551,29556,29566,29576,29585,29591,29595,29599,29609,29617,29626,29632,29636,29640,29650,29658,29667,29673,29677,29681,29691,29699,29708,29714,29718,29722,29732,29740,29749,29755,29759,29763,29773,29781,29790,29796,29800,29804,29814,29822,29831,29837,29841,29845,29855,29863,29872,29878,29882,29886,29896,29904,29913,29919,29923,29927,29938,29946,29955,29961],{"__ignoreMap":143},[147,29506,29507,29509,29511,29513,29516,29519,29521,29523,29526,29528,29530,29532,29534,29537,29540,29542,29545],{"class":149,"line":150},[147,29508,26827],{"class":2237},[147,29510,29447],{"class":504},[147,29512,29006],{"class":504},[147,29514,29515],{"class":448}," --platform",[147,29517,29518],{"class":504}," linux\u002Famd64,linux\u002Farm64",[147,29520,29009],{"class":448},[147,29522,29176],{"class":397},[147,29524,29525],{"class":504},"你的镜像",[147,29527,29182],{"class":157},[147,29529,1359],{"class":397},[147,29531,1258],{"class":504},[147,29533,1309],{"class":397},[147,29535,29536],{"class":504},"标",[147,29538,29539],{"class":157},"签",[147,29541,1359],{"class":397},[147,29543,29544],{"class":448}," --push",[147,29546,29015],{"class":504},[147,29548,29549],{"class":149,"line":312},[147,29550,2674],{"emptyLinePlaceholder":324},[147,29552,29553],{"class":149,"line":1454},[147,29554,29555],{"class":458},"# 例子：\n",[147,29557,29558,29560,29562,29564],{"class":149,"line":1469},[147,29559,26827],{"class":2237},[147,29561,29447],{"class":504},[147,29563,29006],{"class":504},[147,29565,24952],{"class":448},[147,29567,29568,29571,29574],{"class":149,"line":1475},[147,29569,29570],{"class":157},"--platform ",[147,29572,29573],{"class":504},"linux\u002Famd64,linux\u002Farm64",[147,29575,24952],{"class":448},[147,29577,29578,29580,29583],{"class":149,"line":1489},[147,29579,29009],{"class":448},[147,29581,29582],{"class":504}," tungchiahui\u002Fros:noetic-focal",[147,29584,24952],{"class":448},[147,29586,29587,29589],{"class":149,"line":1495},[147,29588,29544],{"class":448},[147,29590,24952],{"class":448},[147,29592,29593],{"class":149,"line":1586},[147,29594,29015],{"class":504},[147,29596,29597],{"class":149,"line":1592},[147,29598,2674],{"emptyLinePlaceholder":324},[147,29600,29601,29603,29605,29607],{"class":149,"line":1604},[147,29602,26827],{"class":2237},[147,29604,29447],{"class":504},[147,29606,29006],{"class":504},[147,29608,24952],{"class":448},[147,29610,29611,29613,29615],{"class":149,"line":1886},[147,29612,29570],{"class":157},[147,29614,29573],{"class":504},[147,29616,24952],{"class":448},[147,29618,29619,29621,29624],{"class":149,"line":1891},[147,29620,29009],{"class":448},[147,29622,29623],{"class":504}," tungchiahui\u002Fros:humble-jammy",[147,29625,24952],{"class":448},[147,29627,29628,29630],{"class":149,"line":1897},[147,29629,29544],{"class":448},[147,29631,24952],{"class":448},[147,29633,29634],{"class":149,"line":1902},[147,29635,29015],{"class":504},[147,29637,29638],{"class":149,"line":1916},[147,29639,2674],{"emptyLinePlaceholder":324},[147,29641,29642,29644,29646,29648],{"class":149,"line":1921},[147,29643,26827],{"class":2237},[147,29645,29447],{"class":504},[147,29647,29006],{"class":504},[147,29649,24952],{"class":448},[147,29651,29652,29654,29656],{"class":149,"line":1927},[147,29653,29570],{"class":157},[147,29655,29573],{"class":504},[147,29657,24952],{"class":448},[147,29659,29660,29662,29665],{"class":149,"line":1948},[147,29661,29009],{"class":448},[147,29663,29664],{"class":504}," tungchiahui\u002Fros:jazzy-noble",[147,29666,24952],{"class":448},[147,29668,29669,29671],{"class":149,"line":1953},[147,29670,29544],{"class":448},[147,29672,24952],{"class":448},[147,29674,29675],{"class":149,"line":1967},[147,29676,29015],{"class":504},[147,29678,29679],{"class":149,"line":1972},[147,29680,2674],{"emptyLinePlaceholder":324},[147,29682,29683,29685,29687,29689],{"class":149,"line":2001},[147,29684,26594],{"class":2237},[147,29686,29447],{"class":504},[147,29688,29006],{"class":504},[147,29690,24952],{"class":448},[147,29692,29693,29695,29697],{"class":149,"line":2006},[147,29694,29570],{"class":157},[147,29696,29573],{"class":504},[147,29698,24952],{"class":448},[147,29700,29701,29703,29706],{"class":149,"line":2023},[147,29702,29009],{"class":448},[147,29704,29705],{"class":504}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[147,29707,24952],{"class":448},[147,29709,29710,29712],{"class":149,"line":2028},[147,29711,29544],{"class":448},[147,29713,24952],{"class":448},[147,29715,29716],{"class":149,"line":2033},[147,29717,29015],{"class":504},[147,29719,29720],{"class":149,"line":2038},[147,29721,2674],{"emptyLinePlaceholder":324},[147,29723,29724,29726,29728,29730],{"class":149,"line":2052},[147,29725,26827],{"class":2237},[147,29727,29447],{"class":504},[147,29729,29006],{"class":504},[147,29731,24952],{"class":448},[147,29733,29734,29736,29738],{"class":149,"line":2057},[147,29735,29570],{"class":157},[147,29737,29573],{"class":504},[147,29739,24952],{"class":448},[147,29741,29742,29744,29747],{"class":149,"line":2851},[147,29743,29009],{"class":448},[147,29745,29746],{"class":504}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[147,29748,24952],{"class":448},[147,29750,29751,29753],{"class":149,"line":2865},[147,29752,29544],{"class":448},[147,29754,24952],{"class":448},[147,29756,29757],{"class":149,"line":2873},[147,29758,29015],{"class":504},[147,29760,29761],{"class":149,"line":2878},[147,29762,2674],{"emptyLinePlaceholder":324},[147,29764,29765,29767,29769,29771],{"class":149,"line":2884},[147,29766,26594],{"class":2237},[147,29768,29447],{"class":504},[147,29770,29006],{"class":504},[147,29772,24952],{"class":448},[147,29774,29775,29777,29779],{"class":149,"line":2890},[147,29776,29570],{"class":157},[147,29778,29573],{"class":504},[147,29780,24952],{"class":448},[147,29782,29783,29785,29788],{"class":149,"line":2895},[147,29784,29009],{"class":448},[147,29786,29787],{"class":504}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[147,29789,24952],{"class":448},[147,29791,29792,29794],{"class":149,"line":8222},[147,29793,29544],{"class":448},[147,29795,24952],{"class":448},[147,29797,29798],{"class":149,"line":8246},[147,29799,29015],{"class":504},[147,29801,29802],{"class":149,"line":8251},[147,29803,2674],{"emptyLinePlaceholder":324},[147,29805,29806,29808,29810,29812],{"class":149,"line":8257},[147,29807,26827],{"class":2237},[147,29809,29447],{"class":504},[147,29811,29006],{"class":504},[147,29813,24952],{"class":448},[147,29815,29816,29818,29820],{"class":149,"line":8284},[147,29817,29570],{"class":157},[147,29819,29573],{"class":504},[147,29821,24952],{"class":448},[147,29823,29824,29826,29829],{"class":149,"line":8289},[147,29825,29009],{"class":448},[147,29827,29828],{"class":504}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[147,29830,24952],{"class":448},[147,29832,29833,29835],{"class":149,"line":8295},[147,29834,29544],{"class":448},[147,29836,24952],{"class":448},[147,29838,29839],{"class":149,"line":8307},[147,29840,29015],{"class":504},[147,29842,29843],{"class":149,"line":8319},[147,29844,2674],{"emptyLinePlaceholder":324},[147,29846,29847,29849,29851,29853],{"class":149,"line":8331},[147,29848,26827],{"class":2237},[147,29850,29447],{"class":504},[147,29852,29006],{"class":504},[147,29854,24952],{"class":448},[147,29856,29857,29859,29861],{"class":149,"line":9990},[147,29858,29570],{"class":157},[147,29860,29573],{"class":504},[147,29862,24952],{"class":448},[147,29864,29865,29867,29870],{"class":149,"line":10015},[147,29866,29009],{"class":448},[147,29868,29869],{"class":504}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[147,29871,24952],{"class":448},[147,29873,29874,29876],{"class":149,"line":10038},[147,29875,29544],{"class":448},[147,29877,24952],{"class":448},[147,29879,29880],{"class":149,"line":10062},[147,29881,29015],{"class":504},[147,29883,29884],{"class":149,"line":10067},[147,29885,2674],{"emptyLinePlaceholder":324},[147,29887,29888,29890,29892,29894],{"class":149,"line":10072},[147,29889,26594],{"class":2237},[147,29891,29447],{"class":504},[147,29893,29006],{"class":504},[147,29895,24952],{"class":448},[147,29897,29898,29900,29902],{"class":149,"line":10077},[147,29899,29570],{"class":157},[147,29901,29573],{"class":504},[147,29903,24952],{"class":448},[147,29905,29906,29908,29911],{"class":149,"line":10086},[147,29907,29009],{"class":448},[147,29909,29910],{"class":504}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[147,29912,24952],{"class":448},[147,29914,29915,29917],{"class":149,"line":10091},[147,29916,29544],{"class":448},[147,29918,24952],{"class":448},[147,29920,29921],{"class":149,"line":10097},[147,29922,29015],{"class":504},[147,29924,29925],{"class":149,"line":10118},[147,29926,2674],{"emptyLinePlaceholder":324},[147,29928,29929,29932,29934,29936],{"class":149,"line":10124},[147,29930,29931],{"class":2237},"  docker",[147,29933,29447],{"class":504},[147,29935,29006],{"class":504},[147,29937,24952],{"class":448},[147,29939,29940,29942,29944],{"class":149,"line":10138},[147,29941,29570],{"class":157},[147,29943,29573],{"class":504},[147,29945,24952],{"class":448},[147,29947,29948,29950,29953],{"class":149,"line":10144},[147,29949,29009],{"class":448},[147,29951,29952],{"class":504}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[147,29954,24952],{"class":448},[147,29956,29957,29959],{"class":149,"line":10171},[147,29958,29544],{"class":448},[147,29960,24952],{"class":448},[147,29962,29963],{"class":149,"line":10180},[147,29964,29015],{"class":504},[19,29966,29967],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,29969,29970],{},[29,29971],{"alt":143,"src":29972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,29974,29975],{},[29,29976],{"alt":143,"src":29977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22271,29979,29981],{"id":29980},"_623清除构建缓存","6.2.3.清除构建缓存",[138,29983,29985],{"className":24095,"code":29984,"language":24097,"meta":143,"style":143},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[51,29986,29987,29992],{"__ignoreMap":143},[147,29988,29989],{"class":149,"line":150},[147,29990,29991],{"class":458},"# 清理BuildKit构建缓存\n",[147,29993,29994,29996,29999,30002],{"class":149,"line":312},[147,29995,26827],{"class":2237},[147,29997,29998],{"class":504}," builder",[147,30000,30001],{"class":504}," prune",[147,30003,30004],{"class":448}," -f\n",[19,30006,30007],{},[29,30008],{"alt":143,"src":30009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[367,30011,30013],{"id":30012},"_63补充","6.3.补充",[22271,30015,30017],{"id":30016},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,30019,30020],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,30022,30023],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,30025,30026],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[138,30028,30030],{"className":24095,"code":30029,"language":24097,"meta":143,"style":143},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[51,30031,30032,30039],{"__ignoreMap":143},[147,30033,30034,30036],{"class":149,"line":150},[147,30035,27644],{"class":2237},[147,30037,30038],{"class":504}," nginx\n",[147,30040,30041,30043,30046,30049,30051],{"class":149,"line":312},[147,30042,28829],{"class":2237},[147,30044,30045],{"class":504}," echo",[147,30047,30048],{"class":504}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[147,30050,26496],{"class":397},[147,30052,30053],{"class":504}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,30055,30056],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,30058,30059],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[138,30061,30063],{"className":24095,"code":30062,"language":24097,"meta":143,"style":143},"docker build -t nginx:tuling .\n",[51,30064,30065],{"__ignoreMap":143},[147,30066,30067,30069,30071,30073,30076],{"class":149,"line":150},[147,30068,26827],{"class":2237},[147,30070,29006],{"class":504},[147,30072,29009],{"class":448},[147,30074,30075],{"class":504}," nginx:tuling",[147,30077,29015],{"class":504},[19,30079,30080],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,30082,30083],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[138,30085,30087],{"className":24095,"code":30086,"language":24097,"meta":143,"style":143},"docker run -d -p 92:80 nginx:tuling\n",[51,30088,30089],{"__ignoreMap":143},[147,30090,30091,30093,30095,30098,30100,30103],{"class":149,"line":150},[147,30092,26827],{"class":2237},[147,30094,27504],{"class":504},[147,30096,30097],{"class":448}," -d",[147,30099,29490],{"class":448},[147,30101,30102],{"class":504}," 92:80",[147,30104,30105],{"class":504}," nginx:tuling\n",[19,30107,30108,30109],{},"4、访问 ",[637,30110,30113],{"href":30111,"rel":30112},"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",[24138],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,30115,30116],{},[29,30117],{"alt":143,"src":30118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,30120,30121],{},[29,30122],{"alt":143,"src":30123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22271,30125,30127],{"id":30126},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,30129,30130],{},"只需要知道大体流程即可",[19,30132,30133],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,30135,30136],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,30138,30139],{},"2、在Dockerfile中添加以下内容",[138,30141,30143],{"className":26365,"code":30142,"language":26367,"meta":143,"style":143},"# 基于哪个镜像\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",[51,30144,30145,30150,30155,30160,30165,30170,30175,30180],{"__ignoreMap":143},[147,30146,30147],{"class":149,"line":150},[147,30148,30149],{},"# 基于哪个镜像\n",[147,30151,30152],{"class":149,"line":312},[147,30153,30154],{},"From java:8\n",[147,30156,30157],{"class":149,"line":1454},[147,30158,30159],{},"# 复制文件到容器\n",[147,30161,30162],{"class":149,"line":1469},[147,30163,30164],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[147,30166,30167],{"class":149,"line":1475},[147,30168,30169],{},"# 声明需要暴露的端口\n",[147,30171,30172],{"class":149,"line":1489},[147,30173,30174],{},"EXPOSE 8877\n",[147,30176,30177],{"class":149,"line":1495},[147,30178,30179],{},"# 配置容器启动后执行的命令\n",[147,30181,30182],{"class":149,"line":1586},[147,30183,30184],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,30186,30187],{},"3、使用docker build命令构建镜像",[138,30189,30191],{"className":24095,"code":30190,"language":24097,"meta":143,"style":143},"docker build -t tulingmall-member:0.0.5 .\n",[51,30192,30193],{"__ignoreMap":143},[147,30194,30195,30197,30199,30201,30204],{"class":149,"line":150},[147,30196,26827],{"class":2237},[147,30198,29006],{"class":504},[147,30200,29009],{"class":448},[147,30202,30203],{"class":504}," tulingmall-member:0.0.5",[147,30205,29015],{"class":504},[19,30207,30208],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,30210,30211],{},[29,30212],{"alt":143,"src":30213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,30215,30216],{},"4、启动镜像，加-d可在后台启动",[138,30218,30220],{"className":24095,"code":30219,"language":24097,"meta":143,"style":143},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[51,30221,30222],{"__ignoreMap":143},[147,30223,30224,30226,30228,30230,30232,30235],{"class":149,"line":150},[147,30225,26827],{"class":2237},[147,30227,27504],{"class":504},[147,30229,30097],{"class":448},[147,30231,29490],{"class":448},[147,30233,30234],{"class":504}," 8877:8877",[147,30236,30237],{"class":504}," tulingmall-member:0.0.5\n",[19,30239,30240],{},"加上JVM参数：",[138,30242,30244],{"className":24095,"code":30243,"language":24097,"meta":143,"style":143},"# --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",[51,30245,30246,30251,30266,30276,30285,30292],{"__ignoreMap":143},[147,30247,30248],{"class":149,"line":150},[147,30249,30250],{"class":458},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[147,30252,30253,30255,30257,30260,30262,30264],{"class":149,"line":312},[147,30254,26827],{"class":2237},[147,30256,27504],{"class":504},[147,30258,30259],{"class":448},"  -d",[147,30261,29490],{"class":448},[147,30263,30234],{"class":504},[147,30265,24952],{"class":448},[147,30267,30268,30270,30273],{"class":149,"line":1454},[147,30269,28402],{"class":157},[147,30271,30272],{"class":504},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[147,30274,30275],{"class":448},"  \\\n",[147,30277,30278,30280,30283],{"class":149,"line":1469},[147,30279,28402],{"class":157},[147,30281,30282],{"class":504},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[147,30284,30275],{"class":448},[147,30286,30287,30290],{"class":149,"line":1475},[147,30288,30289],{"class":157},"--cap-add=SYS_PTRACE  ",[147,30291,26449],{"class":448},[147,30293,30294],{"class":149,"line":1489},[147,30295,30296],{"class":157},"tulingmall-member:0.0.5\n",[19,30298,30299],{},"5、访问会员服务接口",[19,30301,30302],{},[29,30303],{"alt":143,"src":30304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22271,30306,30308],{"id":30307},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,30310,30311],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,30313,30314,30315],{},"阿里云docker镜像仓库：",[637,30316,30317],{"href":30317,"rel":30318},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[24138],[19,30320,30321],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,30323,30324],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,30326,30327],{},[29,30328],{"alt":143,"src":30329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,30331,30332],{},"要把镜像推送到镜像仓库",[138,30334,30336],{"className":24095,"code":30335,"language":24097,"meta":143,"style":143},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[51,30337,30338],{"__ignoreMap":143},[147,30339,30340,30342,30344,30346],{"class":149,"line":150},[147,30341,26827],{"class":2237},[147,30343,29171],{"class":504},[147,30345,30203],{"class":504},[147,30347,30348],{"class":504}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,30350,30351],{},"最后将镜像推送到远程仓库",[138,30353,30355],{"className":24095,"code":30354,"language":24097,"meta":143,"style":143},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[51,30356,30357],{"__ignoreMap":143},[147,30358,30359,30361,30363],{"class":149,"line":150},[147,30360,26827],{"class":2237},[147,30362,29290],{"class":504},[147,30364,30348],{"class":504},[308,30366,30367],{},"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":143,"searchDepth":312,"depth":312,"links":30369},[30370,30371,30372],{"id":28757,"depth":1454,"text":28758},{"id":28986,"depth":1454,"text":28987},{"id":30012,"depth":1454,"text":30013},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28749,"description":143},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30379,"title":30380,"body":30381,"description":143,"extension":322,"meta":30524,"navigation":324,"path":30525,"seo":30526,"stem":30527,"__hash__":30528},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30382,"toc":30522},[30383,30386,30391,30396,30399,30404,30409,30412,30417,30422,30425,30430,30433,30436,30439,30442,30445,30448,30468,30490,30493,30496,30516,30519],[10,30384,30380],{"id":30385},"_7vscode远程开发",[350,30387,30388],{},[353,30389,30390],{},"插件1：微软Docker工具",[19,30392,30393],{},[29,30394],{"alt":143,"src":30395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,30397,30398],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,30400,30401],{},[29,30402],{"alt":143,"src":30403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[350,30405,30406],{"start":312},[353,30407,30408],{},"插件2：微软Docker远程开发工具",[19,30410,30411],{},"下面这是远程开发的插件。",[19,30413,30414],{},[29,30415],{"alt":143,"src":30416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,30418,30419],{},[29,30420],{"alt":143,"src":30421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,30423,30424],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,30426,30427],{},[29,30428],{"alt":143,"src":30429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,30431,30432],{},"安装完拓展之后，vscode进行链接：",[19,30434,30435],{},"1.按ctrl+shift+p",[19,30437,30438],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,30440,30441],{},"3.选择目前运行的容器",[19,30443,30444],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,30446,30447],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[138,30449,30451],{"className":24095,"code":30450,"language":24097,"meta":143,"style":143},"docker run -v 主机目录:容器目录 image-name\n",[51,30452,30453],{"__ignoreMap":143},[147,30454,30455,30457,30459,30462,30465],{"class":149,"line":150},[147,30456,26827],{"class":2237},[147,30458,27504],{"class":504},[147,30460,30461],{"class":448}," -v",[147,30463,30464],{"class":504}," 主机目录:容器目录",[147,30466,30467],{"class":504}," image-name\n",[138,30469,30471],{"className":24095,"code":30470,"language":24097,"meta":143,"style":143},"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",[51,30472,30473],{"__ignoreMap":143},[147,30474,30475,30477,30479,30482,30484,30487],{"class":149,"line":150},[147,30476,26827],{"class":2237},[147,30478,27504],{"class":504},[147,30480,30481],{"class":448}," -it",[147,30483,30461],{"class":448},[147,30485,30486],{"class":504}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[147,30488,30489],{"class":504}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,30491,30492],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,30494,30495],{},"查看挂载情况：",[138,30497,30499],{"className":24095,"code":30498,"language":24097,"meta":143,"style":143},"mount | grep -i project\n",[51,30500,30501],{"__ignoreMap":143},[147,30502,30503,30506,30508,30511,30513],{"class":149,"line":150},[147,30504,30505],{"class":2237},"mount",[147,30507,25383],{"class":397},[147,30509,30510],{"class":2237}," grep",[147,30512,26704],{"class":448},[147,30514,30515],{"class":504}," project\n",[19,30517,30518],{},"也可以通过ls来进行查看",[308,30520,30521],{},"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":143,"searchDepth":312,"depth":312,"links":30523},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30380,"description":143},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30530,"title":30531,"body":30532,"description":321,"extension":322,"meta":30536,"navigation":324,"path":30538,"seo":30539,"stem":30540,"__hash__":30541},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30533,"toc":30534},[],{"title":143,"searchDepth":312,"depth":312,"links":30535},[],{"category":30537},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30531,"description":321},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30543,"title":30544,"body":30545,"description":321,"extension":322,"meta":30549,"navigation":324,"path":30550,"seo":30551,"stem":30552,"__hash__":30553},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30546,"toc":30547},[],{"title":143,"searchDepth":312,"depth":312,"links":30548},[],{"category":30537},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30544,"description":321},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30555,"title":30556,"body":30557,"description":321,"extension":322,"meta":30850,"navigation":324,"path":30851,"seo":30852,"stem":30853,"__hash__":30854},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30558,"toc":30848},[30559,30562,30570,30585,30590,30641,30644,30650,30837,30842,30845],[10,30560,30556],{"id":30561},"_1验证深度学习环境",[19,30563,30564,30565],{},"关于环境的安装，看",[637,30566,30569],{"href":30567,"rel":30568},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[24138],"Pytorch-->深度学习",[19,30571,30572,30573,30576,30577,30580,30581,30584],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[51,30574,30575],{},"pytorch-cuda=12.4"," 是一个“ ",[234,30578,30579],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[234,30582,30583],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,30586,30587],{},[29,30588],{"alt":143,"src":30589},"\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",[138,30591,30593],{"className":24095,"code":30592,"language":24097,"meta":143,"style":143},"# 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",[51,30594,30595,30600],{"__ignoreMap":143},[147,30596,30597],{"class":149,"line":150},[147,30598,30599],{"class":458},"# CUDA 12.4\n",[147,30601,30602,30605,30607,30610,30613,30616,30619,30622,30624,30627,30630,30633,30636,30638],{"class":149,"line":312},[147,30603,30604],{"class":2237},"conda",[147,30606,24107],{"class":504},[147,30608,30609],{"class":504}," pytorch==",[147,30611,30612],{"class":448},"2.5.1",[147,30614,30615],{"class":504}," torchvision==",[147,30617,30618],{"class":448},"0.20.1",[147,30620,30621],{"class":504}," torchaudio==",[147,30623,30612],{"class":448},[147,30625,30626],{"class":504}," pytorch-cuda=",[147,30628,30629],{"class":448},"12.4",[147,30631,30632],{"class":448}," -c",[147,30634,30635],{"class":504}," pytorch",[147,30637,30632],{"class":448},[147,30639,30640],{"class":504}," nvidia\n",[19,30642,30643],{},"）：",[19,30645,30646],{},[637,30647,30648],{"href":30648,"rel":30649},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[24138],[138,30651,30655],{"className":30652,"code":30653,"language":30654,"meta":143,"style":143},"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",[51,30656,30657,30662,30670,30675,30685,30701,30706,30716,30753,30760,30772,30788,30793,30803,30815,30825],{"__ignoreMap":143},[147,30658,30659],{"class":149,"line":150},[147,30660,30661],{"class":458},"# 对深度学习环境进行测试\n",[147,30663,30664,30667],{"class":149,"line":312},[147,30665,30666],{"class":397},"import",[147,30668,30669],{"class":157}," torch\n",[147,30671,30672],{"class":149,"line":1454},[147,30673,30674],{"class":458},"# 查看cuda是否被激活\n",[147,30676,30677,30680,30682],{"class":149,"line":1469},[147,30678,30679],{"class":157},"flag",[147,30681,445],{"class":397},[147,30683,30684],{"class":157},"torch.cuda.is_available()\n",[147,30686,30687,30690,30692,30695,30698],{"class":149,"line":1475},[147,30688,30689],{"class":448},"print",[147,30691,401],{"class":157},[147,30693,30694],{"class":504},"\"cuda:\"",[147,30696,30697],{"class":157},", flag)   ",[147,30699,30700],{"class":458},"#返回true的话说明被激活\n",[147,30702,30703],{"class":149,"line":1489},[147,30704,30705],{"class":458},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[147,30707,30708,30711,30713],{"class":149,"line":1495},[147,30709,30710],{"class":157},"ngpu",[147,30712,445],{"class":397},[147,30714,30715],{"class":448},"1\n",[147,30717,30718,30721,30723,30726,30729,30731,30734,30737,30740,30742,30744,30746,30748,30751],{"class":149,"line":1586},[147,30719,30720],{"class":157},"device",[147,30722,445],{"class":397},[147,30724,30725],{"class":157},"torch.device(",[147,30727,30728],{"class":504},"\"cuda:0\"",[147,30730,1978],{"class":397},[147,30732,30733],{"class":157},"(torch.cuda.is_available() ",[147,30735,30736],{"class":397},"and",[147,30738,30739],{"class":157}," ngpu",[147,30741,1359],{"class":397},[147,30743,590],{"class":448},[147,30745,13988],{"class":157},[147,30747,1975],{"class":397},[147,30749,30750],{"class":504}," \"cpu\"",[147,30752,407],{"class":157},[147,30754,30755,30757],{"class":149,"line":1592},[147,30756,30689],{"class":448},[147,30758,30759],{"class":157},"(device)\n",[147,30761,30762,30764,30767,30769],{"class":149,"line":1604},[147,30763,30689],{"class":448},[147,30765,30766],{"class":157},"(torch.cuda.get_device_name(",[147,30768,590],{"class":448},[147,30770,30771],{"class":157},"))\n",[147,30773,30774,30776,30779,30781,30783,30785],{"class":149,"line":1886},[147,30775,30689],{"class":448},[147,30777,30778],{"class":157},"(torch.rand(",[147,30780,471],{"class":448},[147,30782,777],{"class":157},[147,30784,471],{"class":448},[147,30786,30787],{"class":157},").cuda())\n",[147,30789,30790],{"class":149,"line":1891},[147,30791,30792],{"class":458},"# 查看cuda和cudnn的版本\n",[147,30794,30795,30798,30800],{"class":149,"line":1897},[147,30796,30797],{"class":157},"cuda_version",[147,30799,445],{"class":397},[147,30801,30802],{"class":157},"torch.version.cuda\n",[147,30804,30805,30807,30809,30812],{"class":149,"line":1902},[147,30806,30689],{"class":448},[147,30808,401],{"class":157},[147,30810,30811],{"class":504},"\"cuda version\"",[147,30813,30814],{"class":157},",cuda_version)\n",[147,30816,30817,30820,30822],{"class":149,"line":1916},[147,30818,30819],{"class":157},"cudnn_version",[147,30821,445],{"class":397},[147,30823,30824],{"class":157},"torch.backends.cudnn.version()\n",[147,30826,30827,30829,30831,30834],{"class":149,"line":1921},[147,30828,30689],{"class":448},[147,30830,401],{"class":157},[147,30832,30833],{"class":504},"\"cudnn version\"",[147,30835,30836],{"class":157},",cudnn_version)\n",[19,30838,30839],{},[29,30840],{"alt":143,"src":30841},"\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,30843,30844],{},"cuda:0 指的是一块显卡",[308,30846,30847],{},"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":143,"searchDepth":312,"depth":312,"links":30849},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30556,"description":321},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30856,"title":30857,"body":30858,"description":321,"extension":322,"meta":50662,"navigation":324,"path":50663,"seo":50664,"stem":50665,"__hash__":50666},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30859,"toc":50656},[30860,30863,30867,30871,30874,30879,30884,30887,30892,30897,30902,30905,30909,30914,30918,30923,30926,30931,30934,30937,30940,30943,30948,30951,30956,30961,30966,30971,30974,30978,30981,30986,31590,31595,31598,31603,31606,31609,32073,32076,32079,32082,32085,34136,34139,34144,34149,34944,34947,34952,35730,35734,37393,37397,38111,38115,38119,38124,38129,38134,38137,38142,38147,38152,38157,38162,38166,38171,39453,39458,39461,39464,39467,39622,39625,39628,40844,40849,41544,41548,41552,41557,41562,41565,41570,41575,41580,41585,41590,41595,41600,41605,41610,41615,41620,41625,41630,41635,41640,41645,41650,41655,41660,41665,41670,41675,41680,41685,41690,41695,41700,41705,41710,41715,41719,41723,41726,43204,43208,44855,44859,45553,45557,45560,45563,46107,46110,46114,46117,47514,47518,47521,48099,49886,49890,49893,50653],[10,30861,30857],{"id":30862},"_2经典神经网络",[367,30864,30866],{"id":30865},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22271,30868,30870],{"id":30869},"_211原理介绍","2.1.1.原理介绍",[19,30872,30873],{},"LeNet-5",[350,30875,30876],{},[353,30877,30878],{},"原理",[19,30880,30881],{},[29,30882],{"alt":143,"src":30883},"\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,30885,30886],{},"B是batch批次；C是channel通道",[350,30888,30889],{"start":312},[353,30890,30891],{},"网络参数详细",[19,30893,30894],{},[29,30895],{"alt":143,"src":30896},"\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,30898,30899],{},[29,30900],{"alt":143,"src":30901},"\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,30903,30904],{},"AlexNet",[350,30906,30907],{},[353,30908,30878],{},[19,30910,30911],{},[29,30912],{"alt":143,"src":30913},"\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",[350,30915,30916],{"start":312},[353,30917,30891],{},[19,30919,30920],{},[29,30921],{"alt":143,"src":30922},"\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,30924,30925],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,30927,30928],{},[29,30929],{"alt":143,"src":30930},"\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,30932,30933],{},"数据处理中的图像增强操作:",[19,30935,30936],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,30938,30939],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,30941,30942],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,30944,30945],{},[29,30946],{"alt":143,"src":30947},"\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,30949,30950],{},"提升网络精确度的方法：LRN正则化",[19,30952,30953],{},[29,30954],{"alt":143,"src":30955},"\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,30957,30958],{},[29,30959],{"alt":143,"src":30960},"\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",[350,30962,30963],{"start":1454},[353,30964,30965],{},"AlexNet的总结",[19,30967,30968],{},[29,30969],{"alt":143,"src":30970},"\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,30972,30973],{},"比LeNet模型要深一丢丢",[22271,30975,30977],{"id":30976},"_212代码实现","2.1.2.代码实现",[19,30979,30980],{},"（1）LeNet",[350,30982,30983],{},[353,30984,30985],{},"模型搭建",[138,30987,30989],{"className":30652,"code":30988,"language":30654,"meta":143,"style":143},"# 导入库\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",[51,30990,30991,30996,31002,31007,31020,31025,31037,31041,31061,31066,31071,31082,31087,31106,31110,31115,31164,31176,31181,31210,31245,31272,31277,31289,31294,31314,31333,31352,31356,31361,31371,31388,31399,31414,31425,31436,31451,31466,31477,31484,31488,31502,31507,31530,31535,31540,31545,31549,31554,31559,31569],{"__ignoreMap":143},[147,30992,30993],{"class":149,"line":150},[147,30994,30995],{"class":458},"# 导入库\n",[147,30997,30998,31000],{"class":149,"line":312},[147,30999,30666],{"class":397},[147,31001,30669],{"class":157},[147,31003,31004],{"class":149,"line":1454},[147,31005,31006],{"class":458},"# 导入神经网络层\n",[147,31008,31009,31012,31015,31017],{"class":149,"line":1469},[147,31010,31011],{"class":397},"from",[147,31013,31014],{"class":157}," torch ",[147,31016,30666],{"class":397},[147,31018,31019],{"class":157}," nn\n",[147,31021,31022],{"class":149,"line":1475},[147,31023,31024],{"class":458},"# 导入展示神经网络参数的包\n",[147,31026,31027,31029,31032,31034],{"class":149,"line":1489},[147,31028,31011],{"class":397},[147,31030,31031],{"class":157}," torchsummary ",[147,31033,30666],{"class":397},[147,31035,31036],{"class":157}," summary\n",[147,31038,31039],{"class":149,"line":1495},[147,31040,2674],{"emptyLinePlaceholder":324},[147,31042,31043,31045,31048,31050,31053,31055,31058],{"class":149,"line":1586},[147,31044,14967],{"class":397},[147,31046,31047],{"class":2237}," LeNet",[147,31049,401],{"class":157},[147,31051,31052],{"class":2237},"nn",[147,31054,957],{"class":157},[147,31056,31057],{"class":2237},"Module",[147,31059,31060],{"class":157},"):\n",[147,31062,31063],{"class":149,"line":1592},[147,31064,31065],{"class":458},"    # 模型初始化:\n",[147,31067,31068],{"class":149,"line":1604},[147,31069,31070],{"class":458},"    # 定义一些网络层和激活函数\n",[147,31072,31073,31076,31079],{"class":149,"line":1886},[147,31074,31075],{"class":397},"    def",[147,31077,31078],{"class":448}," __init__",[147,31080,31081],{"class":157},"(self):\n",[147,31083,31084],{"class":149,"line":1891},[147,31085,31086],{"class":458},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[147,31088,31089,31092,31095,31098,31101,31104],{"class":149,"line":1897},[147,31090,31091],{"class":448},"        super",[147,31093,31094],{"class":157},"(LeNet,",[147,31096,31097],{"class":448},"self",[147,31099,31100],{"class":157},").",[147,31102,31103],{"class":448},"__init__",[147,31105,2250],{"class":157},[147,31107,31108],{"class":149,"line":1902},[147,31109,2674],{"emptyLinePlaceholder":324},[147,31111,31112],{"class":149,"line":1916},[147,31113,31114],{"class":458},"        # 定义网络层\n",[147,31116,31117,31120,31123,31125,31128,31131,31133,31135,31137,31140,31142,31144,31146,31149,31151,31153,31155,31158,31160,31162],{"class":149,"line":1921},[147,31118,31119],{"class":448},"        self",[147,31121,31122],{"class":157},".c1",[147,31124,445],{"class":397},[147,31126,31127],{"class":157},"nn.Conv2d(",[147,31129,31130],{"class":5490},"in_channels",[147,31132,445],{"class":397},[147,31134,616],{"class":448},[147,31136,777],{"class":157},[147,31138,31139],{"class":5490},"out_channels",[147,31141,445],{"class":397},[147,31143,743],{"class":448},[147,31145,777],{"class":157},[147,31147,31148],{"class":5490},"kernel_size",[147,31150,445],{"class":397},[147,31152,718],{"class":448},[147,31154,777],{"class":157},[147,31156,31157],{"class":5490},"padding",[147,31159,445],{"class":397},[147,31161,477],{"class":448},[147,31163,407],{"class":157},[147,31165,31166,31168,31171,31173],{"class":149,"line":1927},[147,31167,31119],{"class":448},[147,31169,31170],{"class":157},".sig",[147,31172,445],{"class":397},[147,31174,31175],{"class":157},"nn.Sigmoid()\n",[147,31177,31178],{"class":149,"line":1948},[147,31179,31180],{"class":458},"        # 定义池化\n",[147,31182,31183,31185,31188,31190,31193,31195,31197,31199,31201,31204,31206,31208],{"class":149,"line":1953},[147,31184,31119],{"class":448},[147,31186,31187],{"class":157},".s2",[147,31189,445],{"class":397},[147,31191,31192],{"class":157},"nn.AvgPool2d(",[147,31194,31148],{"class":5490},[147,31196,445],{"class":397},[147,31198,477],{"class":448},[147,31200,777],{"class":157},[147,31202,31203],{"class":5490},"stride",[147,31205,445],{"class":397},[147,31207,477],{"class":448},[147,31209,407],{"class":157},[147,31211,31212,31214,31217,31219,31221,31223,31225,31227,31229,31231,31233,31235,31237,31239,31241,31243],{"class":149,"line":1967},[147,31213,31119],{"class":448},[147,31215,31216],{"class":157},".c3",[147,31218,445],{"class":397},[147,31220,31127],{"class":157},[147,31222,31130],{"class":5490},[147,31224,445],{"class":397},[147,31226,743],{"class":448},[147,31228,777],{"class":157},[147,31230,31139],{"class":5490},[147,31232,445],{"class":397},[147,31234,1000],{"class":448},[147,31236,777],{"class":157},[147,31238,31148],{"class":5490},[147,31240,445],{"class":397},[147,31242,718],{"class":448},[147,31244,407],{"class":157},[147,31246,31247,31249,31252,31254,31256,31258,31260,31262,31264,31266,31268,31270],{"class":149,"line":1972},[147,31248,31119],{"class":448},[147,31250,31251],{"class":157},".s4",[147,31253,445],{"class":397},[147,31255,31192],{"class":157},[147,31257,31148],{"class":5490},[147,31259,445],{"class":397},[147,31261,477],{"class":448},[147,31263,777],{"class":157},[147,31265,31203],{"class":5490},[147,31267,445],{"class":397},[147,31269,477],{"class":448},[147,31271,407],{"class":157},[147,31273,31274],{"class":149,"line":2001},[147,31275,31276],{"class":458},"        # 定义平展层\n",[147,31278,31279,31281,31284,31286],{"class":149,"line":2006},[147,31280,31119],{"class":448},[147,31282,31283],{"class":157},".flatten",[147,31285,445],{"class":397},[147,31287,31288],{"class":157},"nn.Flatten()\n",[147,31290,31291],{"class":149,"line":2023},[147,31292,31293],{"class":458},"        # 定义全连接层\n",[147,31295,31296,31298,31301,31303,31306,31308,31310,31312],{"class":149,"line":2028},[147,31297,31119],{"class":448},[147,31299,31300],{"class":157},".f5",[147,31302,445],{"class":397},[147,31304,31305],{"class":157},"nn.Linear(",[147,31307,4261],{"class":448},[147,31309,777],{"class":157},[147,31311,1216],{"class":448},[147,31313,407],{"class":157},[147,31315,31316,31318,31321,31323,31325,31327,31329,31331],{"class":149,"line":2033},[147,31317,31119],{"class":448},[147,31319,31320],{"class":157},".f6",[147,31322,445],{"class":397},[147,31324,31305],{"class":157},[147,31326,1216],{"class":448},[147,31328,777],{"class":157},[147,31330,1110],{"class":448},[147,31332,407],{"class":157},[147,31334,31335,31337,31340,31342,31344,31346,31348,31350],{"class":149,"line":2038},[147,31336,31119],{"class":448},[147,31338,31339],{"class":157},".f7",[147,31341,445],{"class":397},[147,31343,31305],{"class":157},[147,31345,1110],{"class":448},[147,31347,777],{"class":157},[147,31349,845],{"class":448},[147,31351,407],{"class":157},[147,31353,31354],{"class":149,"line":2052},[147,31355,2674],{"emptyLinePlaceholder":324},[147,31357,31358],{"class":149,"line":2057},[147,31359,31360],{"class":458},"    # 写工具->写前向传播\n",[147,31362,31363,31365,31368],{"class":149,"line":2851},[147,31364,31075],{"class":397},[147,31366,31367],{"class":2237}," forward",[147,31369,31370],{"class":157},"(self,x):\n",[147,31372,31373,31376,31378,31380,31383,31385],{"class":149,"line":2865},[147,31374,31375],{"class":157},"        x",[147,31377,445],{"class":397},[147,31379,31097],{"class":448},[147,31381,31382],{"class":157},".sig(",[147,31384,31097],{"class":448},[147,31386,31387],{"class":157},".c1(x))\n",[147,31389,31390,31392,31394,31396],{"class":149,"line":2873},[147,31391,31375],{"class":157},[147,31393,445],{"class":397},[147,31395,31097],{"class":448},[147,31397,31398],{"class":157},".s2(x)\n",[147,31400,31401,31403,31405,31407,31409,31411],{"class":149,"line":2878},[147,31402,31375],{"class":157},[147,31404,445],{"class":397},[147,31406,31097],{"class":448},[147,31408,31382],{"class":157},[147,31410,31097],{"class":448},[147,31412,31413],{"class":157},".c3(x))\n",[147,31415,31416,31418,31420,31422],{"class":149,"line":2884},[147,31417,31375],{"class":157},[147,31419,445],{"class":397},[147,31421,31097],{"class":448},[147,31423,31424],{"class":157},".s4(x)\n",[147,31426,31427,31429,31431,31433],{"class":149,"line":2890},[147,31428,31375],{"class":157},[147,31430,445],{"class":397},[147,31432,31097],{"class":448},[147,31434,31435],{"class":157},".flatten(x)\n",[147,31437,31438,31440,31442,31444,31446,31448],{"class":149,"line":2895},[147,31439,31375],{"class":157},[147,31441,445],{"class":397},[147,31443,31097],{"class":448},[147,31445,31382],{"class":157},[147,31447,31097],{"class":448},[147,31449,31450],{"class":157},".f5(x))\n",[147,31452,31453,31455,31457,31459,31461,31463],{"class":149,"line":8222},[147,31454,31375],{"class":157},[147,31456,445],{"class":397},[147,31458,31097],{"class":448},[147,31460,31382],{"class":157},[147,31462,31097],{"class":448},[147,31464,31465],{"class":157},".f6(x))\n",[147,31467,31468,31470,31472,31474],{"class":149,"line":8246},[147,31469,31375],{"class":157},[147,31471,445],{"class":397},[147,31473,31097],{"class":448},[147,31475,31476],{"class":157},".f7(x)\n",[147,31478,31479,31481],{"class":149,"line":8251},[147,31480,15025],{"class":397},[147,31482,31483],{"class":157}," x\n",[147,31485,31486],{"class":149,"line":8257},[147,31487,2674],{"emptyLinePlaceholder":324},[147,31489,31490,31492,31495,31497,31500],{"class":149,"line":8284},[147,31491,1805],{"class":397},[147,31493,31494],{"class":448}," __name__",[147,31496,3223],{"class":397},[147,31498,31499],{"class":504},"\"__main__\"",[147,31501,4013],{"class":157},[147,31503,31504],{"class":149,"line":8289},[147,31505,31506],{"class":458},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[147,31508,31509,31512,31514,31516,31519,31521,31524,31526,31528],{"class":149,"line":8295},[147,31510,31511],{"class":157},"    device",[147,31513,445],{"class":397},[147,31515,30725],{"class":157},[147,31517,31518],{"class":504},"\"cuda\"",[147,31520,1978],{"class":397},[147,31522,31523],{"class":157}," torch.cuda.is_available() ",[147,31525,1975],{"class":397},[147,31527,30750],{"class":504},[147,31529,407],{"class":157},[147,31531,31532],{"class":149,"line":8307},[147,31533,31534],{"class":458},"    # 如果就是想指定用cpu用下方代码:\n",[147,31536,31537],{"class":149,"line":8319},[147,31538,31539],{"class":458},"    # device=\"cpu\"\n",[147,31541,31542],{"class":149,"line":8331},[147,31543,31544],{"class":458},"    # print(device)\n",[147,31546,31547],{"class":149,"line":9990},[147,31548,2674],{"emptyLinePlaceholder":324},[147,31550,31551],{"class":149,"line":10015},[147,31552,31553],{"class":458},"    # 实例化模型\n",[147,31555,31556],{"class":149,"line":10038},[147,31557,31558],{"class":458},"    # 将模型放到设备中去运行\n",[147,31560,31561,31564,31566],{"class":149,"line":10062},[147,31562,31563],{"class":157},"    model",[147,31565,445],{"class":397},[147,31567,31568],{"class":157},"LeNet().to(device)\n",[147,31570,31571,31574,31577,31579,31581,31583,31585,31587],{"class":149,"line":10067},[147,31572,31573],{"class":448},"    print",[147,31575,31576],{"class":157},"(summary(model,(",[147,31578,616],{"class":448},[147,31580,777],{"class":157},[147,31582,1300],{"class":448},[147,31584,777],{"class":157},[147,31586,1300],{"class":448},[147,31588,31589],{"class":157},")))\n",[19,31591,31592],{},[29,31593],{"alt":143,"src":31594},"\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,31596,31597],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[350,31599,31600],{"start":312},[353,31601,31602],{},"训练",[19,31604,31605],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,31607,31608],{},"在训练之前可以将数据展示看一下",[138,31610,31612],{"className":30652,"code":31611,"language":30654,"meta":143,"style":143},"# 建立画图的函数，用于展示数据\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",[51,31613,31614,31619,31624,31636,31648,31661,31666,31678,31683,31695,31700,31712,31716,31720,31741,31753,31758,31779,31790,31794,31799,31817,31828,31833,31844,31849,31860,31864,31869,31884,31897,31902,31907,31920,31933,31946,31951,31955,31960,31980,31997,32017,32030,32043,32053,32068],{"__ignoreMap":143},[147,31615,31616],{"class":149,"line":150},[147,31617,31618],{"class":458},"# 建立画图的函数，用于展示数据\n",[147,31620,31621],{"class":149,"line":312},[147,31622,31623],{"class":458},"# torchvision中包含很多内置的数据集\n",[147,31625,31626,31628,31631,31633],{"class":149,"line":1454},[147,31627,31011],{"class":397},[147,31629,31630],{"class":157}," sklearn.externals.array_api_compat.torch ",[147,31632,30666],{"class":397},[147,31634,31635],{"class":157}," squeeze\n",[147,31637,31638,31640,31643,31645],{"class":149,"line":1469},[147,31639,31011],{"class":397},[147,31641,31642],{"class":157}," torchvision.datasets ",[147,31644,30666],{"class":397},[147,31646,31647],{"class":157}," FashionMNIST\n",[147,31649,31650,31652,31655,31658],{"class":149,"line":1475},[147,31651,30666],{"class":397},[147,31653,31654],{"class":157}," numpy ",[147,31656,31657],{"class":397},"as",[147,31659,31660],{"class":157}," np\n",[147,31662,31663],{"class":149,"line":1489},[147,31664,31665],{"class":458},"# 引入处理数据集的包\n",[147,31667,31668,31670,31673,31675],{"class":149,"line":1495},[147,31669,31011],{"class":397},[147,31671,31672],{"class":157}," torchvision ",[147,31674,30666],{"class":397},[147,31676,31677],{"class":157}," transforms\n",[147,31679,31680],{"class":149,"line":1586},[147,31681,31682],{"class":458},"# 从torch库中引入数据处理的包\n",[147,31684,31685,31687,31690,31692],{"class":149,"line":1592},[147,31686,30666],{"class":397},[147,31688,31689],{"class":157}," torch.utils.data ",[147,31691,31657],{"class":397},[147,31693,31694],{"class":157}," Data\n",[147,31696,31697],{"class":149,"line":1604},[147,31698,31699],{"class":458},"# 导入画图的库\n",[147,31701,31702,31704,31707,31709],{"class":149,"line":1886},[147,31703,30666],{"class":397},[147,31705,31706],{"class":157}," matplotlib.pyplot ",[147,31708,31657],{"class":397},[147,31710,31711],{"class":157}," plt\n",[147,31713,31714],{"class":149,"line":1891},[147,31715,2674],{"emptyLinePlaceholder":324},[147,31717,31718],{"class":149,"line":1897},[147,31719,2674],{"emptyLinePlaceholder":324},[147,31721,31722,31725,31727,31730,31733,31735,31738],{"class":149,"line":1902},[147,31723,31724],{"class":157},"train_data",[147,31726,445],{"class":397},[147,31728,31729],{"class":157},"FashionMNIST(",[147,31731,31732],{"class":5490},"root",[147,31734,445],{"class":397},[147,31736,31737],{"class":504},"'.\u002Fdata'",[147,31739,31740],{"class":157},",\n",[147,31742,31743,31746,31748,31751],{"class":149,"line":1916},[147,31744,31745],{"class":5490},"                        train",[147,31747,445],{"class":397},[147,31749,31750],{"class":448},"True",[147,31752,31740],{"class":157},[147,31754,31755],{"class":149,"line":1921},[147,31756,31757],{"class":458},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[147,31759,31760,31763,31765,31768,31771,31773,31776],{"class":149,"line":1927},[147,31761,31762],{"class":5490},"                        transform",[147,31764,445],{"class":397},[147,31766,31767],{"class":157},"transforms.Compose([transforms.Resize(",[147,31769,31770],{"class":5490},"size",[147,31772,445],{"class":397},[147,31774,31775],{"class":448},"224",[147,31777,31778],{"class":157},"),transforms.ToTensor()]),\n",[147,31780,31781,31784,31786,31788],{"class":149,"line":1948},[147,31782,31783],{"class":5490},"                        download",[147,31785,445],{"class":397},[147,31787,31750],{"class":448},[147,31789,407],{"class":157},[147,31791,31792],{"class":149,"line":1953},[147,31793,2674],{"emptyLinePlaceholder":324},[147,31795,31796],{"class":149,"line":1967},[147,31797,31798],{"class":458},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[147,31800,31801,31804,31806,31809,31812,31814],{"class":149,"line":1972},[147,31802,31803],{"class":157},"train_loader",[147,31805,445],{"class":397},[147,31807,31808],{"class":157},"Data.DataLoader(",[147,31810,31811],{"class":5490},"dataset",[147,31813,445],{"class":397},[147,31815,31816],{"class":157},"train_data,\n",[147,31818,31819,31822,31824,31826],{"class":149,"line":2001},[147,31820,31821],{"class":5490},"                             batch_size",[147,31823,445],{"class":397},[147,31825,602],{"class":448},[147,31827,31740],{"class":157},[147,31829,31830],{"class":149,"line":2006},[147,31831,31832],{"class":458},"                             # 数据是否打乱\n",[147,31834,31835,31838,31840,31842],{"class":149,"line":2023},[147,31836,31837],{"class":5490},"                             shuffle",[147,31839,445],{"class":397},[147,31841,31750],{"class":448},[147,31843,31740],{"class":157},[147,31845,31846],{"class":149,"line":2028},[147,31847,31848],{"class":458},"                             # 规定加载数据的进程\n",[147,31850,31851,31854,31856,31858],{"class":149,"line":2033},[147,31852,31853],{"class":5490},"                             num_workers",[147,31855,445],{"class":397},[147,31857,590],{"class":448},[147,31859,407],{"class":157},[147,31861,31862],{"class":149,"line":2038},[147,31863,2674],{"emptyLinePlaceholder":324},[147,31865,31866],{"class":149,"line":2052},[147,31867,31868],{"class":458},"# 获得一个batch的数据\n",[147,31870,31871,31873,31876,31878,31881],{"class":149,"line":2057},[147,31872,3299],{"class":397},[147,31874,31875],{"class":157}," step,(b_x,b_y) ",[147,31877,26317],{"class":397},[147,31879,31880],{"class":448}," enumerate",[147,31882,31883],{"class":157},"(train_loader):\n",[147,31885,31886,31888,31891,31893,31895],{"class":149,"line":2851},[147,31887,3375],{"class":397},[147,31889,31890],{"class":157}," step ",[147,31892,1359],{"class":397},[147,31894,4367],{"class":448},[147,31896,4013],{"class":157},[147,31898,31899],{"class":149,"line":2865},[147,31900,31901],{"class":397},"        break\n",[147,31903,31904],{"class":149,"line":2873},[147,31905,31906],{"class":458},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[147,31908,31909,31912,31914,31917],{"class":149,"line":2878},[147,31910,31911],{"class":157},"batch_x",[147,31913,445],{"class":397},[147,31915,31916],{"class":157},"b_x.squeeze().numpy()  ",[147,31918,31919],{"class":458},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[147,31921,31922,31925,31927,31930],{"class":149,"line":2884},[147,31923,31924],{"class":157},"batch_y",[147,31926,445],{"class":397},[147,31928,31929],{"class":157},"b_y.numpy()   ",[147,31931,31932],{"class":458},"#将张量转换成功numpy数组\n",[147,31934,31935,31938,31940,31943],{"class":149,"line":2890},[147,31936,31937],{"class":157},"class_label",[147,31939,445],{"class":397},[147,31941,31942],{"class":157},"train_data.classes  ",[147,31944,31945],{"class":458},"#训练集标签\n",[147,31947,31948],{"class":149,"line":2895},[147,31949,31950],{"class":458},"# print(class_label)\n",[147,31952,31953],{"class":149,"line":8222},[147,31954,2674],{"emptyLinePlaceholder":324},[147,31956,31957],{"class":149,"line":8246},[147,31958,31959],{"class":458},"# 可视化一个batch的图像\n",[147,31961,31962,31965,31968,31970,31972,31974,31976,31978],{"class":149,"line":8251},[147,31963,31964],{"class":157},"plt.figure(",[147,31966,31967],{"class":5490},"figsize",[147,31969,445],{"class":397},[147,31971,401],{"class":157},[147,31973,897],{"class":448},[147,31975,777],{"class":157},[147,31977,718],{"class":448},[147,31979,30771],{"class":157},[147,31981,31982,31984,31987,31989,31992,31994],{"class":149,"line":8257},[147,31983,3299],{"class":397},[147,31985,31986],{"class":157}," ii ",[147,31988,26317],{"class":397},[147,31990,31991],{"class":157}," np.arange(",[147,31993,7632],{"class":448},[147,31995,31996],{"class":157},"(batch_y)):\n",[147,31998,31999,32002,32004,32006,32008,32011,32013,32015],{"class":149,"line":8284},[147,32000,32001],{"class":157},"    plt.subplot(",[147,32003,692],{"class":448},[147,32005,777],{"class":157},[147,32007,1000],{"class":448},[147,32009,32010],{"class":157},",ii ",[147,32012,880],{"class":397},[147,32014,25392],{"class":448},[147,32016,407],{"class":157},[147,32018,32019,32022,32025,32027],{"class":149,"line":8289},[147,32020,32021],{"class":157},"    plt.imshow(batch_x[ii,:,:],",[147,32023,32024],{"class":5490},"cmap",[147,32026,445],{"class":397},[147,32028,32029],{"class":157},"plt.cm.gray)\n",[147,32031,32032,32035,32037,32039,32041],{"class":149,"line":8295},[147,32033,32034],{"class":157},"    plt.title(class_label[batch_y[ii]],",[147,32036,31770],{"class":5490},[147,32038,445],{"class":397},[147,32040,845],{"class":448},[147,32042,407],{"class":157},[147,32044,32045,32048,32051],{"class":149,"line":8307},[147,32046,32047],{"class":157},"    plt.axis(",[147,32049,32050],{"class":504},"\"off\"",[147,32052,407],{"class":157},[147,32054,32055,32058,32061,32063,32066],{"class":149,"line":8319},[147,32056,32057],{"class":157},"    plt.subplots_adjust(",[147,32059,32060],{"class":5490},"wspace",[147,32062,445],{"class":397},[147,32064,32065],{"class":448},"0.05",[147,32067,407],{"class":157},[147,32069,32070],{"class":149,"line":8331},[147,32071,32072],{"class":157},"plt.show()\n",[19,32074,32075],{},"用matplotlib进行展示的过程可以后续再补",[19,32077,32078],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,32080,32081],{},"训练次数就是按照批次过整个训练集数据的次数",[19,32083,32084],{},"模型训练：",[138,32086,32088],{"className":30652,"code":32087,"language":30654,"meta":143,"style":143},"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",[51,32089,32090,32097,32104,32108,32120,32126,32137,32147,32157,32167,32177,32182,32194,32204,32208,32212,32217,32228,32241,32252,32269,32280,32319,32335,32347,32358,32363,32374,32390,32401,32412,32423,32430,32434,32439,32444,32448,32453,32463,32484,32488,32492,32497,32502,32507,32527,32531,32536,32546,32550,32555,32564,32569,32574,32579,32589,32593,32597,32602,32607,32617,32622,32632,32637,32646,32651,32660,32665,32674,32678,32683,32693,32697,32701,32706,32721,32749,32764,32768,32773,32778,32787,32792,32801,32806,32815,32820,32829,32834,32843,32848,32857,32862,32875,32880,32890,32895,32905,32911,32917,32923,32929,32940,32946,32966,32972,32983,32989,32995,33001,33007,33013,33019,33025,33045,33051,33067,33073,33087,33093,33108,33114,33123,33129,33138,33144,33150,33159,33165,33176,33182,33201,33207,33218,33224,33244,33260,33266,33280,33286,33292,33303,33309,33315,33325,33331,33342,33348,33358,33363,33369,33418,33465,33470,33476,33495,33501,33521,33527,33533,33543,33548,33554,33570,33615,33621,33627,33633,33644,33650,33656,33662,33680,33694,33703,33712,33721,33730,33736,33742,33750,33755,33761,33772,33778,33798,33804,33810,33816,33833,33839,33845,33851,33857,33863,33890,33914,33920,33926,33932,33943,33954,33960,33977,34000,34023,34029,34034,34043,34053,34059,34064,34070,34083,34089,34100,34111,34130],{"__ignoreMap":143},[147,32091,32092,32094],{"class":149,"line":150},[147,32093,30666],{"class":397},[147,32095,32096],{"class":157}," copy\n",[147,32098,32099,32101],{"class":149,"line":312},[147,32100,30666],{"class":397},[147,32102,32103],{"class":157}," time\n",[147,32105,32106],{"class":149,"line":1454},[147,32107,2674],{"emptyLinePlaceholder":324},[147,32109,32110,32112,32115,32117],{"class":149,"line":1469},[147,32111,30666],{"class":397},[147,32113,32114],{"class":157}," pandas ",[147,32116,31657],{"class":397},[147,32118,32119],{"class":157}," pd\n",[147,32121,32122,32124],{"class":149,"line":1475},[147,32123,30666],{"class":397},[147,32125,30669],{"class":157},[147,32127,32128,32130,32132,32134],{"class":149,"line":1489},[147,32129,31011],{"class":397},[147,32131,31689],{"class":157},[147,32133,30666],{"class":397},[147,32135,32136],{"class":157}," Dataset\n",[147,32138,32139,32141,32143,32145],{"class":149,"line":1495},[147,32140,31011],{"class":397},[147,32142,31642],{"class":157},[147,32144,30666],{"class":397},[147,32146,31647],{"class":157},[147,32148,32149,32151,32153,32155],{"class":149,"line":1586},[147,32150,31011],{"class":397},[147,32152,31672],{"class":157},[147,32154,30666],{"class":397},[147,32156,31677],{"class":157},[147,32158,32159,32161,32163,32165],{"class":149,"line":1592},[147,32160,30666],{"class":397},[147,32162,31689],{"class":157},[147,32164,31657],{"class":397},[147,32166,31694],{"class":157},[147,32168,32169,32171,32173,32175],{"class":149,"line":1604},[147,32170,30666],{"class":397},[147,32172,31706],{"class":157},[147,32174,31657],{"class":397},[147,32176,31711],{"class":157},[147,32178,32179],{"class":149,"line":1886},[147,32180,32181],{"class":458},"# 导入模型\n",[147,32183,32184,32186,32189,32191],{"class":149,"line":1891},[147,32185,31011],{"class":397},[147,32187,32188],{"class":157}," model ",[147,32190,30666],{"class":397},[147,32192,32193],{"class":157}," LeNet\n",[147,32195,32196,32198,32200,32202],{"class":149,"line":1897},[147,32197,31011],{"class":397},[147,32199,31014],{"class":157},[147,32201,30666],{"class":397},[147,32203,31019],{"class":157},[147,32205,32206],{"class":149,"line":1902},[147,32207,2674],{"emptyLinePlaceholder":324},[147,32209,32210],{"class":149,"line":1916},[147,32211,2674],{"emptyLinePlaceholder":324},[147,32213,32214],{"class":149,"line":1921},[147,32215,32216],{"class":458},"# 处理训练集与验证集函数--->划分数据集\n",[147,32218,32219,32222,32225],{"class":149,"line":1927},[147,32220,32221],{"class":397},"def",[147,32223,32224],{"class":2237}," train_val_data_process",[147,32226,32227],{"class":157},"():\n",[147,32229,32230,32233,32235,32237,32239],{"class":149,"line":1948},[147,32231,32232],{"class":157},"    train_data",[147,32234,445],{"class":397},[147,32236,31729],{"class":157},[147,32238,31737],{"class":504},[147,32240,31740],{"class":157},[147,32242,32243,32246,32248,32250],{"class":149,"line":1953},[147,32244,32245],{"class":5490},"                            train",[147,32247,445],{"class":397},[147,32249,31750],{"class":448},[147,32251,31740],{"class":157},[147,32253,32254,32257,32259,32261,32263,32265,32267],{"class":149,"line":1967},[147,32255,32256],{"class":5490},"                            transform",[147,32258,445],{"class":397},[147,32260,31767],{"class":157},[147,32262,31770],{"class":5490},[147,32264,445],{"class":397},[147,32266,1300],{"class":448},[147,32268,31778],{"class":157},[147,32270,32271,32274,32276,32278],{"class":149,"line":1972},[147,32272,32273],{"class":5490},"                            download",[147,32275,445],{"class":397},[147,32277,31750],{"class":448},[147,32279,407],{"class":157},[147,32281,32282,32285,32287,32290,32293,32295,32298,32300,32302,32305,32307,32309,32312,32314,32316],{"class":149,"line":2001},[147,32283,32284],{"class":157},"    train_data,val_data",[147,32286,445],{"class":397},[147,32288,32289],{"class":157},"Data.random_split(train_data,[",[147,32291,32292],{"class":448},"round",[147,32294,401],{"class":157},[147,32296,32297],{"class":448},"0.8",[147,32299,854],{"class":397},[147,32301,7632],{"class":448},[147,32303,32304],{"class":157},"(train_data)),",[147,32306,32292],{"class":448},[147,32308,401],{"class":157},[147,32310,32311],{"class":448},"0.2",[147,32313,854],{"class":397},[147,32315,7632],{"class":448},[147,32317,32318],{"class":157},"(train_data))])\n",[147,32320,32321,32324,32326,32329,32331,32333],{"class":149,"line":2006},[147,32322,32323],{"class":157},"    train_dataloader ",[147,32325,445],{"class":397},[147,32327,32328],{"class":157}," Data.DataLoader(",[147,32330,31811],{"class":5490},[147,32332,445],{"class":397},[147,32334,31816],{"class":157},[147,32336,32337,32340,32342,32345],{"class":149,"line":2023},[147,32338,32339],{"class":5490},"                                       batch_size",[147,32341,445],{"class":397},[147,32343,32344],{"class":448},"128",[147,32346,31740],{"class":157},[147,32348,32349,32352,32354,32356],{"class":149,"line":2028},[147,32350,32351],{"class":5490},"                                       shuffle",[147,32353,445],{"class":397},[147,32355,31750],{"class":448},[147,32357,31740],{"class":157},[147,32359,32360],{"class":149,"line":2033},[147,32361,32362],{"class":458},"                                       # 规定8个进程\n",[147,32364,32365,32368,32370,32372],{"class":149,"line":2038},[147,32366,32367],{"class":5490},"                                       num_workers",[147,32369,445],{"class":397},[147,32371,794],{"class":448},[147,32373,407],{"class":157},[147,32375,32376,32379,32381,32383,32385,32387],{"class":149,"line":2052},[147,32377,32378],{"class":157},"    val_dataloader",[147,32380,445],{"class":397},[147,32382,31808],{"class":157},[147,32384,31811],{"class":5490},[147,32386,445],{"class":397},[147,32388,32389],{"class":157},"val_data,\n",[147,32391,32392,32395,32397,32399],{"class":149,"line":2057},[147,32393,32394],{"class":5490},"                                   batch_size",[147,32396,445],{"class":397},[147,32398,32344],{"class":448},[147,32400,31740],{"class":157},[147,32402,32403,32406,32408,32410],{"class":149,"line":2851},[147,32404,32405],{"class":5490},"                                   shuffle",[147,32407,445],{"class":397},[147,32409,31750],{"class":448},[147,32411,31740],{"class":157},[147,32413,32414,32417,32419,32421],{"class":149,"line":2865},[147,32415,32416],{"class":5490},"                                   num_workers",[147,32418,445],{"class":397},[147,32420,794],{"class":448},[147,32422,407],{"class":157},[147,32424,32425,32427],{"class":149,"line":2873},[147,32426,4364],{"class":397},[147,32428,32429],{"class":157}," train_dataloader,val_dataloader\n",[147,32431,32432],{"class":149,"line":2878},[147,32433,2674],{"emptyLinePlaceholder":324},[147,32435,32436],{"class":149,"line":2884},[147,32437,32438],{"class":458},"# 验证是否出错\n",[147,32440,32441],{"class":149,"line":2890},[147,32442,32443],{"class":458},"# train_val_data_process()\n",[147,32445,32446],{"class":149,"line":2895},[147,32447,2674],{"emptyLinePlaceholder":324},[147,32449,32450],{"class":149,"line":8222},[147,32451,32452],{"class":458},"# 定义模型训练函数\n",[147,32454,32455,32457,32460],{"class":149,"line":8246},[147,32456,32221],{"class":397},[147,32458,32459],{"class":2237}," train_model_process",[147,32461,32462],{"class":157},"(model,train_dataloader,val_dataloader,num_epochs):\n",[147,32464,32465,32467,32469,32471,32473,32475,32477,32479,32482],{"class":149,"line":8251},[147,32466,31511],{"class":157},[147,32468,445],{"class":397},[147,32470,30725],{"class":157},[147,32472,31518],{"class":504},[147,32474,1978],{"class":397},[147,32476,31523],{"class":157},[147,32478,1975],{"class":397},[147,32480,32481],{"class":504}," 'cpu'",[147,32483,407],{"class":157},[147,32485,32486],{"class":149,"line":8257},[147,32487,2674],{"emptyLinePlaceholder":324},[147,32489,32490],{"class":149,"line":8284},[147,32491,2674],{"emptyLinePlaceholder":324},[147,32493,32494],{"class":149,"line":8289},[147,32495,32496],{"class":458},"    # 定义优化器\n",[147,32498,32499],{"class":149,"line":8295},[147,32500,32501],{"class":458},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[147,32503,32504],{"class":149,"line":8307},[147,32505,32506],{"class":458},"    # lr为学习率\n",[147,32508,32509,32512,32514,32517,32520,32522,32525],{"class":149,"line":8319},[147,32510,32511],{"class":157},"    optimizer",[147,32513,445],{"class":397},[147,32515,32516],{"class":157},"torch.optim.Adam(model.parameters(),",[147,32518,32519],{"class":5490},"lr",[147,32521,445],{"class":397},[147,32523,32524],{"class":448},"0.001",[147,32526,407],{"class":157},[147,32528,32529],{"class":149,"line":8331},[147,32530,2674],{"emptyLinePlaceholder":324},[147,32532,32533],{"class":149,"line":9990},[147,32534,32535],{"class":458},"    # 定义损失函数使用交叉熵损失函数\n",[147,32537,32538,32541,32543],{"class":149,"line":10015},[147,32539,32540],{"class":157},"    criterion",[147,32542,445],{"class":397},[147,32544,32545],{"class":157},"nn.CrossEntropyLoss()\n",[147,32547,32548],{"class":149,"line":10038},[147,32549,2674],{"emptyLinePlaceholder":324},[147,32551,32552],{"class":149,"line":10062},[147,32553,32554],{"class":458},"    # 将模型放到GPU中进行训练\n",[147,32556,32557,32559,32561],{"class":149,"line":10067},[147,32558,31563],{"class":157},[147,32560,445],{"class":397},[147,32562,32563],{"class":157},"model.to(device)\n",[147,32565,32566],{"class":149,"line":10072},[147,32567,32568],{"class":458},"    # 复制当前模型的参数\n",[147,32570,32571],{"class":149,"line":10077},[147,32572,32573],{"class":458},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[147,32575,32576],{"class":149,"line":10086},[147,32577,32578],{"class":458},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[147,32580,32581,32584,32586],{"class":149,"line":10091},[147,32582,32583],{"class":157},"    best_model_wts",[147,32585,445],{"class":397},[147,32587,32588],{"class":157},"copy.deepcopy(model.state_dict())\n",[147,32590,32591],{"class":149,"line":10097},[147,32592,2674],{"emptyLinePlaceholder":324},[147,32594,32595],{"class":149,"line":10118},[147,32596,2674],{"emptyLinePlaceholder":324},[147,32598,32599],{"class":149,"line":10124},[147,32600,32601],{"class":458},"    # 初始化参数\n",[147,32603,32604],{"class":149,"line":10138},[147,32605,32606],{"class":458},"    # 最高准确度\n",[147,32608,32609,32612,32614],{"class":149,"line":10144},[147,32610,32611],{"class":157},"    best_acc",[147,32613,445],{"class":397},[147,32615,32616],{"class":448},"0.0\n",[147,32618,32619],{"class":149,"line":10171},[147,32620,32621],{"class":458},"    # 训练集损失列表\n",[147,32623,32624,32627,32629],{"class":149,"line":10180},[147,32625,32626],{"class":157},"    train_loss_all",[147,32628,445],{"class":397},[147,32630,32631],{"class":157},"[]\n",[147,32633,32634],{"class":149,"line":10186},[147,32635,32636],{"class":458},"    # 验证集函数列表\n",[147,32638,32639,32642,32644],{"class":149,"line":10194},[147,32640,32641],{"class":157},"    val_loss_all",[147,32643,445],{"class":397},[147,32645,32631],{"class":157},[147,32647,32648],{"class":149,"line":10199},[147,32649,32650],{"class":458},"    # 训练集准确度列表\n",[147,32652,32653,32656,32658],{"class":149,"line":16877},[147,32654,32655],{"class":157},"    train_acc_all",[147,32657,445],{"class":397},[147,32659,32631],{"class":157},[147,32661,32662],{"class":149,"line":16883},[147,32663,32664],{"class":458},"    # 验证集准确度列表\n",[147,32666,32667,32670,32672],{"class":149,"line":16906},[147,32668,32669],{"class":157},"    val_acc_all",[147,32671,445],{"class":397},[147,32673,32631],{"class":157},[147,32675,32676],{"class":149,"line":16912},[147,32677,2674],{"emptyLinePlaceholder":324},[147,32679,32680],{"class":149,"line":16935},[147,32681,32682],{"class":458},"    # 保存当前时间--->方便看每轮训练的时间\n",[147,32684,32685,32688,32690],{"class":149,"line":16949},[147,32686,32687],{"class":157},"    since",[147,32689,445],{"class":397},[147,32691,32692],{"class":157},"time.time()\n",[147,32694,32695],{"class":149,"line":16969},[147,32696,2674],{"emptyLinePlaceholder":324},[147,32698,32699],{"class":149,"line":16975},[147,32700,2674],{"emptyLinePlaceholder":324},[147,32702,32703],{"class":149,"line":16986},[147,32704,32705],{"class":458},"    # 准备工作完成--->开始训练模型\n",[147,32707,32708,32710,32713,32715,32718],{"class":149,"line":17009},[147,32709,3475],{"class":397},[147,32711,32712],{"class":157}," epoch ",[147,32714,26317],{"class":397},[147,32716,32717],{"class":448}," range",[147,32719,32720],{"class":157},"(num_epochs):\n",[147,32722,32723,32726,32728,32731,32734,32736,32738,32740,32743,32745,32747],{"class":149,"line":17031},[147,32724,32725],{"class":448},"        print",[147,32727,401],{"class":157},[147,32729,32730],{"class":504},"\"Epoch ",[147,32732,32733],{"class":448},"{}",[147,32735,983],{"class":504},[147,32737,32733],{"class":448},[147,32739,650],{"class":504},[147,32741,32742],{"class":157},".format(epoch,num_epochs",[147,32744,931],{"class":397},[147,32746,616],{"class":448},[147,32748,30771],{"class":157},[147,32750,32751,32753,32755,32758,32760,32762],{"class":149,"line":17036},[147,32752,32725],{"class":448},[147,32754,401],{"class":157},[147,32756,32757],{"class":504},"\"-\"",[147,32759,854],{"class":397},[147,32761,845],{"class":448},[147,32763,407],{"class":157},[147,32765,32766],{"class":149,"line":17042},[147,32767,2674],{"emptyLinePlaceholder":324},[147,32769,32770],{"class":149,"line":17056},[147,32771,32772],{"class":458},"        # 初始化参数\n",[147,32774,32775],{"class":149,"line":17069},[147,32776,32777],{"class":458},"        # 训练集损失函数\n",[147,32779,32780,32783,32785],{"class":149,"line":17074},[147,32781,32782],{"class":157},"        train_loss",[147,32784,445],{"class":397},[147,32786,32616],{"class":448},[147,32788,32789],{"class":149,"line":17088},[147,32790,32791],{"class":458},"        # 训练集准确度\n",[147,32793,32794,32797,32799],{"class":149,"line":17093},[147,32795,32796],{"class":157},"        train_corrects",[147,32798,445],{"class":397},[147,32800,3359],{"class":448},[147,32802,32803],{"class":149,"line":17099},[147,32804,32805],{"class":458},"        # 验证集损失函数\n",[147,32807,32808,32811,32813],{"class":149,"line":17104},[147,32809,32810],{"class":157},"        val_loss",[147,32812,445],{"class":397},[147,32814,32616],{"class":448},[147,32816,32817],{"class":149,"line":17118},[147,32818,32819],{"class":458},"        # 验证集准确度\n",[147,32821,32822,32825,32827],{"class":149,"line":17123},[147,32823,32824],{"class":157},"        val_corrects",[147,32826,445],{"class":397},[147,32828,3359],{"class":448},[147,32830,32831],{"class":149,"line":17128},[147,32832,32833],{"class":458},"        # 训练集样本数量\n",[147,32835,32836,32839,32841],{"class":149,"line":17142},[147,32837,32838],{"class":157},"        train_num",[147,32840,445],{"class":397},[147,32842,3359],{"class":448},[147,32844,32845],{"class":149,"line":17154},[147,32846,32847],{"class":458},"        # 验证集样本数量\n",[147,32849,32850,32853,32855],{"class":149,"line":17159},[147,32851,32852],{"class":157},"        val_num",[147,32854,445],{"class":397},[147,32856,3359],{"class":448},[147,32858,32859],{"class":149,"line":17172},[147,32860,32861],{"class":458},"        # 将数据放到设备,并开始训练\n",[147,32863,32864,32866,32868,32870,32872],{"class":149,"line":17177},[147,32865,3677],{"class":397},[147,32867,31875],{"class":157},[147,32869,26317],{"class":397},[147,32871,31880],{"class":448},[147,32873,32874],{"class":157},"(train_dataloader):\n",[147,32876,32877],{"class":149,"line":17182},[147,32878,32879],{"class":458},"            # 将特征放入到训练设备\n",[147,32881,32882,32885,32887],{"class":149,"line":17187},[147,32883,32884],{"class":157},"            b_x",[147,32886,445],{"class":397},[147,32888,32889],{"class":157},"b_x.to(device)\n",[147,32891,32892],{"class":149,"line":17200},[147,32893,32894],{"class":458},"            # 将标签放入到训练设备当中\n",[147,32896,32897,32900,32902],{"class":149,"line":17205},[147,32898,32899],{"class":157},"            b_y",[147,32901,445],{"class":397},[147,32903,32904],{"class":157},"b_y.to(device)\n",[147,32906,32908],{"class":149,"line":32907},98,[147,32909,32910],{"class":458},"            # 设置模型为训练模式\n",[147,32912,32914],{"class":149,"line":32913},99,[147,32915,32916],{"class":157},"            model.train()\n",[147,32918,32920],{"class":149,"line":32919},100,[147,32921,32922],{"class":458},"            # 将数据放到模型当中,开始前向传播\n",[147,32924,32926],{"class":149,"line":32925},101,[147,32927,32928],{"class":458},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[147,32930,32932,32935,32937],{"class":149,"line":32931},102,[147,32933,32934],{"class":157},"            output",[147,32936,445],{"class":397},[147,32938,32939],{"class":157},"model(b_x)\n",[147,32941,32943],{"class":149,"line":32942},103,[147,32944,32945],{"class":458},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[147,32947,32949,32952,32954,32957,32960,32962,32964],{"class":149,"line":32948},104,[147,32950,32951],{"class":157},"            pre_lab",[147,32953,445],{"class":397},[147,32955,32956],{"class":157},"torch.argmax(output,",[147,32958,32959],{"class":5490},"dim",[147,32961,445],{"class":397},[147,32963,616],{"class":448},[147,32965,407],{"class":157},[147,32967,32969],{"class":149,"line":32968},105,[147,32970,32971],{"class":458},"            # 计算每一个batch的损失函数\n",[147,32973,32975,32978,32980],{"class":149,"line":32974},106,[147,32976,32977],{"class":157},"            loss",[147,32979,445],{"class":397},[147,32981,32982],{"class":157},"criterion(output,b_y)\n",[147,32984,32986],{"class":149,"line":32985},107,[147,32987,32988],{"class":458},"            # 将梯度初始化为0\n",[147,32990,32992],{"class":149,"line":32991},108,[147,32993,32994],{"class":157},"            optimizer.zero_grad()\n",[147,32996,32998],{"class":149,"line":32997},109,[147,32999,33000],{"class":458},"            # 梯度置为0后再进行反向传播\n",[147,33002,33004],{"class":149,"line":33003},110,[147,33005,33006],{"class":157},"            loss.backward()\n",[147,33008,33010],{"class":149,"line":33009},111,[147,33011,33012],{"class":458},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[147,33014,33016],{"class":149,"line":33015},112,[147,33017,33018],{"class":157},"            optimizer.step()\n",[147,33020,33022],{"class":149,"line":33021},113,[147,33023,33024],{"class":458},"            # loss.item()指的是batch的平均损失\n",[147,33026,33028,33031,33033,33036,33038,33041,33043],{"class":149,"line":33027},114,[147,33029,33030],{"class":157},"            train_loss",[147,33032,9751],{"class":397},[147,33034,33035],{"class":157},"loss.item()",[147,33037,854],{"class":397},[147,33039,33040],{"class":157},"b_x.size(",[147,33042,590],{"class":448},[147,33044,407],{"class":157},[147,33046,33048],{"class":149,"line":33047},115,[147,33049,33050],{"class":458},"            # 计算每个批次中正确预测的数量\n",[147,33052,33054,33057,33059,33062,33064],{"class":149,"line":33053},116,[147,33055,33056],{"class":157},"            train_corrects",[147,33058,9751],{"class":397},[147,33060,33061],{"class":157},"torch.sum(pre_lab",[147,33063,3223],{"class":397},[147,33065,33066],{"class":157},"b_y.data)\n",[147,33068,33070],{"class":149,"line":33069},117,[147,33071,33072],{"class":458},"            # 计算目前为止一共处理了多少样本\n",[147,33074,33076,33079,33081,33083,33085],{"class":149,"line":33075},118,[147,33077,33078],{"class":157},"            train_num",[147,33080,9751],{"class":397},[147,33082,33040],{"class":157},[147,33084,590],{"class":448},[147,33086,407],{"class":157},[147,33088,33090],{"class":149,"line":33089},119,[147,33091,33092],{"class":458},"        # 验证数据\n",[147,33094,33096,33098,33101,33103,33105],{"class":149,"line":33095},120,[147,33097,3677],{"class":397},[147,33099,33100],{"class":157}," step ,(b_x,b_y) ",[147,33102,26317],{"class":397},[147,33104,31880],{"class":448},[147,33106,33107],{"class":157},"(val_dataloader):\n",[147,33109,33111],{"class":149,"line":33110},121,[147,33112,33113],{"class":458},"            # 将特征放到验证设备当中\n",[147,33115,33117,33119,33121],{"class":149,"line":33116},122,[147,33118,32884],{"class":157},[147,33120,445],{"class":397},[147,33122,32889],{"class":157},[147,33124,33126],{"class":149,"line":33125},123,[147,33127,33128],{"class":458},"            # 将标签放到放到训练设备当中\n",[147,33130,33132,33134,33136],{"class":149,"line":33131},124,[147,33133,32899],{"class":157},[147,33135,445],{"class":397},[147,33137,32904],{"class":157},[147,33139,33141],{"class":149,"line":33140},125,[147,33142,33143],{"class":458},"            # 开启验证模式，设置模型为评估模式\n",[147,33145,33147],{"class":149,"line":33146},126,[147,33148,33149],{"class":157},"            model.eval()\n",[147,33151,33153,33156],{"class":149,"line":33152},127,[147,33154,33155],{"class":397},"            with",[147,33157,33158],{"class":157}," torch.no_grad():\n",[147,33160,33162],{"class":149,"line":33161},128,[147,33163,33164],{"class":458},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[147,33166,33168,33171,33173],{"class":149,"line":33167},129,[147,33169,33170],{"class":157},"                output ",[147,33172,445],{"class":397},[147,33174,33175],{"class":157}," model(b_x)\n",[147,33177,33179],{"class":149,"line":33178},130,[147,33180,33181],{"class":458},"                # 查找每一行中最大值对应的下标\n",[147,33183,33185,33188,33190,33193,33195,33197,33199],{"class":149,"line":33184},131,[147,33186,33187],{"class":157},"                pre_lab ",[147,33189,445],{"class":397},[147,33191,33192],{"class":157}," torch.argmax(output, ",[147,33194,32959],{"class":5490},[147,33196,445],{"class":397},[147,33198,616],{"class":448},[147,33200,407],{"class":157},[147,33202,33204],{"class":149,"line":33203},132,[147,33205,33206],{"class":458},"                # 计算验证集上的当前 batch 损失\n",[147,33208,33210,33213,33215],{"class":149,"line":33209},133,[147,33211,33212],{"class":157},"                val_batch_loss ",[147,33214,445],{"class":397},[147,33216,33217],{"class":157}," criterion(output, b_y)\n",[147,33219,33221],{"class":149,"line":33220},134,[147,33222,33223],{"class":458},"                # 对损失函数进行累加（按样本数加权）\n",[147,33225,33227,33230,33232,33235,33237,33240,33242],{"class":149,"line":33226},135,[147,33228,33229],{"class":157},"                val_loss ",[147,33231,9751],{"class":397},[147,33233,33234],{"class":157}," val_batch_loss.item() ",[147,33236,854],{"class":397},[147,33238,33239],{"class":157}," b_x.size(",[147,33241,590],{"class":448},[147,33243,407],{"class":157},[147,33245,33247,33250,33252,33255,33257],{"class":149,"line":33246},136,[147,33248,33249],{"class":157},"                val_corrects ",[147,33251,9751],{"class":397},[147,33253,33254],{"class":157}," torch.sum(pre_lab ",[147,33256,3223],{"class":397},[147,33258,33259],{"class":157}," b_y.data)\n",[147,33261,33263],{"class":149,"line":33262},137,[147,33264,33265],{"class":458},"                # 当前用于验证的样本数量\n",[147,33267,33269,33272,33274,33276,33278],{"class":149,"line":33268},138,[147,33270,33271],{"class":157},"            val_num ",[147,33273,9751],{"class":397},[147,33275,33239],{"class":157},[147,33277,590],{"class":448},[147,33279,407],{"class":157},[147,33281,33283],{"class":149,"line":33282},139,[147,33284,33285],{"class":458},"        # 计算并保存每一次迭代的loss值和准确率\n",[147,33287,33289],{"class":149,"line":33288},140,[147,33290,33291],{"class":458},"        # 计算并保存训练集的loss值\n",[147,33293,33295,33298,33300],{"class":149,"line":33294},141,[147,33296,33297],{"class":157},"        train_loss_all.append(train_loss",[147,33299,983],{"class":397},[147,33301,33302],{"class":157},"train_num)\n",[147,33304,33306],{"class":149,"line":33305},142,[147,33307,33308],{"class":458},"        # 取双精度\n",[147,33310,33312],{"class":149,"line":33311},143,[147,33313,33314],{"class":458},"        # 计算并保存训练集的准确率\n",[147,33316,33318,33321,33323],{"class":149,"line":33317},144,[147,33319,33320],{"class":157},"        train_acc_all.append(train_corrects.double().item()",[147,33322,983],{"class":397},[147,33324,33302],{"class":157},[147,33326,33328],{"class":149,"line":33327},145,[147,33329,33330],{"class":458},"        # 计算并保存验证集的loss值\n",[147,33332,33334,33337,33339],{"class":149,"line":33333},146,[147,33335,33336],{"class":157},"        val_loss_all.append(val_loss",[147,33338,983],{"class":397},[147,33340,33341],{"class":157},"val_num)\n",[147,33343,33345],{"class":149,"line":33344},147,[147,33346,33347],{"class":458},"        # 计算并保存验证集的准确率\n",[147,33349,33351,33354,33356],{"class":149,"line":33350},148,[147,33352,33353],{"class":157},"        val_acc_all.append(val_corrects.double().item()",[147,33355,983],{"class":397},[147,33357,33341],{"class":157},[147,33359,33361],{"class":149,"line":33360},149,[147,33362,2674],{"emptyLinePlaceholder":324},[147,33364,33366],{"class":149,"line":33365},150,[147,33367,33368],{"class":458},"        # 打印训练一轮的loss值和准确率\n",[147,33370,33372,33374,33376,33378,33380,33383,33385,33388,33390,33393,33395,33397,33399,33401,33404,33406,33408,33411,33413,33415],{"class":149,"line":33371},151,[147,33373,32725],{"class":448},[147,33375,401],{"class":157},[147,33377,3866],{"class":504},[147,33379,32733],{"class":448},[147,33381,33382],{"class":504},"train loss:",[147,33384,1295],{"class":448},[147,33386,33387],{"class":397},":.4f",[147,33389,1345],{"class":448},[147,33391,33392],{"class":504}," train acc:",[147,33394,1295],{"class":448},[147,33396,33387],{"class":397},[147,33398,1345],{"class":448},[147,33400,3866],{"class":504},[147,33402,33403],{"class":157},".format(epoch,train_loss_all[",[147,33405,931],{"class":397},[147,33407,616],{"class":448},[147,33409,33410],{"class":157},"],train_acc_all[",[147,33412,931],{"class":397},[147,33414,616],{"class":448},[147,33416,33417],{"class":157},"]))\n",[147,33419,33421,33423,33425,33427,33429,33432,33434,33436,33438,33441,33443,33445,33447,33449,33452,33454,33456,33459,33461,33463],{"class":149,"line":33420},152,[147,33422,32725],{"class":448},[147,33424,401],{"class":157},[147,33426,3866],{"class":504},[147,33428,32733],{"class":448},[147,33430,33431],{"class":504},"val loss:",[147,33433,1295],{"class":448},[147,33435,33387],{"class":397},[147,33437,1345],{"class":448},[147,33439,33440],{"class":504}," val acc:",[147,33442,1295],{"class":448},[147,33444,33387],{"class":397},[147,33446,1345],{"class":448},[147,33448,3866],{"class":504},[147,33450,33451],{"class":157},".format(epoch,val_loss_all[",[147,33453,931],{"class":397},[147,33455,616],{"class":448},[147,33457,33458],{"class":157},"],val_acc_all[",[147,33460,931],{"class":397},[147,33462,616],{"class":448},[147,33464,33417],{"class":157},[147,33466,33468],{"class":149,"line":33467},153,[147,33469,2674],{"emptyLinePlaceholder":324},[147,33471,33473],{"class":149,"line":33472},154,[147,33474,33475],{"class":458},"        # 判断准确度--->保存最优模型\n",[147,33477,33479,33481,33484,33486,33488,33490,33492],{"class":149,"line":33478},155,[147,33480,2771],{"class":397},[147,33482,33483],{"class":157}," val_acc_all[",[147,33485,931],{"class":397},[147,33487,616],{"class":448},[147,33489,1339],{"class":157},[147,33491,1359],{"class":397},[147,33493,33494],{"class":157},"best_acc:\n",[147,33496,33498],{"class":149,"line":33497},156,[147,33499,33500],{"class":458},"            # 保存当前模型准确度\n",[147,33502,33504,33507,33509,33511,33514,33516,33518],{"class":149,"line":33503},157,[147,33505,33506],{"class":157},"            best_acc:",[147,33508,439],{"class":448},[147,33510,445],{"class":397},[147,33512,33513],{"class":157},"val_acc_all[",[147,33515,931],{"class":397},[147,33517,616],{"class":448},[147,33519,33520],{"class":157},"]\n",[147,33522,33524],{"class":149,"line":33523},158,[147,33525,33526],{"class":458},"            # 保存当前的准确度\n",[147,33528,33530],{"class":149,"line":33529},159,[147,33531,33532],{"class":458},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[147,33534,33536,33539,33541],{"class":149,"line":33535},160,[147,33537,33538],{"class":157},"            best_model_wts",[147,33540,445],{"class":397},[147,33542,32588],{"class":157},[147,33544,33546],{"class":149,"line":33545},161,[147,33547,2674],{"emptyLinePlaceholder":324},[147,33549,33551],{"class":149,"line":33550},162,[147,33552,33553],{"class":458},"        # 计算耗时\n",[147,33555,33557,33560,33562,33565,33567],{"class":149,"line":33556},163,[147,33558,33559],{"class":157},"        time_use",[147,33561,445],{"class":397},[147,33563,33564],{"class":157},"time.time()",[147,33566,931],{"class":397},[147,33568,33569],{"class":157},"since\n",[147,33571,33573,33575,33577,33580,33582,33585,33587,33589,33591,33593,33595,33598,33601,33604,33606,33609,33611,33613],{"class":149,"line":33572},164,[147,33574,32725],{"class":448},[147,33576,401],{"class":157},[147,33578,33579],{"class":504},"'训练和验证耗费的时间",[147,33581,1295],{"class":448},[147,33583,33584],{"class":397},":.0f",[147,33586,1345],{"class":448},[147,33588,943],{"class":504},[147,33590,1295],{"class":448},[147,33592,33584],{"class":397},[147,33594,1345],{"class":448},[147,33596,33597],{"class":504},"s'",[147,33599,33600],{"class":157},".format(time_use",[147,33602,33603],{"class":397},"\u002F\u002F",[147,33605,1306],{"class":448},[147,33607,33608],{"class":157},",time_use",[147,33610,727],{"class":397},[147,33612,1306],{"class":448},[147,33614,30771],{"class":157},[147,33616,33618],{"class":149,"line":33617},165,[147,33619,33620],{"class":458},"    # 选择最优参数\n",[147,33622,33624],{"class":149,"line":33623},166,[147,33625,33626],{"class":458},"    # 加载最高准确率下的模型参数\n",[147,33628,33630],{"class":149,"line":33629},167,[147,33631,33632],{"class":458},"    # model.load_state_dict(best_model_wts)\n",[147,33634,33636,33639,33642],{"class":149,"line":33635},168,[147,33637,33638],{"class":157},"    torch.save(model.state_dict(best_model_wts), ",[147,33640,33641],{"class":504},"'.\u002Fbest_model.pth'",[147,33643,407],{"class":157},[147,33645,33647],{"class":149,"line":33646},169,[147,33648,33649],{"class":458},"    # 或者写成\n",[147,33651,33653],{"class":149,"line":33652},170,[147,33654,33655],{"class":458},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[147,33657,33659],{"class":149,"line":33658},171,[147,33660,33661],{"class":458},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[147,33663,33665,33668,33670,33673,33676,33678],{"class":149,"line":33664},172,[147,33666,33667],{"class":157},"    train_process",[147,33669,445],{"class":397},[147,33671,33672],{"class":157},"pd.DataFrame(",[147,33674,33675],{"class":5490},"data",[147,33677,445],{"class":397},[147,33679,1820],{"class":157},[147,33681,33683,33686,33688,33691],{"class":149,"line":33682},173,[147,33684,33685],{"class":504},"        \"epoch\"",[147,33687,1258],{"class":157},[147,33689,33690],{"class":448},"range",[147,33692,33693],{"class":157},"(num_epochs),\n",[147,33695,33697,33700],{"class":149,"line":33696},174,[147,33698,33699],{"class":504},"        \"train_loss_all\"",[147,33701,33702],{"class":157},":train_loss_all,\n",[147,33704,33706,33709],{"class":149,"line":33705},175,[147,33707,33708],{"class":504},"        \"val_loss_all\"",[147,33710,33711],{"class":157},":val_loss_all,\n",[147,33713,33715,33718],{"class":149,"line":33714},176,[147,33716,33717],{"class":504},"        \"train_acc_all\"",[147,33719,33720],{"class":157},":train_acc_all,\n",[147,33722,33724,33727],{"class":149,"line":33723},177,[147,33725,33726],{"class":504},"        \"val_acc_all\"",[147,33728,33729],{"class":157},":val_acc_all\n",[147,33731,33733],{"class":149,"line":33732},178,[147,33734,33735],{"class":157},"    })\n",[147,33737,33739],{"class":149,"line":33738},179,[147,33740,33741],{"class":458},"    # 返回训练保存的过程\n",[147,33743,33745,33747],{"class":149,"line":33744},180,[147,33746,4364],{"class":397},[147,33748,33749],{"class":157}," train_process\n",[147,33751,33753],{"class":149,"line":33752},181,[147,33754,2674],{"emptyLinePlaceholder":324},[147,33756,33758],{"class":149,"line":33757},182,[147,33759,33760],{"class":458},"# 将loss值和精度按照图片的形式展示出来\n",[147,33762,33764,33766,33769],{"class":149,"line":33763},183,[147,33765,32221],{"class":397},[147,33767,33768],{"class":2237}," matplot_acc_loss",[147,33770,33771],{"class":157},"(train_process):\n",[147,33773,33775],{"class":149,"line":33774},184,[147,33776,33777],{"class":458},"    # 设置图的大小\n",[147,33779,33781,33784,33786,33788,33790,33792,33794,33796],{"class":149,"line":33780},185,[147,33782,33783],{"class":157},"    plt.figure(",[147,33785,31967],{"class":5490},[147,33787,445],{"class":397},[147,33789,401],{"class":157},[147,33791,897],{"class":448},[147,33793,777],{"class":157},[147,33795,692],{"class":448},[147,33797,30771],{"class":157},[147,33799,33801],{"class":149,"line":33800},186,[147,33802,33803],{"class":458},"    # 设置图中有几张图\n",[147,33805,33807],{"class":149,"line":33806},187,[147,33808,33809],{"class":458},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[147,33811,33813],{"class":149,"line":33812},188,[147,33814,33815],{"class":458},"    # ①loss图\n",[147,33817,33819,33821,33823,33825,33827,33829,33831],{"class":149,"line":33818},189,[147,33820,32001],{"class":157},[147,33822,616],{"class":448},[147,33824,777],{"class":157},[147,33826,477],{"class":448},[147,33828,777],{"class":157},[147,33830,616],{"class":448},[147,33832,407],{"class":157},[147,33834,33836],{"class":149,"line":33835},190,[147,33837,33838],{"class":458},"    # 补充:\n",[147,33840,33842],{"class":149,"line":33841},191,[147,33843,33844],{"class":458},"    # plt.subplot(nrows, ncols, index)\n",[147,33846,33848],{"class":149,"line":33847},192,[147,33849,33850],{"class":458},"    # nrows：行数\n",[147,33852,33854],{"class":149,"line":33853},193,[147,33855,33856],{"class":458},"    # ncols：列数\n",[147,33858,33860],{"class":149,"line":33859},194,[147,33861,33862],{"class":458},"    # index：目前选中第几个子图（从1开始）\n",[147,33864,33866,33869,33872,33875,33878,33880,33883,33885,33888],{"class":149,"line":33865},195,[147,33867,33868],{"class":157},"    plt.plot(train_process[",[147,33870,33871],{"class":504},"\"epoch\"",[147,33873,33874],{"class":157},"],train_process.train_loss_all,",[147,33876,33877],{"class":504},"'ro-'",[147,33879,777],{"class":157},[147,33881,33882],{"class":5490},"label",[147,33884,445],{"class":397},[147,33886,33887],{"class":504},"'train loss'",[147,33889,407],{"class":157},[147,33891,33893,33895,33897,33900,33903,33905,33907,33909,33912],{"class":149,"line":33892},196,[147,33894,33868],{"class":157},[147,33896,33871],{"class":504},[147,33898,33899],{"class":157},"],train_process.val_loss_all,",[147,33901,33902],{"class":504},"'bs--'",[147,33904,777],{"class":157},[147,33906,33882],{"class":5490},[147,33908,445],{"class":397},[147,33910,33911],{"class":504},"'val loss'",[147,33913,407],{"class":157},[147,33915,33917],{"class":149,"line":33916},197,[147,33918,33919],{"class":458},"    # 添加一个图例\n",[147,33921,33923],{"class":149,"line":33922},198,[147,33924,33925],{"class":157},"    plt.legend()\n",[147,33927,33929],{"class":149,"line":33928},199,[147,33930,33931],{"class":458},"    # 给轴添加标签\n",[147,33933,33935,33938,33941],{"class":149,"line":33934},200,[147,33936,33937],{"class":157},"    plt.xlabel(",[147,33939,33940],{"class":504},"'epoch'",[147,33942,407],{"class":157},[147,33944,33946,33949,33952],{"class":149,"line":33945},201,[147,33947,33948],{"class":157},"    plt.ylabel(",[147,33950,33951],{"class":504},"'loss'",[147,33953,407],{"class":157},[147,33955,33957],{"class":149,"line":33956},202,[147,33958,33959],{"class":458},"    # ②准确度图\n",[147,33961,33963,33965,33967,33969,33971,33973,33975],{"class":149,"line":33962},203,[147,33964,32001],{"class":157},[147,33966,616],{"class":448},[147,33968,777],{"class":157},[147,33970,477],{"class":448},[147,33972,777],{"class":157},[147,33974,477],{"class":448},[147,33976,407],{"class":157},[147,33978,33980,33982,33984,33987,33989,33991,33993,33995,33998],{"class":149,"line":33979},204,[147,33981,33868],{"class":157},[147,33983,33871],{"class":504},[147,33985,33986],{"class":157},"],train_process.train_acc_all,",[147,33988,33877],{"class":504},[147,33990,777],{"class":157},[147,33992,33882],{"class":5490},[147,33994,445],{"class":397},[147,33996,33997],{"class":504},"'train acc'",[147,33999,407],{"class":157},[147,34001,34003,34005,34007,34010,34012,34014,34016,34018,34021],{"class":149,"line":34002},205,[147,34004,33868],{"class":157},[147,34006,33871],{"class":504},[147,34008,34009],{"class":157},"],train_process.val_acc_all,",[147,34011,33902],{"class":504},[147,34013,777],{"class":157},[147,34015,33882],{"class":5490},[147,34017,445],{"class":397},[147,34019,34020],{"class":504},"'val acc'",[147,34022,407],{"class":157},[147,34024,34026],{"class":149,"line":34025},206,[147,34027,34028],{"class":458},"    # 添加图例\n",[147,34030,34032],{"class":149,"line":34031},207,[147,34033,33925],{"class":157},[147,34035,34037,34039,34041],{"class":149,"line":34036},208,[147,34038,33937],{"class":157},[147,34040,33871],{"class":504},[147,34042,407],{"class":157},[147,34044,34046,34048,34051],{"class":149,"line":34045},209,[147,34047,33948],{"class":157},[147,34049,34050],{"class":504},"\"acc\"",[147,34052,407],{"class":157},[147,34054,34056],{"class":149,"line":34055},210,[147,34057,34058],{"class":157},"    plt.show()\n",[147,34060,34062],{"class":149,"line":34061},211,[147,34063,2674],{"emptyLinePlaceholder":324},[147,34065,34067],{"class":149,"line":34066},212,[147,34068,34069],{"class":458},"# 正式开始训练:\n",[147,34071,34073,34075,34077,34079,34081],{"class":149,"line":34072},213,[147,34074,1805],{"class":397},[147,34076,31494],{"class":448},[147,34078,3223],{"class":397},[147,34080,31499],{"class":504},[147,34082,4013],{"class":157},[147,34084,34086],{"class":149,"line":34085},214,[147,34087,34088],{"class":458},"    # 将模型实例化\n",[147,34090,34092,34095,34097],{"class":149,"line":34091},215,[147,34093,34094],{"class":157},"    LeNet",[147,34096,445],{"class":397},[147,34098,34099],{"class":157},"LeNet()\n",[147,34101,34103,34106,34108],{"class":149,"line":34102},216,[147,34104,34105],{"class":157},"    train_dataloader,val_dataloader",[147,34107,445],{"class":397},[147,34109,34110],{"class":157},"train_val_data_process()\n",[147,34112,34114,34116,34118,34121,34124,34126,34128],{"class":149,"line":34113},217,[147,34115,33667],{"class":157},[147,34117,445],{"class":397},[147,34119,34120],{"class":157},"train_model_process(LeNet,train_dataloader,val_dataloader,",[147,34122,34123],{"class":5490},"num_epochs",[147,34125,445],{"class":397},[147,34127,1099],{"class":448},[147,34129,407],{"class":157},[147,34131,34133],{"class":149,"line":34132},218,[147,34134,34135],{"class":157},"    matplot_acc_loss(train_process)\n",[19,34137,34138],{},"画图的补充点学习：",[19,34140,34141],{},[29,34142],{"alt":143,"src":34143},"\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",[350,34145,34146],{"start":1454},[353,34147,34148],{},"测试",[138,34150,34152],{"className":30652,"code":34151,"language":30654,"meta":143,"style":143},"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",[51,34153,34154,34160,34170,34182,34192,34197,34207,34217,34221,34226,34235,34252,34264,34281,34292,34308,34313,34324,34335,34346,34353,34357,34362,34372,34377,34394,34402,34406,34411,34420,34429,34433,34438,34443,34448,34455,34460,34472,34482,34492,34497,34501,34506,34515,34520,34536,34541,34546,34551,34565,34570,34584,34588,34593,34608,34613,34625,34629,34634,34646,34651,34659,34664,34669,34679,34684,34693,34698,34703,34707,34712,34717,34733,34741,34746,34751,34810,34816,34821,34832,34840,34848,34852,34857,34861,34866,34874,34879,34895,34900,34910,34920],{"__ignoreMap":143},[147,34155,34156,34158],{"class":149,"line":150},[147,34157,30666],{"class":397},[147,34159,30669],{"class":157},[147,34161,34162,34164,34166,34168],{"class":149,"line":312},[147,34163,30666],{"class":397},[147,34165,31689],{"class":157},[147,34167,31657],{"class":397},[147,34169,31694],{"class":157},[147,34171,34172,34174,34177,34179],{"class":149,"line":1454},[147,34173,31011],{"class":397},[147,34175,34176],{"class":157}," jupyter_client.consoleapp ",[147,34178,30666],{"class":397},[147,34180,34181],{"class":157}," classes\n",[147,34183,34184,34186,34188,34190],{"class":149,"line":1469},[147,34185,31011],{"class":397},[147,34187,31672],{"class":157},[147,34189,30666],{"class":397},[147,34191,31677],{"class":157},[147,34193,34194],{"class":149,"line":1475},[147,34195,34196],{"class":458},"# 导入数据集\n",[147,34198,34199,34201,34203,34205],{"class":149,"line":1489},[147,34200,31011],{"class":397},[147,34202,31642],{"class":157},[147,34204,30666],{"class":397},[147,34206,31647],{"class":157},[147,34208,34209,34211,34213,34215],{"class":149,"line":1495},[147,34210,31011],{"class":397},[147,34212,32188],{"class":157},[147,34214,30666],{"class":397},[147,34216,32193],{"class":157},[147,34218,34219],{"class":149,"line":1586},[147,34220,2674],{"emptyLinePlaceholder":324},[147,34222,34223],{"class":149,"line":1592},[147,34224,34225],{"class":458},"# 测试数据处理\n",[147,34227,34228,34230,34233],{"class":149,"line":1604},[147,34229,32221],{"class":397},[147,34231,34232],{"class":2237}," test_data_process",[147,34234,32227],{"class":157},[147,34236,34237,34240,34242,34244,34246,34248,34250],{"class":149,"line":1886},[147,34238,34239],{"class":157},"    test_data",[147,34241,445],{"class":397},[147,34243,31729],{"class":157},[147,34245,31732],{"class":5490},[147,34247,445],{"class":397},[147,34249,31737],{"class":504},[147,34251,31740],{"class":157},[147,34253,34254,34257,34259,34262],{"class":149,"line":1891},[147,34255,34256],{"class":5490},"                           train",[147,34258,445],{"class":397},[147,34260,34261],{"class":448},"False",[147,34263,31740],{"class":157},[147,34265,34266,34269,34271,34273,34275,34277,34279],{"class":149,"line":1897},[147,34267,34268],{"class":5490},"                           transform",[147,34270,445],{"class":397},[147,34272,31767],{"class":157},[147,34274,31770],{"class":5490},[147,34276,445],{"class":397},[147,34278,1300],{"class":448},[147,34280,31778],{"class":157},[147,34282,34283,34286,34288,34290],{"class":149,"line":1902},[147,34284,34285],{"class":5490},"                           download",[147,34287,445],{"class":397},[147,34289,31750],{"class":448},[147,34291,407],{"class":157},[147,34293,34294,34297,34299,34301,34303,34305],{"class":149,"line":1916},[147,34295,34296],{"class":157},"    test_dataloader",[147,34298,445],{"class":397},[147,34300,31808],{"class":157},[147,34302,31811],{"class":5490},[147,34304,445],{"class":397},[147,34306,34307],{"class":157},"test_data,\n",[147,34309,34310],{"class":149,"line":1921},[147,34311,34312],{"class":458},"                                    # 这里是一张一张进行测试\n",[147,34314,34315,34318,34320,34322],{"class":149,"line":1927},[147,34316,34317],{"class":5490},"                                    batch_size",[147,34319,445],{"class":397},[147,34321,616],{"class":448},[147,34323,31740],{"class":157},[147,34325,34326,34329,34331,34333],{"class":149,"line":1948},[147,34327,34328],{"class":5490},"                                    shuffle",[147,34330,445],{"class":397},[147,34332,31750],{"class":448},[147,34334,31740],{"class":157},[147,34336,34337,34340,34342,34344],{"class":149,"line":1953},[147,34338,34339],{"class":5490},"                                    num_workers",[147,34341,445],{"class":397},[147,34343,590],{"class":448},[147,34345,407],{"class":157},[147,34347,34348,34350],{"class":149,"line":1967},[147,34349,4364],{"class":397},[147,34351,34352],{"class":157}," test_dataloader\n",[147,34354,34355],{"class":149,"line":1972},[147,34356,2674],{"emptyLinePlaceholder":324},[147,34358,34359],{"class":149,"line":2001},[147,34360,34361],{"class":458},"# 定义模型测试函数\n",[147,34363,34364,34366,34369],{"class":149,"line":2006},[147,34365,32221],{"class":397},[147,34367,34368],{"class":2237}," test_model_process",[147,34370,34371],{"class":157},"(model,test_dataloader):\n",[147,34373,34374],{"class":149,"line":2023},[147,34375,34376],{"class":458},"    # 将模型放到设备当中，先进行判断\n",[147,34378,34379,34381,34383,34385,34387,34389,34391],{"class":149,"line":2028},[147,34380,31511],{"class":157},[147,34382,445],{"class":397},[147,34384,31518],{"class":504},[147,34386,1978],{"class":397},[147,34388,31523],{"class":157},[147,34390,1975],{"class":397},[147,34392,34393],{"class":504}," \"cpu\"\n",[147,34395,34396,34398,34400],{"class":149,"line":2033},[147,34397,31563],{"class":157},[147,34399,445],{"class":397},[147,34401,32563],{"class":157},[147,34403,34404],{"class":149,"line":2038},[147,34405,2674],{"emptyLinePlaceholder":324},[147,34407,34408],{"class":149,"line":2052},[147,34409,34410],{"class":458},"    # 设置初始化参数\n",[147,34412,34413,34416,34418],{"class":149,"line":2057},[147,34414,34415],{"class":157},"    test_corrects",[147,34417,445],{"class":397},[147,34419,32616],{"class":448},[147,34421,34422,34425,34427],{"class":149,"line":2851},[147,34423,34424],{"class":157},"    test_num",[147,34426,445],{"class":397},[147,34428,3359],{"class":448},[147,34430,34431],{"class":149,"line":2865},[147,34432,2674],{"emptyLinePlaceholder":324},[147,34434,34435],{"class":149,"line":2873},[147,34436,34437],{"class":458},"    # 进行模型测试\n",[147,34439,34440],{"class":149,"line":2878},[147,34441,34442],{"class":458},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[147,34444,34445],{"class":149,"line":2884},[147,34446,34447],{"class":458},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[147,34449,34450,34453],{"class":149,"line":2890},[147,34451,34452],{"class":397},"    with",[147,34454,33158],{"class":157},[147,34456,34457],{"class":149,"line":2895},[147,34458,34459],{"class":458},"        # 从数据中进行\n",[147,34461,34462,34464,34467,34469],{"class":149,"line":8222},[147,34463,3677],{"class":397},[147,34465,34466],{"class":157}," test_data_x,test_data_y ",[147,34468,26317],{"class":397},[147,34470,34471],{"class":157}," test_dataloader:\n",[147,34473,34474,34477,34479],{"class":149,"line":8246},[147,34475,34476],{"class":157},"            test_data_x",[147,34478,445],{"class":397},[147,34480,34481],{"class":157},"test_data_x.to(device)\n",[147,34483,34484,34487,34489],{"class":149,"line":8251},[147,34485,34486],{"class":157},"            test_data_y",[147,34488,445],{"class":397},[147,34490,34491],{"class":157},"test_data_y.to(device)\n",[147,34493,34494],{"class":149,"line":8257},[147,34495,34496],{"class":458},"            # 设置为验证模式\n",[147,34498,34499],{"class":149,"line":8284},[147,34500,33149],{"class":157},[147,34502,34503],{"class":149,"line":8289},[147,34504,34505],{"class":458},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[147,34507,34508,34510,34512],{"class":149,"line":8295},[147,34509,32934],{"class":157},[147,34511,445],{"class":397},[147,34513,34514],{"class":157},"model(test_data_x)\n",[147,34516,34517],{"class":149,"line":8307},[147,34518,34519],{"class":458},"            # 查找每一行中最大值对应的下标\n",[147,34521,34522,34524,34526,34528,34530,34532,34534],{"class":149,"line":8319},[147,34523,32951],{"class":157},[147,34525,445],{"class":397},[147,34527,32956],{"class":157},[147,34529,32959],{"class":5490},[147,34531,445],{"class":397},[147,34533,616],{"class":448},[147,34535,407],{"class":157},[147,34537,34538],{"class":149,"line":8331},[147,34539,34540],{"class":458},"            # 计算正确率\n",[147,34542,34543],{"class":149,"line":9990},[147,34544,34545],{"class":458},"            # .data表示是一个不带梯度信息的tensor\n",[147,34547,34548],{"class":149,"line":10015},[147,34549,34550],{"class":458},"            # 如果预测正确，则准确度test_corrects加1\n",[147,34552,34553,34556,34558,34560,34562],{"class":149,"line":10038},[147,34554,34555],{"class":157},"            test_corrects",[147,34557,9751],{"class":397},[147,34559,33061],{"class":157},[147,34561,3223],{"class":397},[147,34563,34564],{"class":157},"test_data_y.data)\n",[147,34566,34567],{"class":149,"line":10062},[147,34568,34569],{"class":458},"            # 将所有的测试样本进行累计\n",[147,34571,34572,34575,34577,34580,34582],{"class":149,"line":10067},[147,34573,34574],{"class":157},"            test_num",[147,34576,9751],{"class":397},[147,34578,34579],{"class":157},"test_data_x.size(",[147,34581,590],{"class":448},[147,34583,407],{"class":157},[147,34585,34586],{"class":149,"line":10072},[147,34587,2674],{"emptyLinePlaceholder":324},[147,34589,34590],{"class":149,"line":10077},[147,34591,34592],{"class":458},"        # 计算准确度\n",[147,34594,34595,34598,34600,34603,34605],{"class":149,"line":10086},[147,34596,34597],{"class":157},"        test_acc",[147,34599,445],{"class":397},[147,34601,34602],{"class":157},"test_corrects.double().item()",[147,34604,983],{"class":397},[147,34606,34607],{"class":157},"test_num\n",[147,34609,34610],{"class":149,"line":10091},[147,34611,34612],{"class":458},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[147,34614,34615,34617,34619,34622],{"class":149,"line":10097},[147,34616,32725],{"class":448},[147,34618,401],{"class":157},[147,34620,34621],{"class":504},"\"测试的准确率：\"",[147,34623,34624],{"class":157},",test_acc)\n",[147,34626,34627],{"class":149,"line":10118},[147,34628,2674],{"emptyLinePlaceholder":324},[147,34630,34631],{"class":149,"line":10124},[147,34632,34633],{"class":458},"# 实现模型的测试功能\n",[147,34635,34636,34638,34640,34642,34644],{"class":149,"line":10138},[147,34637,1805],{"class":397},[147,34639,31494],{"class":448},[147,34641,3223],{"class":397},[147,34643,31499],{"class":504},[147,34645,4013],{"class":157},[147,34647,34648],{"class":149,"line":10144},[147,34649,34650],{"class":458},"    # 加载模型\n",[147,34652,34653,34655,34657],{"class":149,"line":10171},[147,34654,31563],{"class":157},[147,34656,445],{"class":397},[147,34658,34099],{"class":157},[147,34660,34661],{"class":149,"line":10180},[147,34662,34663],{"class":458},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[147,34665,34666],{"class":149,"line":10186},[147,34667,34668],{"class":458},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[147,34670,34671,34674,34677],{"class":149,"line":10194},[147,34672,34673],{"class":157},"    model.load_state_dict(torch.load(",[147,34675,34676],{"class":504},"'best_model.pth'",[147,34678,30771],{"class":157},[147,34680,34681],{"class":149,"line":10199},[147,34682,34683],{"class":458},"    # 数据加载\n",[147,34685,34686,34688,34690],{"class":149,"line":16877},[147,34687,34296],{"class":157},[147,34689,445],{"class":397},[147,34691,34692],{"class":157},"test_data_process()\n",[147,34694,34695],{"class":149,"line":16883},[147,34696,34697],{"class":458},"    # 加载模型测试的函数\n",[147,34699,34700],{"class":149,"line":16906},[147,34701,34702],{"class":157},"    test_model_process(model,test_dataloader)\n",[147,34704,34705],{"class":149,"line":16912},[147,34706,2674],{"emptyLinePlaceholder":324},[147,34708,34709],{"class":149,"line":16935},[147,34710,34711],{"class":458},"    # 验证集推理实现：\n",[147,34713,34714],{"class":149,"line":16949},[147,34715,34716],{"class":458},"    # 加载数据加载的更详细一些\n",[147,34718,34719,34721,34723,34725,34727,34729,34731],{"class":149,"line":16969},[147,34720,31511],{"class":157},[147,34722,445],{"class":397},[147,34724,31518],{"class":504},[147,34726,1978],{"class":397},[147,34728,31523],{"class":157},[147,34730,1975],{"class":397},[147,34732,34393],{"class":504},[147,34734,34735,34737,34739],{"class":149,"line":16975},[147,34736,31563],{"class":157},[147,34738,445],{"class":397},[147,34740,32563],{"class":157},[147,34742,34743],{"class":149,"line":16986},[147,34744,34745],{"class":458},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[147,34747,34748],{"class":149,"line":17009},[147,34749,34750],{"class":458},"    # 顺序不可改变\n",[147,34752,34753,34756,34758,34760,34763,34765,34768,34770,34773,34775,34778,34780,34783,34785,34788,34790,34793,34795,34798,34800,34803,34805,34808],{"class":149,"line":17031},[147,34754,34755],{"class":157},"    classes",[147,34757,445],{"class":397},[147,34759,1289],{"class":157},[147,34761,34762],{"class":504},"'T-shirt\u002Ftop'",[147,34764,777],{"class":157},[147,34766,34767],{"class":504},"'Trouser'",[147,34769,777],{"class":157},[147,34771,34772],{"class":504},"'Pullover'",[147,34774,777],{"class":157},[147,34776,34777],{"class":504},"'Dress'",[147,34779,777],{"class":157},[147,34781,34782],{"class":504},"'Coat'",[147,34784,777],{"class":157},[147,34786,34787],{"class":504},"'Sandal'",[147,34789,777],{"class":157},[147,34791,34792],{"class":504},"'Shirt'",[147,34794,777],{"class":157},[147,34796,34797],{"class":504},"'Sneaker'",[147,34799,777],{"class":157},[147,34801,34802],{"class":504},"'Bag'",[147,34804,777],{"class":157},[147,34806,34807],{"class":504},"'Ankle boot'",[147,34809,33520],{"class":157},[147,34811,34812,34814],{"class":149,"line":17036},[147,34813,34452],{"class":397},[147,34815,33158],{"class":157},[147,34817,34818],{"class":149,"line":17042},[147,34819,34820],{"class":458},"        # 将数据和标签都放到设备当中\n",[147,34822,34823,34825,34828,34830],{"class":149,"line":17056},[147,34824,3677],{"class":397},[147,34826,34827],{"class":157}," b_x,b_y ",[147,34829,26317],{"class":397},[147,34831,34471],{"class":157},[147,34833,34834,34836,34838],{"class":149,"line":17069},[147,34835,32884],{"class":157},[147,34837,445],{"class":397},[147,34839,32889],{"class":157},[147,34841,34842,34844,34846],{"class":149,"line":17074},[147,34843,32899],{"class":157},[147,34845,445],{"class":397},[147,34847,32904],{"class":157},[147,34849,34850],{"class":149,"line":17088},[147,34851,2674],{"emptyLinePlaceholder":324},[147,34853,34854],{"class":149,"line":17093},[147,34855,34856],{"class":458},"            # 设置模型为验证模式\n",[147,34858,34859],{"class":149,"line":17099},[147,34860,33149],{"class":157},[147,34862,34863],{"class":149,"line":17104},[147,34864,34865],{"class":458},"            # 模型推理结果\n",[147,34867,34868,34870,34872],{"class":149,"line":17118},[147,34869,32934],{"class":157},[147,34871,445],{"class":397},[147,34873,32939],{"class":157},[147,34875,34876],{"class":149,"line":17123},[147,34877,34878],{"class":458},"            # 获取最大下标，最大下标就是类别号\n",[147,34880,34881,34883,34885,34887,34889,34891,34893],{"class":149,"line":17128},[147,34882,32951],{"class":157},[147,34884,445],{"class":397},[147,34886,32956],{"class":157},[147,34888,32959],{"class":5490},[147,34890,445],{"class":397},[147,34892,616],{"class":448},[147,34894,407],{"class":157},[147,34896,34897],{"class":149,"line":17142},[147,34898,34899],{"class":458},"            # 取出张量中的数值\n",[147,34901,34902,34905,34907],{"class":149,"line":17154},[147,34903,34904],{"class":157},"            result",[147,34906,445],{"class":397},[147,34908,34909],{"class":157},"pre_lab.item()\n",[147,34911,34912,34915,34917],{"class":149,"line":17159},[147,34913,34914],{"class":157},"            label",[147,34916,445],{"class":397},[147,34918,34919],{"class":157},"b_y.item()\n",[147,34921,34922,34925,34927,34930,34933,34936,34938,34941],{"class":149,"line":17172},[147,34923,34924],{"class":448},"            print",[147,34926,401],{"class":157},[147,34928,34929],{"class":504},"\"预测值：\"",[147,34931,34932],{"class":157},",classes[result],",[147,34934,34935],{"class":504},"\"------\"",[147,34937,777],{"class":157},[147,34939,34940],{"class":504},"\"真实值：\"",[147,34942,34943],{"class":157},",classes[label])\n",[19,34945,34946],{},"（2）AlexNet",[350,34948,34949],{},[353,34950,34951],{},"神经网络构建",[138,34953,34955],{"className":30652,"code":34954,"language":30654,"meta":143,"style":143},"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",[51,34956,34957,34963,34973,34983,34995,34999,35016,35024,35039,35051,35093,35120,35163,35189,35233,35276,35319,35346,35350,35360,35365,35393,35412,35431,35435,35440,35448,35463,35473,35487,35497,35512,35527,35542,35553,35557,35562,35572,35587,35592,35606,35621,35633,35638,35649,35654,35660,35665,35677,35697,35702,35711],{"__ignoreMap":143},[147,34958,34959,34961],{"class":149,"line":150},[147,34960,30666],{"class":397},[147,34962,30669],{"class":157},[147,34964,34965,34967,34969,34971],{"class":149,"line":312},[147,34966,31011],{"class":397},[147,34968,31014],{"class":157},[147,34970,30666],{"class":397},[147,34972,31019],{"class":157},[147,34974,34975,34977,34979,34981],{"class":149,"line":1454},[147,34976,31011],{"class":397},[147,34978,31031],{"class":157},[147,34980,30666],{"class":397},[147,34982,31036],{"class":157},[147,34984,34985,34987,34990,34992],{"class":149,"line":1469},[147,34986,30666],{"class":397},[147,34988,34989],{"class":157}," torch.nn.functional ",[147,34991,31657],{"class":397},[147,34993,34994],{"class":157}," F\n",[147,34996,34997],{"class":149,"line":1475},[147,34998,2674],{"emptyLinePlaceholder":324},[147,35000,35001,35003,35006,35008,35010,35012,35014],{"class":149,"line":1489},[147,35002,14967],{"class":397},[147,35004,35005],{"class":2237}," AlexNet",[147,35007,401],{"class":157},[147,35009,31052],{"class":2237},[147,35011,957],{"class":157},[147,35013,31057],{"class":2237},[147,35015,31060],{"class":157},[147,35017,35018,35020,35022],{"class":149,"line":1495},[147,35019,31075],{"class":397},[147,35021,31078],{"class":448},[147,35023,31081],{"class":157},[147,35025,35026,35028,35031,35033,35035,35037],{"class":149,"line":1586},[147,35027,31091],{"class":448},[147,35029,35030],{"class":157},"(AlexNet,",[147,35032,31097],{"class":448},[147,35034,31100],{"class":157},[147,35036,31103],{"class":448},[147,35038,2250],{"class":157},[147,35040,35041,35043,35046,35048],{"class":149,"line":1592},[147,35042,31119],{"class":448},[147,35044,35045],{"class":157},".ReLu",[147,35047,445],{"class":397},[147,35049,35050],{"class":157},"nn.ReLU()\n",[147,35052,35053,35055,35057,35059,35061,35063,35065,35067,35069,35071,35073,35075,35077,35079,35081,35083,35085,35087,35089,35091],{"class":149,"line":1604},[147,35054,31119],{"class":448},[147,35056,31122],{"class":157},[147,35058,445],{"class":397},[147,35060,31127],{"class":157},[147,35062,31130],{"class":5490},[147,35064,445],{"class":397},[147,35066,616],{"class":448},[147,35068,777],{"class":157},[147,35070,31139],{"class":5490},[147,35072,445],{"class":397},[147,35074,608],{"class":448},[147,35076,777],{"class":157},[147,35078,31148],{"class":5490},[147,35080,445],{"class":397},[147,35082,871],{"class":448},[147,35084,777],{"class":157},[147,35086,31203],{"class":5490},[147,35088,445],{"class":397},[147,35090,692],{"class":448},[147,35092,407],{"class":157},[147,35094,35095,35097,35099,35101,35104,35106,35108,35110,35112,35114,35116,35118],{"class":149,"line":1886},[147,35096,31119],{"class":448},[147,35098,31187],{"class":157},[147,35100,445],{"class":397},[147,35102,35103],{"class":157},"nn.MaxPool2d(",[147,35105,31148],{"class":5490},[147,35107,445],{"class":397},[147,35109,471],{"class":448},[147,35111,777],{"class":157},[147,35113,31203],{"class":5490},[147,35115,445],{"class":397},[147,35117,477],{"class":448},[147,35119,407],{"class":157},[147,35121,35122,35124,35126,35128,35130,35132,35134,35136,35138,35140,35142,35145,35147,35149,35151,35153,35155,35157,35159,35161],{"class":149,"line":1891},[147,35123,31119],{"class":448},[147,35125,31216],{"class":157},[147,35127,445],{"class":397},[147,35129,31127],{"class":157},[147,35131,31130],{"class":5490},[147,35133,445],{"class":397},[147,35135,608],{"class":448},[147,35137,777],{"class":157},[147,35139,31139],{"class":5490},[147,35141,445],{"class":397},[147,35143,35144],{"class":448},"256",[147,35146,777],{"class":157},[147,35148,31148],{"class":5490},[147,35150,445],{"class":397},[147,35152,718],{"class":448},[147,35154,777],{"class":157},[147,35156,31157],{"class":5490},[147,35158,445],{"class":397},[147,35160,477],{"class":448},[147,35162,407],{"class":157},[147,35164,35165,35167,35169,35171,35173,35175,35177,35179,35181,35183,35185,35187],{"class":149,"line":1897},[147,35166,31119],{"class":448},[147,35168,31251],{"class":157},[147,35170,445],{"class":397},[147,35172,35103],{"class":157},[147,35174,31148],{"class":5490},[147,35176,445],{"class":397},[147,35178,471],{"class":448},[147,35180,777],{"class":157},[147,35182,31203],{"class":5490},[147,35184,445],{"class":397},[147,35186,477],{"class":448},[147,35188,407],{"class":157},[147,35190,35191,35193,35196,35198,35200,35202,35204,35206,35208,35210,35212,35215,35217,35219,35221,35223,35225,35227,35229,35231],{"class":149,"line":1902},[147,35192,31119],{"class":448},[147,35194,35195],{"class":157},".c5",[147,35197,445],{"class":397},[147,35199,31127],{"class":157},[147,35201,31130],{"class":5490},[147,35203,445],{"class":397},[147,35205,35144],{"class":448},[147,35207,777],{"class":157},[147,35209,31139],{"class":5490},[147,35211,445],{"class":397},[147,35213,35214],{"class":448},"384",[147,35216,777],{"class":157},[147,35218,31148],{"class":5490},[147,35220,445],{"class":397},[147,35222,471],{"class":448},[147,35224,777],{"class":157},[147,35226,31157],{"class":5490},[147,35228,445],{"class":397},[147,35230,616],{"class":448},[147,35232,407],{"class":157},[147,35234,35235,35237,35240,35242,35244,35246,35248,35250,35252,35254,35256,35258,35260,35262,35264,35266,35268,35270,35272,35274],{"class":149,"line":1916},[147,35236,31119],{"class":448},[147,35238,35239],{"class":157},".c6",[147,35241,445],{"class":397},[147,35243,31127],{"class":157},[147,35245,31130],{"class":5490},[147,35247,445],{"class":397},[147,35249,35214],{"class":448},[147,35251,777],{"class":157},[147,35253,31139],{"class":5490},[147,35255,445],{"class":397},[147,35257,35214],{"class":448},[147,35259,777],{"class":157},[147,35261,31148],{"class":5490},[147,35263,445],{"class":397},[147,35265,471],{"class":448},[147,35267,777],{"class":157},[147,35269,31157],{"class":5490},[147,35271,445],{"class":397},[147,35273,616],{"class":448},[147,35275,407],{"class":157},[147,35277,35278,35280,35283,35285,35287,35289,35291,35293,35295,35297,35299,35301,35303,35305,35307,35309,35311,35313,35315,35317],{"class":149,"line":1921},[147,35279,31119],{"class":448},[147,35281,35282],{"class":157},".c7",[147,35284,445],{"class":397},[147,35286,31127],{"class":157},[147,35288,31130],{"class":5490},[147,35290,445],{"class":397},[147,35292,35214],{"class":448},[147,35294,777],{"class":157},[147,35296,31139],{"class":5490},[147,35298,445],{"class":397},[147,35300,35144],{"class":448},[147,35302,777],{"class":157},[147,35304,31148],{"class":5490},[147,35306,445],{"class":397},[147,35308,471],{"class":448},[147,35310,777],{"class":157},[147,35312,31157],{"class":5490},[147,35314,445],{"class":397},[147,35316,616],{"class":448},[147,35318,407],{"class":157},[147,35320,35321,35323,35326,35328,35330,35332,35334,35336,35338,35340,35342,35344],{"class":149,"line":1927},[147,35322,31119],{"class":448},[147,35324,35325],{"class":157},".s8",[147,35327,445],{"class":397},[147,35329,35103],{"class":157},[147,35331,31148],{"class":5490},[147,35333,445],{"class":397},[147,35335,471],{"class":448},[147,35337,777],{"class":157},[147,35339,31203],{"class":5490},[147,35341,445],{"class":397},[147,35343,477],{"class":448},[147,35345,407],{"class":157},[147,35347,35348],{"class":149,"line":1948},[147,35349,31276],{"class":458},[147,35351,35352,35354,35356,35358],{"class":149,"line":1953},[147,35353,31119],{"class":448},[147,35355,31283],{"class":157},[147,35357,445],{"class":397},[147,35359,31288],{"class":157},[147,35361,35362],{"class":149,"line":1967},[147,35363,35364],{"class":458},"       # 定义全连接层\n",[147,35366,35367,35369,35372,35374,35376,35378,35380,35382,35384,35386,35388,35391],{"class":149,"line":1972},[147,35368,31119],{"class":448},[147,35370,35371],{"class":157},".f1",[147,35373,445],{"class":397},[147,35375,31305],{"class":157},[147,35377,743],{"class":448},[147,35379,854],{"class":397},[147,35381,743],{"class":448},[147,35383,854],{"class":397},[147,35385,35144],{"class":448},[147,35387,777],{"class":157},[147,35389,35390],{"class":448},"4096",[147,35392,407],{"class":157},[147,35394,35395,35397,35400,35402,35404,35406,35408,35410],{"class":149,"line":2001},[147,35396,31119],{"class":448},[147,35398,35399],{"class":157},".f2",[147,35401,445],{"class":397},[147,35403,31305],{"class":157},[147,35405,35390],{"class":448},[147,35407,777],{"class":157},[147,35409,35390],{"class":448},[147,35411,407],{"class":157},[147,35413,35414,35416,35419,35421,35423,35425,35427,35429],{"class":149,"line":2006},[147,35415,31119],{"class":448},[147,35417,35418],{"class":157},".f3",[147,35420,445],{"class":397},[147,35422,31305],{"class":157},[147,35424,35390],{"class":448},[147,35426,777],{"class":157},[147,35428,845],{"class":448},[147,35430,407],{"class":157},[147,35432,35433],{"class":149,"line":2023},[147,35434,2674],{"emptyLinePlaceholder":324},[147,35436,35437],{"class":149,"line":2028},[147,35438,35439],{"class":458},"    # 定义前向传播\n",[147,35441,35442,35444,35446],{"class":149,"line":2033},[147,35443,31075],{"class":397},[147,35445,31367],{"class":2237},[147,35447,31370],{"class":157},[147,35449,35450,35452,35454,35456,35459,35461],{"class":149,"line":2038},[147,35451,31375],{"class":157},[147,35453,445],{"class":397},[147,35455,31097],{"class":448},[147,35457,35458],{"class":157},".ReLu(",[147,35460,31097],{"class":448},[147,35462,31387],{"class":157},[147,35464,35465,35467,35469,35471],{"class":149,"line":2052},[147,35466,31375],{"class":157},[147,35468,445],{"class":397},[147,35470,31097],{"class":448},[147,35472,31398],{"class":157},[147,35474,35475,35477,35479,35481,35483,35485],{"class":149,"line":2057},[147,35476,31375],{"class":157},[147,35478,445],{"class":397},[147,35480,31097],{"class":448},[147,35482,35458],{"class":157},[147,35484,31097],{"class":448},[147,35486,31413],{"class":157},[147,35488,35489,35491,35493,35495],{"class":149,"line":2851},[147,35490,31375],{"class":157},[147,35492,445],{"class":397},[147,35494,31097],{"class":448},[147,35496,31424],{"class":157},[147,35498,35499,35501,35503,35505,35507,35509],{"class":149,"line":2865},[147,35500,31375],{"class":157},[147,35502,445],{"class":397},[147,35504,31097],{"class":448},[147,35506,35458],{"class":157},[147,35508,31097],{"class":448},[147,35510,35511],{"class":157},".c5(x))\n",[147,35513,35514,35516,35518,35520,35522,35524],{"class":149,"line":2873},[147,35515,31375],{"class":157},[147,35517,445],{"class":397},[147,35519,31097],{"class":448},[147,35521,35458],{"class":157},[147,35523,31097],{"class":448},[147,35525,35526],{"class":157},".c6(x))\n",[147,35528,35529,35531,35533,35535,35537,35539],{"class":149,"line":2878},[147,35530,31375],{"class":157},[147,35532,445],{"class":397},[147,35534,31097],{"class":448},[147,35536,35458],{"class":157},[147,35538,31097],{"class":448},[147,35540,35541],{"class":157},".c7(x))\n",[147,35543,35544,35546,35548,35550],{"class":149,"line":2884},[147,35545,31375],{"class":157},[147,35547,445],{"class":397},[147,35549,31097],{"class":448},[147,35551,35552],{"class":157},".s8(x)\n",[147,35554,35555],{"class":149,"line":2890},[147,35556,2674],{"emptyLinePlaceholder":324},[147,35558,35559],{"class":149,"line":2895},[147,35560,35561],{"class":458},"        # 展平加线性全连接层\n",[147,35563,35564,35566,35568,35570],{"class":149,"line":8222},[147,35565,31375],{"class":157},[147,35567,445],{"class":397},[147,35569,31097],{"class":448},[147,35571,31435],{"class":157},[147,35573,35574,35576,35578,35580,35582,35584],{"class":149,"line":8246},[147,35575,31375],{"class":157},[147,35577,445],{"class":397},[147,35579,31097],{"class":448},[147,35581,35458],{"class":157},[147,35583,31097],{"class":448},[147,35585,35586],{"class":157},".f1(x))\n",[147,35588,35589],{"class":149,"line":8251},[147,35590,35591],{"class":458},"        # 还需要dropout对神经元随机进行失活\n",[147,35593,35594,35596,35598,35601,35604],{"class":149,"line":8257},[147,35595,31375],{"class":157},[147,35597,445],{"class":397},[147,35599,35600],{"class":157},"F.dropout(x,",[147,35602,35603],{"class":448},"0.5",[147,35605,407],{"class":157},[147,35607,35608,35610,35612,35614,35616,35618],{"class":149,"line":8284},[147,35609,31375],{"class":157},[147,35611,445],{"class":397},[147,35613,31097],{"class":448},[147,35615,35458],{"class":157},[147,35617,31097],{"class":448},[147,35619,35620],{"class":157},".f2(x))\n",[147,35622,35623,35625,35627,35629,35631],{"class":149,"line":8289},[147,35624,31375],{"class":157},[147,35626,445],{"class":397},[147,35628,35600],{"class":157},[147,35630,35603],{"class":448},[147,35632,407],{"class":157},[147,35634,35635],{"class":149,"line":8295},[147,35636,35637],{"class":458},"        # 直接输出\n",[147,35639,35640,35642,35644,35646],{"class":149,"line":8307},[147,35641,31375],{"class":157},[147,35643,445],{"class":397},[147,35645,31097],{"class":448},[147,35647,35648],{"class":157},".f3(x)\n",[147,35650,35651],{"class":149,"line":8319},[147,35652,35653],{"class":458},"        # 前向传播输出\n",[147,35655,35656,35658],{"class":149,"line":8331},[147,35657,15025],{"class":397},[147,35659,31483],{"class":157},[147,35661,35662],{"class":149,"line":9990},[147,35663,35664],{"class":458},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[147,35666,35667,35669,35671,35673,35675],{"class":149,"line":10015},[147,35668,1805],{"class":397},[147,35670,31494],{"class":448},[147,35672,3223],{"class":397},[147,35674,31499],{"class":504},[147,35676,4013],{"class":157},[147,35678,35679,35681,35683,35685,35687,35689,35691,35693,35695],{"class":149,"line":10038},[147,35680,31511],{"class":157},[147,35682,445],{"class":397},[147,35684,30725],{"class":157},[147,35686,31518],{"class":504},[147,35688,1978],{"class":397},[147,35690,31523],{"class":157},[147,35692,1975],{"class":397},[147,35694,30750],{"class":504},[147,35696,407],{"class":157},[147,35698,35699],{"class":149,"line":10062},[147,35700,35701],{"class":458},"    # 模型实例化，然后将实例化的模型放到设备中\n",[147,35703,35704,35706,35708],{"class":149,"line":10067},[147,35705,31563],{"class":157},[147,35707,445],{"class":397},[147,35709,35710],{"class":157},"AlexNet().to(device)\n",[147,35712,35713,35715,35717,35719,35721,35724,35726,35728],{"class":149,"line":10072},[147,35714,31573],{"class":448},[147,35716,31576],{"class":157},[147,35718,616],{"class":448},[147,35720,777],{"class":157},[147,35722,35723],{"class":448},"227",[147,35725,777],{"class":157},[147,35727,35723],{"class":448},[147,35729,31589],{"class":157},[350,35731,35732],{"start":312},[353,35733,31602],{},[138,35735,35737],{"className":30652,"code":35736,"language":30654,"meta":143,"style":143},"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",[51,35738,35739,35745,35751,35761,35767,35777,35787,35797,35807,35817,35821,35832,35842,35846,35850,35854,35862,35874,35884,35900,35910,35942,35956,35966,35976,35980,35990,36004,36014,36024,36034,36040,36044,36048,36052,36056,36060,36068,36088,36092,36096,36100,36104,36108,36124,36128,36132,36140,36144,36148,36156,36160,36164,36168,36176,36180,36184,36188,36192,36200,36204,36212,36216,36224,36228,36236,36240,36248,36252,36256,36264,36268,36272,36276,36288,36312,36326,36330,36334,36338,36346,36350,36358,36362,36370,36374,36382,36386,36394,36398,36406,36410,36422,36426,36434,36438,36446,36450,36454,36458,36462,36470,36474,36490,36494,36502,36506,36510,36514,36518,36522,36526,36530,36546,36550,36562,36566,36578,36582,36594,36598,36606,36610,36618,36622,36626,36631,36637,36641,36650,36654,36671,36675,36684,36688,36706,36719,36724,36737,36741,36745,36753,36757,36761,36769,36773,36781,36785,36793,36797,36801,36843,36885,36889,36893,36909,36913,36929,36933,36937,36945,36949,36953,36965,37003,37008,37013,37022,37026,37040,37050,37056,37062,37068,37074,37078,37082,37088,37092,37096,37104,37108,37126,37130,37134,37138,37154,37158,37162,37166,37170,37174,37194,37214,37218,37222,37226,37234,37242,37246,37262,37282,37302,37306,37310,37318,37326,37330,37334,37338,37350,37354,37364,37372,37389],{"__ignoreMap":143},[147,35740,35741,35743],{"class":149,"line":150},[147,35742,30666],{"class":397},[147,35744,32096],{"class":157},[147,35746,35747,35749],{"class":149,"line":312},[147,35748,30666],{"class":397},[147,35750,32103],{"class":157},[147,35752,35753,35755,35757,35759],{"class":149,"line":1454},[147,35754,30666],{"class":397},[147,35756,32114],{"class":157},[147,35758,31657],{"class":397},[147,35760,32119],{"class":157},[147,35762,35763,35765],{"class":149,"line":1469},[147,35764,30666],{"class":397},[147,35766,30669],{"class":157},[147,35768,35769,35771,35773,35775],{"class":149,"line":1475},[147,35770,31011],{"class":397},[147,35772,31689],{"class":157},[147,35774,30666],{"class":397},[147,35776,32136],{"class":157},[147,35778,35779,35781,35783,35785],{"class":149,"line":1489},[147,35780,31011],{"class":397},[147,35782,31642],{"class":157},[147,35784,30666],{"class":397},[147,35786,31647],{"class":157},[147,35788,35789,35791,35793,35795],{"class":149,"line":1495},[147,35790,31011],{"class":397},[147,35792,31672],{"class":157},[147,35794,30666],{"class":397},[147,35796,31677],{"class":157},[147,35798,35799,35801,35803,35805],{"class":149,"line":1586},[147,35800,30666],{"class":397},[147,35802,31689],{"class":157},[147,35804,31657],{"class":397},[147,35806,31694],{"class":157},[147,35808,35809,35811,35813,35815],{"class":149,"line":1592},[147,35810,30666],{"class":397},[147,35812,31706],{"class":157},[147,35814,31657],{"class":397},[147,35816,31711],{"class":157},[147,35818,35819],{"class":149,"line":1604},[147,35820,32181],{"class":458},[147,35822,35823,35825,35827,35829],{"class":149,"line":1886},[147,35824,31011],{"class":397},[147,35826,32188],{"class":157},[147,35828,30666],{"class":397},[147,35830,35831],{"class":157}," AlexNet\n",[147,35833,35834,35836,35838,35840],{"class":149,"line":1891},[147,35835,31011],{"class":397},[147,35837,31014],{"class":157},[147,35839,30666],{"class":397},[147,35841,31019],{"class":157},[147,35843,35844],{"class":149,"line":1897},[147,35845,2674],{"emptyLinePlaceholder":324},[147,35847,35848],{"class":149,"line":1902},[147,35849,2674],{"emptyLinePlaceholder":324},[147,35851,35852],{"class":149,"line":1916},[147,35853,32216],{"class":458},[147,35855,35856,35858,35860],{"class":149,"line":1921},[147,35857,32221],{"class":397},[147,35859,32224],{"class":2237},[147,35861,32227],{"class":157},[147,35863,35864,35866,35868,35870,35872],{"class":149,"line":1927},[147,35865,32232],{"class":157},[147,35867,445],{"class":397},[147,35869,31729],{"class":157},[147,35871,31737],{"class":504},[147,35873,31740],{"class":157},[147,35875,35876,35878,35880,35882],{"class":149,"line":1948},[147,35877,32245],{"class":5490},[147,35879,445],{"class":397},[147,35881,31750],{"class":448},[147,35883,31740],{"class":157},[147,35885,35886,35888,35890,35892,35894,35896,35898],{"class":149,"line":1953},[147,35887,32256],{"class":5490},[147,35889,445],{"class":397},[147,35891,31767],{"class":157},[147,35893,31770],{"class":5490},[147,35895,445],{"class":397},[147,35897,35723],{"class":448},[147,35899,31778],{"class":157},[147,35901,35902,35904,35906,35908],{"class":149,"line":1967},[147,35903,32273],{"class":5490},[147,35905,445],{"class":397},[147,35907,31750],{"class":448},[147,35909,407],{"class":157},[147,35911,35912,35914,35916,35918,35920,35922,35924,35926,35928,35930,35932,35934,35936,35938,35940],{"class":149,"line":1972},[147,35913,32284],{"class":157},[147,35915,445],{"class":397},[147,35917,32289],{"class":157},[147,35919,32292],{"class":448},[147,35921,401],{"class":157},[147,35923,32297],{"class":448},[147,35925,854],{"class":397},[147,35927,7632],{"class":448},[147,35929,32304],{"class":157},[147,35931,32292],{"class":448},[147,35933,401],{"class":157},[147,35935,32311],{"class":448},[147,35937,854],{"class":397},[147,35939,7632],{"class":448},[147,35941,32318],{"class":157},[147,35943,35944,35946,35948,35950,35952,35954],{"class":149,"line":2001},[147,35945,32323],{"class":157},[147,35947,445],{"class":397},[147,35949,32328],{"class":157},[147,35951,31811],{"class":5490},[147,35953,445],{"class":397},[147,35955,31816],{"class":157},[147,35957,35958,35960,35962,35964],{"class":149,"line":2006},[147,35959,32339],{"class":5490},[147,35961,445],{"class":397},[147,35963,32344],{"class":448},[147,35965,31740],{"class":157},[147,35967,35968,35970,35972,35974],{"class":149,"line":2023},[147,35969,32351],{"class":5490},[147,35971,445],{"class":397},[147,35973,31750],{"class":448},[147,35975,31740],{"class":157},[147,35977,35978],{"class":149,"line":2028},[147,35979,32362],{"class":458},[147,35981,35982,35984,35986,35988],{"class":149,"line":2033},[147,35983,32367],{"class":5490},[147,35985,445],{"class":397},[147,35987,794],{"class":448},[147,35989,407],{"class":157},[147,35991,35992,35994,35996,35998,36000,36002],{"class":149,"line":2038},[147,35993,32378],{"class":157},[147,35995,445],{"class":397},[147,35997,31808],{"class":157},[147,35999,31811],{"class":5490},[147,36001,445],{"class":397},[147,36003,32389],{"class":157},[147,36005,36006,36008,36010,36012],{"class":149,"line":2052},[147,36007,32394],{"class":5490},[147,36009,445],{"class":397},[147,36011,32344],{"class":448},[147,36013,31740],{"class":157},[147,36015,36016,36018,36020,36022],{"class":149,"line":2057},[147,36017,32405],{"class":5490},[147,36019,445],{"class":397},[147,36021,31750],{"class":448},[147,36023,31740],{"class":157},[147,36025,36026,36028,36030,36032],{"class":149,"line":2851},[147,36027,32416],{"class":5490},[147,36029,445],{"class":397},[147,36031,794],{"class":448},[147,36033,407],{"class":157},[147,36035,36036,36038],{"class":149,"line":2865},[147,36037,4364],{"class":397},[147,36039,32429],{"class":157},[147,36041,36042],{"class":149,"line":2873},[147,36043,2674],{"emptyLinePlaceholder":324},[147,36045,36046],{"class":149,"line":2878},[147,36047,32438],{"class":458},[147,36049,36050],{"class":149,"line":2884},[147,36051,32443],{"class":458},[147,36053,36054],{"class":149,"line":2890},[147,36055,2674],{"emptyLinePlaceholder":324},[147,36057,36058],{"class":149,"line":2895},[147,36059,32452],{"class":458},[147,36061,36062,36064,36066],{"class":149,"line":8222},[147,36063,32221],{"class":397},[147,36065,32459],{"class":2237},[147,36067,32462],{"class":157},[147,36069,36070,36072,36074,36076,36078,36080,36082,36084,36086],{"class":149,"line":8246},[147,36071,31511],{"class":157},[147,36073,445],{"class":397},[147,36075,30725],{"class":157},[147,36077,31518],{"class":504},[147,36079,1978],{"class":397},[147,36081,31523],{"class":157},[147,36083,1975],{"class":397},[147,36085,32481],{"class":504},[147,36087,407],{"class":157},[147,36089,36090],{"class":149,"line":8251},[147,36091,2674],{"emptyLinePlaceholder":324},[147,36093,36094],{"class":149,"line":8257},[147,36095,2674],{"emptyLinePlaceholder":324},[147,36097,36098],{"class":149,"line":8284},[147,36099,32496],{"class":458},[147,36101,36102],{"class":149,"line":8289},[147,36103,32501],{"class":458},[147,36105,36106],{"class":149,"line":8295},[147,36107,32506],{"class":458},[147,36109,36110,36112,36114,36116,36118,36120,36122],{"class":149,"line":8307},[147,36111,32511],{"class":157},[147,36113,445],{"class":397},[147,36115,32516],{"class":157},[147,36117,32519],{"class":5490},[147,36119,445],{"class":397},[147,36121,32524],{"class":448},[147,36123,407],{"class":157},[147,36125,36126],{"class":149,"line":8319},[147,36127,2674],{"emptyLinePlaceholder":324},[147,36129,36130],{"class":149,"line":8331},[147,36131,32535],{"class":458},[147,36133,36134,36136,36138],{"class":149,"line":9990},[147,36135,32540],{"class":157},[147,36137,445],{"class":397},[147,36139,32545],{"class":157},[147,36141,36142],{"class":149,"line":10015},[147,36143,2674],{"emptyLinePlaceholder":324},[147,36145,36146],{"class":149,"line":10038},[147,36147,32554],{"class":458},[147,36149,36150,36152,36154],{"class":149,"line":10062},[147,36151,31563],{"class":157},[147,36153,445],{"class":397},[147,36155,32563],{"class":157},[147,36157,36158],{"class":149,"line":10067},[147,36159,32568],{"class":458},[147,36161,36162],{"class":149,"line":10072},[147,36163,32573],{"class":458},[147,36165,36166],{"class":149,"line":10077},[147,36167,32578],{"class":458},[147,36169,36170,36172,36174],{"class":149,"line":10086},[147,36171,32583],{"class":157},[147,36173,445],{"class":397},[147,36175,32588],{"class":157},[147,36177,36178],{"class":149,"line":10091},[147,36179,2674],{"emptyLinePlaceholder":324},[147,36181,36182],{"class":149,"line":10097},[147,36183,2674],{"emptyLinePlaceholder":324},[147,36185,36186],{"class":149,"line":10118},[147,36187,32601],{"class":458},[147,36189,36190],{"class":149,"line":10124},[147,36191,32606],{"class":458},[147,36193,36194,36196,36198],{"class":149,"line":10138},[147,36195,32611],{"class":157},[147,36197,445],{"class":397},[147,36199,32616],{"class":448},[147,36201,36202],{"class":149,"line":10144},[147,36203,32621],{"class":458},[147,36205,36206,36208,36210],{"class":149,"line":10171},[147,36207,32626],{"class":157},[147,36209,445],{"class":397},[147,36211,32631],{"class":157},[147,36213,36214],{"class":149,"line":10180},[147,36215,32636],{"class":458},[147,36217,36218,36220,36222],{"class":149,"line":10186},[147,36219,32641],{"class":157},[147,36221,445],{"class":397},[147,36223,32631],{"class":157},[147,36225,36226],{"class":149,"line":10194},[147,36227,32650],{"class":458},[147,36229,36230,36232,36234],{"class":149,"line":10199},[147,36231,32655],{"class":157},[147,36233,445],{"class":397},[147,36235,32631],{"class":157},[147,36237,36238],{"class":149,"line":16877},[147,36239,32664],{"class":458},[147,36241,36242,36244,36246],{"class":149,"line":16883},[147,36243,32669],{"class":157},[147,36245,445],{"class":397},[147,36247,32631],{"class":157},[147,36249,36250],{"class":149,"line":16906},[147,36251,2674],{"emptyLinePlaceholder":324},[147,36253,36254],{"class":149,"line":16912},[147,36255,32682],{"class":458},[147,36257,36258,36260,36262],{"class":149,"line":16935},[147,36259,32687],{"class":157},[147,36261,445],{"class":397},[147,36263,32692],{"class":157},[147,36265,36266],{"class":149,"line":16949},[147,36267,2674],{"emptyLinePlaceholder":324},[147,36269,36270],{"class":149,"line":16969},[147,36271,2674],{"emptyLinePlaceholder":324},[147,36273,36274],{"class":149,"line":16975},[147,36275,32705],{"class":458},[147,36277,36278,36280,36282,36284,36286],{"class":149,"line":16986},[147,36279,3475],{"class":397},[147,36281,32712],{"class":157},[147,36283,26317],{"class":397},[147,36285,32717],{"class":448},[147,36287,32720],{"class":157},[147,36289,36290,36292,36294,36296,36298,36300,36302,36304,36306,36308,36310],{"class":149,"line":17009},[147,36291,32725],{"class":448},[147,36293,401],{"class":157},[147,36295,32730],{"class":504},[147,36297,32733],{"class":448},[147,36299,983],{"class":504},[147,36301,32733],{"class":448},[147,36303,650],{"class":504},[147,36305,32742],{"class":157},[147,36307,931],{"class":397},[147,36309,616],{"class":448},[147,36311,30771],{"class":157},[147,36313,36314,36316,36318,36320,36322,36324],{"class":149,"line":17031},[147,36315,32725],{"class":448},[147,36317,401],{"class":157},[147,36319,32757],{"class":504},[147,36321,854],{"class":397},[147,36323,845],{"class":448},[147,36325,407],{"class":157},[147,36327,36328],{"class":149,"line":17036},[147,36329,2674],{"emptyLinePlaceholder":324},[147,36331,36332],{"class":149,"line":17042},[147,36333,32772],{"class":458},[147,36335,36336],{"class":149,"line":17056},[147,36337,32777],{"class":458},[147,36339,36340,36342,36344],{"class":149,"line":17069},[147,36341,32782],{"class":157},[147,36343,445],{"class":397},[147,36345,32616],{"class":448},[147,36347,36348],{"class":149,"line":17074},[147,36349,32791],{"class":458},[147,36351,36352,36354,36356],{"class":149,"line":17088},[147,36353,32796],{"class":157},[147,36355,445],{"class":397},[147,36357,3359],{"class":448},[147,36359,36360],{"class":149,"line":17093},[147,36361,32805],{"class":458},[147,36363,36364,36366,36368],{"class":149,"line":17099},[147,36365,32810],{"class":157},[147,36367,445],{"class":397},[147,36369,32616],{"class":448},[147,36371,36372],{"class":149,"line":17104},[147,36373,32819],{"class":458},[147,36375,36376,36378,36380],{"class":149,"line":17118},[147,36377,32824],{"class":157},[147,36379,445],{"class":397},[147,36381,3359],{"class":448},[147,36383,36384],{"class":149,"line":17123},[147,36385,32833],{"class":458},[147,36387,36388,36390,36392],{"class":149,"line":17128},[147,36389,32838],{"class":157},[147,36391,445],{"class":397},[147,36393,3359],{"class":448},[147,36395,36396],{"class":149,"line":17142},[147,36397,32847],{"class":458},[147,36399,36400,36402,36404],{"class":149,"line":17154},[147,36401,32852],{"class":157},[147,36403,445],{"class":397},[147,36405,3359],{"class":448},[147,36407,36408],{"class":149,"line":17159},[147,36409,32861],{"class":458},[147,36411,36412,36414,36416,36418,36420],{"class":149,"line":17172},[147,36413,3677],{"class":397},[147,36415,31875],{"class":157},[147,36417,26317],{"class":397},[147,36419,31880],{"class":448},[147,36421,32874],{"class":157},[147,36423,36424],{"class":149,"line":17177},[147,36425,32879],{"class":458},[147,36427,36428,36430,36432],{"class":149,"line":17182},[147,36429,32884],{"class":157},[147,36431,445],{"class":397},[147,36433,32889],{"class":157},[147,36435,36436],{"class":149,"line":17187},[147,36437,32894],{"class":458},[147,36439,36440,36442,36444],{"class":149,"line":17200},[147,36441,32899],{"class":157},[147,36443,445],{"class":397},[147,36445,32904],{"class":157},[147,36447,36448],{"class":149,"line":17205},[147,36449,32910],{"class":458},[147,36451,36452],{"class":149,"line":32907},[147,36453,32916],{"class":157},[147,36455,36456],{"class":149,"line":32913},[147,36457,32922],{"class":458},[147,36459,36460],{"class":149,"line":32919},[147,36461,32928],{"class":458},[147,36463,36464,36466,36468],{"class":149,"line":32925},[147,36465,32934],{"class":157},[147,36467,445],{"class":397},[147,36469,32939],{"class":157},[147,36471,36472],{"class":149,"line":32931},[147,36473,32945],{"class":458},[147,36475,36476,36478,36480,36482,36484,36486,36488],{"class":149,"line":32942},[147,36477,32951],{"class":157},[147,36479,445],{"class":397},[147,36481,32956],{"class":157},[147,36483,32959],{"class":5490},[147,36485,445],{"class":397},[147,36487,616],{"class":448},[147,36489,407],{"class":157},[147,36491,36492],{"class":149,"line":32948},[147,36493,32971],{"class":458},[147,36495,36496,36498,36500],{"class":149,"line":32968},[147,36497,32977],{"class":157},[147,36499,445],{"class":397},[147,36501,32982],{"class":157},[147,36503,36504],{"class":149,"line":32974},[147,36505,32988],{"class":458},[147,36507,36508],{"class":149,"line":32985},[147,36509,32994],{"class":157},[147,36511,36512],{"class":149,"line":32991},[147,36513,33000],{"class":458},[147,36515,36516],{"class":149,"line":32997},[147,36517,33006],{"class":157},[147,36519,36520],{"class":149,"line":33003},[147,36521,33012],{"class":458},[147,36523,36524],{"class":149,"line":33009},[147,36525,33018],{"class":157},[147,36527,36528],{"class":149,"line":33015},[147,36529,33024],{"class":458},[147,36531,36532,36534,36536,36538,36540,36542,36544],{"class":149,"line":33021},[147,36533,33030],{"class":157},[147,36535,9751],{"class":397},[147,36537,33035],{"class":157},[147,36539,854],{"class":397},[147,36541,33040],{"class":157},[147,36543,590],{"class":448},[147,36545,407],{"class":157},[147,36547,36548],{"class":149,"line":33027},[147,36549,33050],{"class":458},[147,36551,36552,36554,36556,36558,36560],{"class":149,"line":33047},[147,36553,33056],{"class":157},[147,36555,9751],{"class":397},[147,36557,33061],{"class":157},[147,36559,3223],{"class":397},[147,36561,33066],{"class":157},[147,36563,36564],{"class":149,"line":33053},[147,36565,33072],{"class":458},[147,36567,36568,36570,36572,36574,36576],{"class":149,"line":33069},[147,36569,33078],{"class":157},[147,36571,9751],{"class":397},[147,36573,33040],{"class":157},[147,36575,590],{"class":448},[147,36577,407],{"class":157},[147,36579,36580],{"class":149,"line":33075},[147,36581,33092],{"class":458},[147,36583,36584,36586,36588,36590,36592],{"class":149,"line":33089},[147,36585,3677],{"class":397},[147,36587,33100],{"class":157},[147,36589,26317],{"class":397},[147,36591,31880],{"class":448},[147,36593,33107],{"class":157},[147,36595,36596],{"class":149,"line":33095},[147,36597,33113],{"class":458},[147,36599,36600,36602,36604],{"class":149,"line":33110},[147,36601,32884],{"class":157},[147,36603,445],{"class":397},[147,36605,32889],{"class":157},[147,36607,36608],{"class":149,"line":33116},[147,36609,33128],{"class":458},[147,36611,36612,36614,36616],{"class":149,"line":33125},[147,36613,32899],{"class":157},[147,36615,445],{"class":397},[147,36617,32904],{"class":157},[147,36619,36620],{"class":149,"line":33131},[147,36621,33143],{"class":458},[147,36623,36624],{"class":149,"line":33140},[147,36625,33149],{"class":157},[147,36627,36628],{"class":149,"line":33146},[147,36629,36630],{"class":458},"            # 验证时不计算梯度以节省内存\u002F计算\n",[147,36632,36633,36635],{"class":149,"line":33152},[147,36634,33155],{"class":397},[147,36636,33158],{"class":157},[147,36638,36639],{"class":149,"line":33161},[147,36640,33164],{"class":458},[147,36642,36643,36646,36648],{"class":149,"line":33167},[147,36644,36645],{"class":157},"                output",[147,36647,445],{"class":397},[147,36649,32939],{"class":157},[147,36651,36652],{"class":149,"line":33178},[147,36653,33181],{"class":458},[147,36655,36656,36659,36661,36663,36665,36667,36669],{"class":149,"line":33184},[147,36657,36658],{"class":157},"                pre_lab",[147,36660,445],{"class":397},[147,36662,32956],{"class":157},[147,36664,32959],{"class":5490},[147,36666,445],{"class":397},[147,36668,616],{"class":448},[147,36670,407],{"class":157},[147,36672,36673],{"class":149,"line":33203},[147,36674,33206],{"class":458},[147,36676,36677,36680,36682],{"class":149,"line":33209},[147,36678,36679],{"class":157},"                val_batch_loss",[147,36681,445],{"class":397},[147,36683,32982],{"class":157},[147,36685,36686],{"class":149,"line":33220},[147,36687,33223],{"class":458},[147,36689,36690,36693,36695,36698,36700,36702,36704],{"class":149,"line":33226},[147,36691,36692],{"class":157},"                val_loss",[147,36694,9751],{"class":397},[147,36696,36697],{"class":157},"val_batch_loss.item()",[147,36699,854],{"class":397},[147,36701,33040],{"class":157},[147,36703,590],{"class":448},[147,36705,407],{"class":157},[147,36707,36708,36711,36713,36715,36717],{"class":149,"line":33246},[147,36709,36710],{"class":157},"                val_corrects",[147,36712,9751],{"class":397},[147,36714,33061],{"class":157},[147,36716,3223],{"class":397},[147,36718,33066],{"class":157},[147,36720,36721],{"class":149,"line":33262},[147,36722,36723],{"class":458},"            # 当前用于验证的样本数量\n",[147,36725,36726,36729,36731,36733,36735],{"class":149,"line":33268},[147,36727,36728],{"class":157},"            val_num",[147,36730,9751],{"class":397},[147,36732,33040],{"class":157},[147,36734,590],{"class":448},[147,36736,407],{"class":157},[147,36738,36739],{"class":149,"line":33282},[147,36740,33285],{"class":458},[147,36742,36743],{"class":149,"line":33288},[147,36744,33291],{"class":458},[147,36746,36747,36749,36751],{"class":149,"line":33294},[147,36748,33297],{"class":157},[147,36750,983],{"class":397},[147,36752,33302],{"class":157},[147,36754,36755],{"class":149,"line":33305},[147,36756,33308],{"class":458},[147,36758,36759],{"class":149,"line":33311},[147,36760,33314],{"class":458},[147,36762,36763,36765,36767],{"class":149,"line":33317},[147,36764,33320],{"class":157},[147,36766,983],{"class":397},[147,36768,33302],{"class":157},[147,36770,36771],{"class":149,"line":33327},[147,36772,33330],{"class":458},[147,36774,36775,36777,36779],{"class":149,"line":33333},[147,36776,33336],{"class":157},[147,36778,983],{"class":397},[147,36780,33341],{"class":157},[147,36782,36783],{"class":149,"line":33344},[147,36784,33347],{"class":458},[147,36786,36787,36789,36791],{"class":149,"line":33350},[147,36788,33353],{"class":157},[147,36790,983],{"class":397},[147,36792,33341],{"class":157},[147,36794,36795],{"class":149,"line":33360},[147,36796,2674],{"emptyLinePlaceholder":324},[147,36798,36799],{"class":149,"line":33365},[147,36800,33368],{"class":458},[147,36802,36803,36805,36807,36809,36811,36813,36815,36817,36819,36821,36823,36825,36827,36829,36831,36833,36835,36837,36839,36841],{"class":149,"line":33371},[147,36804,32725],{"class":448},[147,36806,401],{"class":157},[147,36808,3866],{"class":504},[147,36810,32733],{"class":448},[147,36812,33382],{"class":504},[147,36814,1295],{"class":448},[147,36816,33387],{"class":397},[147,36818,1345],{"class":448},[147,36820,33392],{"class":504},[147,36822,1295],{"class":448},[147,36824,33387],{"class":397},[147,36826,1345],{"class":448},[147,36828,3866],{"class":504},[147,36830,33403],{"class":157},[147,36832,931],{"class":397},[147,36834,616],{"class":448},[147,36836,33410],{"class":157},[147,36838,931],{"class":397},[147,36840,616],{"class":448},[147,36842,33417],{"class":157},[147,36844,36845,36847,36849,36851,36853,36855,36857,36859,36861,36863,36865,36867,36869,36871,36873,36875,36877,36879,36881,36883],{"class":149,"line":33420},[147,36846,32725],{"class":448},[147,36848,401],{"class":157},[147,36850,3866],{"class":504},[147,36852,32733],{"class":448},[147,36854,33431],{"class":504},[147,36856,1295],{"class":448},[147,36858,33387],{"class":397},[147,36860,1345],{"class":448},[147,36862,33440],{"class":504},[147,36864,1295],{"class":448},[147,36866,33387],{"class":397},[147,36868,1345],{"class":448},[147,36870,3866],{"class":504},[147,36872,33451],{"class":157},[147,36874,931],{"class":397},[147,36876,616],{"class":448},[147,36878,33458],{"class":157},[147,36880,931],{"class":397},[147,36882,616],{"class":448},[147,36884,33417],{"class":157},[147,36886,36887],{"class":149,"line":33467},[147,36888,2674],{"emptyLinePlaceholder":324},[147,36890,36891],{"class":149,"line":33472},[147,36892,33475],{"class":458},[147,36894,36895,36897,36899,36901,36903,36905,36907],{"class":149,"line":33478},[147,36896,2771],{"class":397},[147,36898,33483],{"class":157},[147,36900,931],{"class":397},[147,36902,616],{"class":448},[147,36904,1339],{"class":157},[147,36906,1359],{"class":397},[147,36908,33494],{"class":157},[147,36910,36911],{"class":149,"line":33497},[147,36912,33500],{"class":458},[147,36914,36915,36917,36919,36921,36923,36925,36927],{"class":149,"line":33503},[147,36916,33506],{"class":157},[147,36918,439],{"class":448},[147,36920,445],{"class":397},[147,36922,33513],{"class":157},[147,36924,931],{"class":397},[147,36926,616],{"class":448},[147,36928,33520],{"class":157},[147,36930,36931],{"class":149,"line":33523},[147,36932,33526],{"class":458},[147,36934,36935],{"class":149,"line":33529},[147,36936,33532],{"class":458},[147,36938,36939,36941,36943],{"class":149,"line":33535},[147,36940,33538],{"class":157},[147,36942,445],{"class":397},[147,36944,32588],{"class":157},[147,36946,36947],{"class":149,"line":33545},[147,36948,2674],{"emptyLinePlaceholder":324},[147,36950,36951],{"class":149,"line":33550},[147,36952,33553],{"class":458},[147,36954,36955,36957,36959,36961,36963],{"class":149,"line":33556},[147,36956,33559],{"class":157},[147,36958,445],{"class":397},[147,36960,33564],{"class":157},[147,36962,931],{"class":397},[147,36964,33569],{"class":157},[147,36966,36967,36969,36971,36973,36975,36977,36979,36981,36983,36985,36987,36989,36991,36993,36995,36997,36999,37001],{"class":149,"line":33572},[147,36968,32725],{"class":448},[147,36970,401],{"class":157},[147,36972,33579],{"class":504},[147,36974,1295],{"class":448},[147,36976,33584],{"class":397},[147,36978,1345],{"class":448},[147,36980,943],{"class":504},[147,36982,1295],{"class":448},[147,36984,33584],{"class":397},[147,36986,1345],{"class":448},[147,36988,33597],{"class":504},[147,36990,33600],{"class":157},[147,36992,33603],{"class":397},[147,36994,1306],{"class":448},[147,36996,33608],{"class":157},[147,36998,727],{"class":397},[147,37000,1306],{"class":448},[147,37002,30771],{"class":157},[147,37004,37005],{"class":149,"line":33617},[147,37006,37007],{"class":458},"    # 选择最优参数并保存\n",[147,37009,37010],{"class":149,"line":33623},[147,37011,37012],{"class":458},"    # 保存最佳模型权重字典\n",[147,37014,37015,37018,37020],{"class":149,"line":33629},[147,37016,37017],{"class":157},"    torch.save(best_model_wts,",[147,37019,33641],{"class":504},[147,37021,407],{"class":157},[147,37023,37024],{"class":149,"line":33635},[147,37025,33661],{"class":458},[147,37027,37028,37030,37032,37034,37036,37038],{"class":149,"line":33646},[147,37029,33667],{"class":157},[147,37031,445],{"class":397},[147,37033,33672],{"class":157},[147,37035,33675],{"class":5490},[147,37037,445],{"class":397},[147,37039,1820],{"class":157},[147,37041,37042,37044,37046,37048],{"class":149,"line":33652},[147,37043,33685],{"class":504},[147,37045,1258],{"class":157},[147,37047,33690],{"class":448},[147,37049,33693],{"class":157},[147,37051,37052,37054],{"class":149,"line":33658},[147,37053,33699],{"class":504},[147,37055,33702],{"class":157},[147,37057,37058,37060],{"class":149,"line":33664},[147,37059,33708],{"class":504},[147,37061,33711],{"class":157},[147,37063,37064,37066],{"class":149,"line":33682},[147,37065,33717],{"class":504},[147,37067,33720],{"class":157},[147,37069,37070,37072],{"class":149,"line":33696},[147,37071,33726],{"class":504},[147,37073,33729],{"class":157},[147,37075,37076],{"class":149,"line":33705},[147,37077,33735],{"class":157},[147,37079,37080],{"class":149,"line":33714},[147,37081,33741],{"class":458},[147,37083,37084,37086],{"class":149,"line":33723},[147,37085,4364],{"class":397},[147,37087,33749],{"class":157},[147,37089,37090],{"class":149,"line":33732},[147,37091,2674],{"emptyLinePlaceholder":324},[147,37093,37094],{"class":149,"line":33738},[147,37095,33760],{"class":458},[147,37097,37098,37100,37102],{"class":149,"line":33744},[147,37099,32221],{"class":397},[147,37101,33768],{"class":2237},[147,37103,33771],{"class":157},[147,37105,37106],{"class":149,"line":33752},[147,37107,33777],{"class":458},[147,37109,37110,37112,37114,37116,37118,37120,37122,37124],{"class":149,"line":33757},[147,37111,33783],{"class":157},[147,37113,31967],{"class":5490},[147,37115,445],{"class":397},[147,37117,401],{"class":157},[147,37119,897],{"class":448},[147,37121,777],{"class":157},[147,37123,692],{"class":448},[147,37125,30771],{"class":157},[147,37127,37128],{"class":149,"line":33763},[147,37129,33803],{"class":458},[147,37131,37132],{"class":149,"line":33774},[147,37133,33809],{"class":458},[147,37135,37136],{"class":149,"line":33780},[147,37137,33815],{"class":458},[147,37139,37140,37142,37144,37146,37148,37150,37152],{"class":149,"line":33800},[147,37141,32001],{"class":157},[147,37143,616],{"class":448},[147,37145,777],{"class":157},[147,37147,477],{"class":448},[147,37149,777],{"class":157},[147,37151,616],{"class":448},[147,37153,407],{"class":157},[147,37155,37156],{"class":149,"line":33806},[147,37157,33838],{"class":458},[147,37159,37160],{"class":149,"line":33812},[147,37161,33844],{"class":458},[147,37163,37164],{"class":149,"line":33818},[147,37165,33850],{"class":458},[147,37167,37168],{"class":149,"line":33835},[147,37169,33856],{"class":458},[147,37171,37172],{"class":149,"line":33841},[147,37173,33862],{"class":458},[147,37175,37176,37178,37180,37182,37184,37186,37188,37190,37192],{"class":149,"line":33847},[147,37177,33868],{"class":157},[147,37179,33871],{"class":504},[147,37181,33874],{"class":157},[147,37183,33877],{"class":504},[147,37185,777],{"class":157},[147,37187,33882],{"class":5490},[147,37189,445],{"class":397},[147,37191,33887],{"class":504},[147,37193,407],{"class":157},[147,37195,37196,37198,37200,37202,37204,37206,37208,37210,37212],{"class":149,"line":33853},[147,37197,33868],{"class":157},[147,37199,33871],{"class":504},[147,37201,33899],{"class":157},[147,37203,33902],{"class":504},[147,37205,777],{"class":157},[147,37207,33882],{"class":5490},[147,37209,445],{"class":397},[147,37211,33911],{"class":504},[147,37213,407],{"class":157},[147,37215,37216],{"class":149,"line":33859},[147,37217,33919],{"class":458},[147,37219,37220],{"class":149,"line":33865},[147,37221,33925],{"class":157},[147,37223,37224],{"class":149,"line":33892},[147,37225,33931],{"class":458},[147,37227,37228,37230,37232],{"class":149,"line":33916},[147,37229,33937],{"class":157},[147,37231,33940],{"class":504},[147,37233,407],{"class":157},[147,37235,37236,37238,37240],{"class":149,"line":33922},[147,37237,33948],{"class":157},[147,37239,33951],{"class":504},[147,37241,407],{"class":157},[147,37243,37244],{"class":149,"line":33928},[147,37245,33959],{"class":458},[147,37247,37248,37250,37252,37254,37256,37258,37260],{"class":149,"line":33934},[147,37249,32001],{"class":157},[147,37251,616],{"class":448},[147,37253,777],{"class":157},[147,37255,477],{"class":448},[147,37257,777],{"class":157},[147,37259,477],{"class":448},[147,37261,407],{"class":157},[147,37263,37264,37266,37268,37270,37272,37274,37276,37278,37280],{"class":149,"line":33945},[147,37265,33868],{"class":157},[147,37267,33871],{"class":504},[147,37269,33986],{"class":157},[147,37271,33877],{"class":504},[147,37273,777],{"class":157},[147,37275,33882],{"class":5490},[147,37277,445],{"class":397},[147,37279,33997],{"class":504},[147,37281,407],{"class":157},[147,37283,37284,37286,37288,37290,37292,37294,37296,37298,37300],{"class":149,"line":33956},[147,37285,33868],{"class":157},[147,37287,33871],{"class":504},[147,37289,34009],{"class":157},[147,37291,33902],{"class":504},[147,37293,777],{"class":157},[147,37295,33882],{"class":5490},[147,37297,445],{"class":397},[147,37299,34020],{"class":504},[147,37301,407],{"class":157},[147,37303,37304],{"class":149,"line":33962},[147,37305,34028],{"class":458},[147,37307,37308],{"class":149,"line":33979},[147,37309,33925],{"class":157},[147,37311,37312,37314,37316],{"class":149,"line":34002},[147,37313,33937],{"class":157},[147,37315,33871],{"class":504},[147,37317,407],{"class":157},[147,37319,37320,37322,37324],{"class":149,"line":34025},[147,37321,33948],{"class":157},[147,37323,34050],{"class":504},[147,37325,407],{"class":157},[147,37327,37328],{"class":149,"line":34031},[147,37329,34058],{"class":157},[147,37331,37332],{"class":149,"line":34036},[147,37333,2674],{"emptyLinePlaceholder":324},[147,37335,37336],{"class":149,"line":34045},[147,37337,34069],{"class":458},[147,37339,37340,37342,37344,37346,37348],{"class":149,"line":34055},[147,37341,1805],{"class":397},[147,37343,31494],{"class":448},[147,37345,3223],{"class":397},[147,37347,31499],{"class":504},[147,37349,4013],{"class":157},[147,37351,37352],{"class":149,"line":34061},[147,37353,34088],{"class":458},[147,37355,37356,37359,37361],{"class":149,"line":34066},[147,37357,37358],{"class":157},"    AlexNet",[147,37360,445],{"class":397},[147,37362,37363],{"class":157},"AlexNet()\n",[147,37365,37366,37368,37370],{"class":149,"line":34072},[147,37367,34105],{"class":157},[147,37369,445],{"class":397},[147,37371,34110],{"class":157},[147,37373,37374,37376,37378,37381,37383,37385,37387],{"class":149,"line":34085},[147,37375,33667],{"class":157},[147,37377,445],{"class":397},[147,37379,37380],{"class":157},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[147,37382,34123],{"class":5490},[147,37384,445],{"class":397},[147,37386,1099],{"class":448},[147,37388,407],{"class":157},[147,37390,37391],{"class":149,"line":34091},[147,37392,34135],{"class":157},[350,37394,37395],{"start":1454},[353,37396,34148],{},[138,37398,37400],{"className":30652,"code":37399,"language":30654,"meta":143,"style":143},"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",[51,37401,37402,37408,37418,37428,37438,37442,37452,37462,37473,37477,37481,37485,37493,37509,37519,37535,37545,37559,37563,37573,37583,37593,37599,37603,37607,37615,37619,37635,37643,37647,37651,37659,37667,37671,37675,37679,37683,37689,37693,37703,37711,37719,37723,37727,37731,37739,37743,37759,37763,37767,37771,37783,37787,37799,37803,37807,37819,37823,37833,37837,37841,37853,37857,37865,37869,37873,37881,37885,37893,37897,37901,37905,37909,37913,37929,37937,37941,37945,37993,37999,38003,38013,38021,38029,38033,38037,38041,38045,38053,38057,38073,38077,38085,38093],{"__ignoreMap":143},[147,37403,37404,37406],{"class":149,"line":150},[147,37405,30666],{"class":397},[147,37407,30669],{"class":157},[147,37409,37410,37412,37414,37416],{"class":149,"line":312},[147,37411,30666],{"class":397},[147,37413,31689],{"class":157},[147,37415,31657],{"class":397},[147,37417,31694],{"class":157},[147,37419,37420,37422,37424,37426],{"class":149,"line":1454},[147,37421,31011],{"class":397},[147,37423,34176],{"class":157},[147,37425,30666],{"class":397},[147,37427,34181],{"class":157},[147,37429,37430,37432,37434,37436],{"class":149,"line":1469},[147,37431,31011],{"class":397},[147,37433,31672],{"class":157},[147,37435,30666],{"class":397},[147,37437,31677],{"class":157},[147,37439,37440],{"class":149,"line":1475},[147,37441,34196],{"class":458},[147,37443,37444,37446,37448,37450],{"class":149,"line":1489},[147,37445,31011],{"class":397},[147,37447,31642],{"class":157},[147,37449,30666],{"class":397},[147,37451,31647],{"class":157},[147,37453,37454,37456,37458,37460],{"class":149,"line":1495},[147,37455,31011],{"class":397},[147,37457,32188],{"class":157},[147,37459,30666],{"class":397},[147,37461,35831],{"class":157},[147,37463,37464,37466,37469,37471],{"class":149,"line":1586},[147,37465,31011],{"class":397},[147,37467,37468],{"class":157}," 练习.AlexNet.model ",[147,37470,30666],{"class":397},[147,37472,35831],{"class":157},[147,37474,37475],{"class":149,"line":1592},[147,37476,2674],{"emptyLinePlaceholder":324},[147,37478,37479],{"class":149,"line":1604},[147,37480,2674],{"emptyLinePlaceholder":324},[147,37482,37483],{"class":149,"line":1886},[147,37484,34225],{"class":458},[147,37486,37487,37489,37491],{"class":149,"line":1891},[147,37488,32221],{"class":397},[147,37490,34232],{"class":2237},[147,37492,32227],{"class":157},[147,37494,37495,37497,37499,37501,37503,37505,37507],{"class":149,"line":1897},[147,37496,34239],{"class":157},[147,37498,445],{"class":397},[147,37500,31729],{"class":157},[147,37502,31732],{"class":5490},[147,37504,445],{"class":397},[147,37506,31737],{"class":504},[147,37508,31740],{"class":157},[147,37510,37511,37513,37515,37517],{"class":149,"line":1902},[147,37512,34256],{"class":5490},[147,37514,445],{"class":397},[147,37516,34261],{"class":448},[147,37518,31740],{"class":157},[147,37520,37521,37523,37525,37527,37529,37531,37533],{"class":149,"line":1916},[147,37522,34268],{"class":5490},[147,37524,445],{"class":397},[147,37526,31767],{"class":157},[147,37528,31770],{"class":5490},[147,37530,445],{"class":397},[147,37532,35723],{"class":448},[147,37534,31778],{"class":157},[147,37536,37537,37539,37541,37543],{"class":149,"line":1921},[147,37538,34285],{"class":5490},[147,37540,445],{"class":397},[147,37542,31750],{"class":448},[147,37544,407],{"class":157},[147,37546,37547,37549,37551,37553,37555,37557],{"class":149,"line":1927},[147,37548,34296],{"class":157},[147,37550,445],{"class":397},[147,37552,31808],{"class":157},[147,37554,31811],{"class":5490},[147,37556,445],{"class":397},[147,37558,34307],{"class":157},[147,37560,37561],{"class":149,"line":1948},[147,37562,34312],{"class":458},[147,37564,37565,37567,37569,37571],{"class":149,"line":1953},[147,37566,34317],{"class":5490},[147,37568,445],{"class":397},[147,37570,616],{"class":448},[147,37572,31740],{"class":157},[147,37574,37575,37577,37579,37581],{"class":149,"line":1967},[147,37576,34328],{"class":5490},[147,37578,445],{"class":397},[147,37580,31750],{"class":448},[147,37582,31740],{"class":157},[147,37584,37585,37587,37589,37591],{"class":149,"line":1972},[147,37586,34339],{"class":5490},[147,37588,445],{"class":397},[147,37590,590],{"class":448},[147,37592,407],{"class":157},[147,37594,37595,37597],{"class":149,"line":2001},[147,37596,4364],{"class":397},[147,37598,34352],{"class":157},[147,37600,37601],{"class":149,"line":2006},[147,37602,2674],{"emptyLinePlaceholder":324},[147,37604,37605],{"class":149,"line":2023},[147,37606,34361],{"class":458},[147,37608,37609,37611,37613],{"class":149,"line":2028},[147,37610,32221],{"class":397},[147,37612,34368],{"class":2237},[147,37614,34371],{"class":157},[147,37616,37617],{"class":149,"line":2033},[147,37618,34376],{"class":458},[147,37620,37621,37623,37625,37627,37629,37631,37633],{"class":149,"line":2038},[147,37622,31511],{"class":157},[147,37624,445],{"class":397},[147,37626,31518],{"class":504},[147,37628,1978],{"class":397},[147,37630,31523],{"class":157},[147,37632,1975],{"class":397},[147,37634,34393],{"class":504},[147,37636,37637,37639,37641],{"class":149,"line":2052},[147,37638,31563],{"class":157},[147,37640,445],{"class":397},[147,37642,32563],{"class":157},[147,37644,37645],{"class":149,"line":2057},[147,37646,2674],{"emptyLinePlaceholder":324},[147,37648,37649],{"class":149,"line":2851},[147,37650,34410],{"class":458},[147,37652,37653,37655,37657],{"class":149,"line":2865},[147,37654,34415],{"class":157},[147,37656,445],{"class":397},[147,37658,32616],{"class":448},[147,37660,37661,37663,37665],{"class":149,"line":2873},[147,37662,34424],{"class":157},[147,37664,445],{"class":397},[147,37666,3359],{"class":448},[147,37668,37669],{"class":149,"line":2878},[147,37670,2674],{"emptyLinePlaceholder":324},[147,37672,37673],{"class":149,"line":2884},[147,37674,34437],{"class":458},[147,37676,37677],{"class":149,"line":2890},[147,37678,34442],{"class":458},[147,37680,37681],{"class":149,"line":2895},[147,37682,34447],{"class":458},[147,37684,37685,37687],{"class":149,"line":8222},[147,37686,34452],{"class":397},[147,37688,33158],{"class":157},[147,37690,37691],{"class":149,"line":8246},[147,37692,34459],{"class":458},[147,37694,37695,37697,37699,37701],{"class":149,"line":8251},[147,37696,3677],{"class":397},[147,37698,34466],{"class":157},[147,37700,26317],{"class":397},[147,37702,34471],{"class":157},[147,37704,37705,37707,37709],{"class":149,"line":8257},[147,37706,34476],{"class":157},[147,37708,445],{"class":397},[147,37710,34481],{"class":157},[147,37712,37713,37715,37717],{"class":149,"line":8284},[147,37714,34486],{"class":157},[147,37716,445],{"class":397},[147,37718,34491],{"class":157},[147,37720,37721],{"class":149,"line":8289},[147,37722,34496],{"class":458},[147,37724,37725],{"class":149,"line":8295},[147,37726,33149],{"class":157},[147,37728,37729],{"class":149,"line":8307},[147,37730,34505],{"class":458},[147,37732,37733,37735,37737],{"class":149,"line":8319},[147,37734,32934],{"class":157},[147,37736,445],{"class":397},[147,37738,34514],{"class":157},[147,37740,37741],{"class":149,"line":8331},[147,37742,34519],{"class":458},[147,37744,37745,37747,37749,37751,37753,37755,37757],{"class":149,"line":9990},[147,37746,32951],{"class":157},[147,37748,445],{"class":397},[147,37750,32956],{"class":157},[147,37752,32959],{"class":5490},[147,37754,445],{"class":397},[147,37756,616],{"class":448},[147,37758,407],{"class":157},[147,37760,37761],{"class":149,"line":10015},[147,37762,34540],{"class":458},[147,37764,37765],{"class":149,"line":10038},[147,37766,34545],{"class":458},[147,37768,37769],{"class":149,"line":10062},[147,37770,34550],{"class":458},[147,37772,37773,37775,37777,37779,37781],{"class":149,"line":10067},[147,37774,34555],{"class":157},[147,37776,9751],{"class":397},[147,37778,33061],{"class":157},[147,37780,3223],{"class":397},[147,37782,34564],{"class":157},[147,37784,37785],{"class":149,"line":10072},[147,37786,34569],{"class":458},[147,37788,37789,37791,37793,37795,37797],{"class":149,"line":10077},[147,37790,34574],{"class":157},[147,37792,9751],{"class":397},[147,37794,34579],{"class":157},[147,37796,590],{"class":448},[147,37798,407],{"class":157},[147,37800,37801],{"class":149,"line":10086},[147,37802,2674],{"emptyLinePlaceholder":324},[147,37804,37805],{"class":149,"line":10091},[147,37806,34592],{"class":458},[147,37808,37809,37811,37813,37815,37817],{"class":149,"line":10097},[147,37810,34597],{"class":157},[147,37812,445],{"class":397},[147,37814,34602],{"class":157},[147,37816,983],{"class":397},[147,37818,34607],{"class":157},[147,37820,37821],{"class":149,"line":10118},[147,37822,34612],{"class":458},[147,37824,37825,37827,37829,37831],{"class":149,"line":10124},[147,37826,32725],{"class":448},[147,37828,401],{"class":157},[147,37830,34621],{"class":504},[147,37832,34624],{"class":157},[147,37834,37835],{"class":149,"line":10138},[147,37836,2674],{"emptyLinePlaceholder":324},[147,37838,37839],{"class":149,"line":10144},[147,37840,34633],{"class":458},[147,37842,37843,37845,37847,37849,37851],{"class":149,"line":10171},[147,37844,1805],{"class":397},[147,37846,31494],{"class":448},[147,37848,3223],{"class":397},[147,37850,31499],{"class":504},[147,37852,4013],{"class":157},[147,37854,37855],{"class":149,"line":10180},[147,37856,34650],{"class":458},[147,37858,37859,37861,37863],{"class":149,"line":10186},[147,37860,31563],{"class":157},[147,37862,445],{"class":397},[147,37864,37363],{"class":157},[147,37866,37867],{"class":149,"line":10194},[147,37868,34663],{"class":458},[147,37870,37871],{"class":149,"line":10199},[147,37872,34668],{"class":458},[147,37874,37875,37877,37879],{"class":149,"line":16877},[147,37876,34673],{"class":157},[147,37878,34676],{"class":504},[147,37880,30771],{"class":157},[147,37882,37883],{"class":149,"line":16883},[147,37884,34683],{"class":458},[147,37886,37887,37889,37891],{"class":149,"line":16906},[147,37888,34296],{"class":157},[147,37890,445],{"class":397},[147,37892,34692],{"class":157},[147,37894,37895],{"class":149,"line":16912},[147,37896,34697],{"class":458},[147,37898,37899],{"class":149,"line":16935},[147,37900,34702],{"class":157},[147,37902,37903],{"class":149,"line":16949},[147,37904,2674],{"emptyLinePlaceholder":324},[147,37906,37907],{"class":149,"line":16969},[147,37908,34711],{"class":458},[147,37910,37911],{"class":149,"line":16975},[147,37912,34716],{"class":458},[147,37914,37915,37917,37919,37921,37923,37925,37927],{"class":149,"line":16986},[147,37916,31511],{"class":157},[147,37918,445],{"class":397},[147,37920,31518],{"class":504},[147,37922,1978],{"class":397},[147,37924,31523],{"class":157},[147,37926,1975],{"class":397},[147,37928,34393],{"class":504},[147,37930,37931,37933,37935],{"class":149,"line":17009},[147,37932,31563],{"class":157},[147,37934,445],{"class":397},[147,37936,32563],{"class":157},[147,37938,37939],{"class":149,"line":17031},[147,37940,34745],{"class":458},[147,37942,37943],{"class":149,"line":17036},[147,37944,34750],{"class":458},[147,37946,37947,37949,37951,37953,37955,37957,37959,37961,37963,37965,37967,37969,37971,37973,37975,37977,37979,37981,37983,37985,37987,37989,37991],{"class":149,"line":17042},[147,37948,34755],{"class":157},[147,37950,445],{"class":397},[147,37952,1289],{"class":157},[147,37954,34762],{"class":504},[147,37956,777],{"class":157},[147,37958,34767],{"class":504},[147,37960,777],{"class":157},[147,37962,34772],{"class":504},[147,37964,777],{"class":157},[147,37966,34777],{"class":504},[147,37968,777],{"class":157},[147,37970,34782],{"class":504},[147,37972,777],{"class":157},[147,37974,34787],{"class":504},[147,37976,777],{"class":157},[147,37978,34792],{"class":504},[147,37980,777],{"class":157},[147,37982,34797],{"class":504},[147,37984,777],{"class":157},[147,37986,34802],{"class":504},[147,37988,777],{"class":157},[147,37990,34807],{"class":504},[147,37992,33520],{"class":157},[147,37994,37995,37997],{"class":149,"line":17056},[147,37996,34452],{"class":397},[147,37998,33158],{"class":157},[147,38000,38001],{"class":149,"line":17069},[147,38002,34820],{"class":458},[147,38004,38005,38007,38009,38011],{"class":149,"line":17074},[147,38006,3677],{"class":397},[147,38008,34827],{"class":157},[147,38010,26317],{"class":397},[147,38012,34471],{"class":157},[147,38014,38015,38017,38019],{"class":149,"line":17088},[147,38016,32884],{"class":157},[147,38018,445],{"class":397},[147,38020,32889],{"class":157},[147,38022,38023,38025,38027],{"class":149,"line":17093},[147,38024,32899],{"class":157},[147,38026,445],{"class":397},[147,38028,32904],{"class":157},[147,38030,38031],{"class":149,"line":17099},[147,38032,2674],{"emptyLinePlaceholder":324},[147,38034,38035],{"class":149,"line":17104},[147,38036,34856],{"class":458},[147,38038,38039],{"class":149,"line":17118},[147,38040,33149],{"class":157},[147,38042,38043],{"class":149,"line":17123},[147,38044,34865],{"class":458},[147,38046,38047,38049,38051],{"class":149,"line":17128},[147,38048,32934],{"class":157},[147,38050,445],{"class":397},[147,38052,32939],{"class":157},[147,38054,38055],{"class":149,"line":17142},[147,38056,34878],{"class":458},[147,38058,38059,38061,38063,38065,38067,38069,38071],{"class":149,"line":17154},[147,38060,32951],{"class":157},[147,38062,445],{"class":397},[147,38064,32956],{"class":157},[147,38066,32959],{"class":5490},[147,38068,445],{"class":397},[147,38070,616],{"class":448},[147,38072,407],{"class":157},[147,38074,38075],{"class":149,"line":17159},[147,38076,34899],{"class":458},[147,38078,38079,38081,38083],{"class":149,"line":17172},[147,38080,34904],{"class":157},[147,38082,445],{"class":397},[147,38084,34909],{"class":157},[147,38086,38087,38089,38091],{"class":149,"line":17177},[147,38088,34914],{"class":157},[147,38090,445],{"class":397},[147,38092,34919],{"class":157},[147,38094,38095,38097,38099,38101,38103,38105,38107,38109],{"class":149,"line":17182},[147,38096,34924],{"class":448},[147,38098,401],{"class":157},[147,38100,34929],{"class":504},[147,38102,34932],{"class":157},[147,38104,34935],{"class":504},[147,38106,777],{"class":157},[147,38108,34940],{"class":504},[147,38110,34943],{"class":157},[367,38112,38114],{"id":38113},"_22vgg","2.2.VGG",[22271,38116,38118],{"id":38117},"_221原理","2.2.1.原理",[19,38120,38121],{},[29,38122],{"alt":143,"src":38123},"\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,38125,38126],{},[29,38127],{"alt":143,"src":38128},"\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,38130,38131],{},[29,38132],{"alt":143,"src":38133},"\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,38135,38136],{},"参数详细描述：",[19,38138,38139],{},[29,38140],{"alt":143,"src":38141},"\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,38143,38144],{},[29,38145],{"alt":143,"src":38146},"\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,38148,38149],{},[29,38150],{"alt":143,"src":38151},"\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,38153,38154],{},[29,38155],{"alt":143,"src":38156},"\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,38158,38159],{},[29,38160],{"alt":143,"src":38161},"\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",[22271,38163,38165],{"id":38164},"_222代码实现","2.2.2.代码实现",[350,38167,38168],{},[353,38169,38170],{},"网络搭建",[138,38172,38174],{"className":30652,"code":38173,"language":30654,"meta":143,"style":143},"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",[51,38175,38176,38182,38194,38204,38214,38218,38235,38243,38262,38267,38272,38284,38322,38327,38363,38367,38396,38401,38406,38417,38453,38457,38493,38497,38525,38529,38534,38545,38581,38585,38621,38625,38661,38665,38693,38697,38702,38713,38750,38754,38790,38794,38830,38834,38862,38866,38871,38882,38918,38922,38958,38962,38998,39002,39030,39034,39039,39050,39055,39060,39065,39086,39090,39102,39106,39118,39122,39126,39131,39136,39151,39156,39166,39171,39186,39191,39210,39215,39224,39229,39239,39244,39249,39263,39268,39282,39290,39294,39298,39306,39317,39328,39339,39350,39361,39372,39378,39382,39387,39400,39420,39426,39435],{"__ignoreMap":143},[147,38177,38178,38180],{"class":149,"line":150},[147,38179,30666],{"class":397},[147,38181,30669],{"class":157},[147,38183,38184,38186,38189,38191],{"class":149,"line":312},[147,38185,31011],{"class":397},[147,38187,38188],{"class":157}," sympy.core.sympify ",[147,38190,30666],{"class":397},[147,38192,38193],{"class":157}," kernS\n",[147,38195,38196,38198,38200,38202],{"class":149,"line":1454},[147,38197,31011],{"class":397},[147,38199,31014],{"class":157},[147,38201,30666],{"class":397},[147,38203,31019],{"class":157},[147,38205,38206,38208,38210,38212],{"class":149,"line":1469},[147,38207,31011],{"class":397},[147,38209,31031],{"class":157},[147,38211,30666],{"class":397},[147,38213,31036],{"class":157},[147,38215,38216],{"class":149,"line":1475},[147,38217,2674],{"emptyLinePlaceholder":324},[147,38219,38220,38222,38225,38227,38229,38231,38233],{"class":149,"line":1489},[147,38221,14967],{"class":397},[147,38223,38224],{"class":2237}," VGG16",[147,38226,401],{"class":157},[147,38228,31052],{"class":2237},[147,38230,957],{"class":157},[147,38232,31057],{"class":2237},[147,38234,31060],{"class":157},[147,38236,38237,38239,38241],{"class":149,"line":1495},[147,38238,31075],{"class":397},[147,38240,31078],{"class":448},[147,38242,31081],{"class":157},[147,38244,38245,38247,38249,38252,38254,38256,38258,38260],{"class":149,"line":1586},[147,38246,31091],{"class":448},[147,38248,401],{"class":157},[147,38250,38251],{"class":448},"VGG16",[147,38253,12709],{"class":157},[147,38255,31097],{"class":448},[147,38257,31100],{"class":157},[147,38259,31103],{"class":448},[147,38261,2250],{"class":157},[147,38263,38264],{"class":149,"line":1592},[147,38265,38266],{"class":458},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[147,38268,38269],{"class":149,"line":1604},[147,38270,38271],{"class":458},"        # 这里用的是灰度图\n",[147,38273,38274,38276,38279,38281],{"class":149,"line":1886},[147,38275,31119],{"class":448},[147,38277,38278],{"class":157},".block1",[147,38280,445],{"class":397},[147,38282,38283],{"class":157},"nn.Sequential(\n",[147,38285,38286,38289,38291,38293,38295,38297,38299,38301,38303,38305,38307,38309,38311,38313,38315,38317,38319],{"class":149,"line":1891},[147,38287,38288],{"class":157},"            nn.Conv2d(",[147,38290,31130],{"class":5490},[147,38292,445],{"class":397},[147,38294,616],{"class":448},[147,38296,777],{"class":157},[147,38298,31139],{"class":5490},[147,38300,445],{"class":397},[147,38302,602],{"class":448},[147,38304,777],{"class":157},[147,38306,31148],{"class":5490},[147,38308,445],{"class":397},[147,38310,471],{"class":448},[147,38312,777],{"class":157},[147,38314,31157],{"class":5490},[147,38316,445],{"class":397},[147,38318,616],{"class":448},[147,38320,38321],{"class":157},"),\n",[147,38323,38324],{"class":149,"line":1897},[147,38325,38326],{"class":157},"            nn.ReLU(),\n",[147,38328,38329,38331,38333,38335,38337,38339,38341,38343,38345,38347,38349,38351,38353,38355,38357,38359,38361],{"class":149,"line":1902},[147,38330,38288],{"class":157},[147,38332,31130],{"class":5490},[147,38334,445],{"class":397},[147,38336,602],{"class":448},[147,38338,777],{"class":157},[147,38340,31139],{"class":5490},[147,38342,445],{"class":397},[147,38344,602],{"class":448},[147,38346,777],{"class":157},[147,38348,31148],{"class":5490},[147,38350,445],{"class":397},[147,38352,471],{"class":448},[147,38354,777],{"class":157},[147,38356,31157],{"class":5490},[147,38358,445],{"class":397},[147,38360,616],{"class":448},[147,38362,38321],{"class":157},[147,38364,38365],{"class":149,"line":1916},[147,38366,38326],{"class":157},[147,38368,38369,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394],{"class":149,"line":1921},[147,38370,38371],{"class":157},"            nn.MaxPool2d(",[147,38373,31148],{"class":5490},[147,38375,445],{"class":397},[147,38377,477],{"class":448},[147,38379,777],{"class":157},[147,38381,31203],{"class":5490},[147,38383,445],{"class":397},[147,38385,477],{"class":448},[147,38387,777],{"class":157},[147,38389,31157],{"class":5490},[147,38391,445],{"class":397},[147,38393,590],{"class":448},[147,38395,407],{"class":157},[147,38397,38398],{"class":149,"line":1927},[147,38399,38400],{"class":157},"        )\n",[147,38402,38403],{"class":149,"line":1948},[147,38404,38405],{"class":458},"        # 第二层\n",[147,38407,38408,38410,38413,38415],{"class":149,"line":1953},[147,38409,31119],{"class":448},[147,38411,38412],{"class":157},".block2",[147,38414,445],{"class":397},[147,38416,38283],{"class":157},[147,38418,38419,38421,38423,38425,38427,38429,38431,38433,38435,38437,38439,38441,38443,38445,38447,38449,38451],{"class":149,"line":1967},[147,38420,38288],{"class":157},[147,38422,31130],{"class":5490},[147,38424,445],{"class":397},[147,38426,602],{"class":448},[147,38428,777],{"class":157},[147,38430,31139],{"class":5490},[147,38432,445],{"class":397},[147,38434,32344],{"class":448},[147,38436,777],{"class":157},[147,38438,31148],{"class":5490},[147,38440,445],{"class":397},[147,38442,471],{"class":448},[147,38444,777],{"class":157},[147,38446,31157],{"class":5490},[147,38448,445],{"class":397},[147,38450,616],{"class":448},[147,38452,38321],{"class":157},[147,38454,38455],{"class":149,"line":1972},[147,38456,38326],{"class":157},[147,38458,38459,38461,38463,38465,38467,38469,38471,38473,38475,38477,38479,38481,38483,38485,38487,38489,38491],{"class":149,"line":2001},[147,38460,38288],{"class":157},[147,38462,31130],{"class":5490},[147,38464,445],{"class":397},[147,38466,32344],{"class":448},[147,38468,777],{"class":157},[147,38470,31139],{"class":5490},[147,38472,445],{"class":397},[147,38474,32344],{"class":448},[147,38476,777],{"class":157},[147,38478,31148],{"class":5490},[147,38480,445],{"class":397},[147,38482,471],{"class":448},[147,38484,777],{"class":157},[147,38486,31157],{"class":5490},[147,38488,445],{"class":397},[147,38490,616],{"class":448},[147,38492,38321],{"class":157},[147,38494,38495],{"class":149,"line":2006},[147,38496,38326],{"class":157},[147,38498,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523],{"class":149,"line":2023},[147,38500,38371],{"class":157},[147,38502,31148],{"class":5490},[147,38504,445],{"class":397},[147,38506,477],{"class":448},[147,38508,777],{"class":157},[147,38510,31203],{"class":5490},[147,38512,445],{"class":397},[147,38514,477],{"class":448},[147,38516,777],{"class":157},[147,38518,31157],{"class":5490},[147,38520,445],{"class":397},[147,38522,590],{"class":448},[147,38524,407],{"class":157},[147,38526,38527],{"class":149,"line":2028},[147,38528,38400],{"class":157},[147,38530,38531],{"class":149,"line":2033},[147,38532,38533],{"class":458},"        # 第三层\n",[147,38535,38536,38538,38541,38543],{"class":149,"line":2038},[147,38537,31119],{"class":448},[147,38539,38540],{"class":157},".block3",[147,38542,445],{"class":397},[147,38544,38283],{"class":157},[147,38546,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565,38567,38569,38571,38573,38575,38577,38579],{"class":149,"line":2052},[147,38548,38288],{"class":157},[147,38550,31130],{"class":5490},[147,38552,445],{"class":397},[147,38554,32344],{"class":448},[147,38556,777],{"class":157},[147,38558,31139],{"class":5490},[147,38560,445],{"class":397},[147,38562,35144],{"class":448},[147,38564,777],{"class":157},[147,38566,31148],{"class":5490},[147,38568,445],{"class":397},[147,38570,471],{"class":448},[147,38572,777],{"class":157},[147,38574,31157],{"class":5490},[147,38576,445],{"class":397},[147,38578,616],{"class":448},[147,38580,38321],{"class":157},[147,38582,38583],{"class":149,"line":2057},[147,38584,38326],{"class":157},[147,38586,38587,38589,38591,38593,38595,38597,38599,38601,38603,38605,38607,38609,38611,38613,38615,38617,38619],{"class":149,"line":2851},[147,38588,38288],{"class":157},[147,38590,31130],{"class":5490},[147,38592,445],{"class":397},[147,38594,35144],{"class":448},[147,38596,777],{"class":157},[147,38598,31139],{"class":5490},[147,38600,445],{"class":397},[147,38602,35144],{"class":448},[147,38604,777],{"class":157},[147,38606,31148],{"class":5490},[147,38608,445],{"class":397},[147,38610,471],{"class":448},[147,38612,777],{"class":157},[147,38614,31157],{"class":5490},[147,38616,445],{"class":397},[147,38618,616],{"class":448},[147,38620,38321],{"class":157},[147,38622,38623],{"class":149,"line":2865},[147,38624,38326],{"class":157},[147,38626,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659],{"class":149,"line":2873},[147,38628,38288],{"class":157},[147,38630,31130],{"class":5490},[147,38632,445],{"class":397},[147,38634,35144],{"class":448},[147,38636,777],{"class":157},[147,38638,31139],{"class":5490},[147,38640,445],{"class":397},[147,38642,35144],{"class":448},[147,38644,777],{"class":157},[147,38646,31148],{"class":5490},[147,38648,445],{"class":397},[147,38650,471],{"class":448},[147,38652,777],{"class":157},[147,38654,31157],{"class":5490},[147,38656,445],{"class":397},[147,38658,616],{"class":448},[147,38660,38321],{"class":157},[147,38662,38663],{"class":149,"line":2878},[147,38664,38326],{"class":157},[147,38666,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691],{"class":149,"line":2884},[147,38668,38371],{"class":157},[147,38670,31148],{"class":5490},[147,38672,445],{"class":397},[147,38674,477],{"class":448},[147,38676,777],{"class":157},[147,38678,31203],{"class":5490},[147,38680,445],{"class":397},[147,38682,477],{"class":448},[147,38684,777],{"class":157},[147,38686,31157],{"class":5490},[147,38688,445],{"class":397},[147,38690,590],{"class":448},[147,38692,407],{"class":157},[147,38694,38695],{"class":149,"line":2890},[147,38696,38400],{"class":157},[147,38698,38699],{"class":149,"line":2895},[147,38700,38701],{"class":458},"        # 第四层\n",[147,38703,38704,38706,38709,38711],{"class":149,"line":8222},[147,38705,31119],{"class":448},[147,38707,38708],{"class":157},".block4",[147,38710,445],{"class":397},[147,38712,38283],{"class":157},[147,38714,38715,38717,38719,38721,38723,38725,38727,38729,38732,38734,38736,38738,38740,38742,38744,38746,38748],{"class":149,"line":8246},[147,38716,38288],{"class":157},[147,38718,31130],{"class":5490},[147,38720,445],{"class":397},[147,38722,35144],{"class":448},[147,38724,777],{"class":157},[147,38726,31139],{"class":5490},[147,38728,445],{"class":397},[147,38730,38731],{"class":448},"512",[147,38733,777],{"class":157},[147,38735,31148],{"class":5490},[147,38737,445],{"class":397},[147,38739,471],{"class":448},[147,38741,777],{"class":157},[147,38743,31157],{"class":5490},[147,38745,445],{"class":397},[147,38747,616],{"class":448},[147,38749,38321],{"class":157},[147,38751,38752],{"class":149,"line":8251},[147,38753,38326],{"class":157},[147,38755,38756,38758,38760,38762,38764,38766,38768,38770,38772,38774,38776,38778,38780,38782,38784,38786,38788],{"class":149,"line":8257},[147,38757,38288],{"class":157},[147,38759,31130],{"class":5490},[147,38761,445],{"class":397},[147,38763,38731],{"class":448},[147,38765,777],{"class":157},[147,38767,31139],{"class":5490},[147,38769,445],{"class":397},[147,38771,38731],{"class":448},[147,38773,777],{"class":157},[147,38775,31148],{"class":5490},[147,38777,445],{"class":397},[147,38779,471],{"class":448},[147,38781,777],{"class":157},[147,38783,31157],{"class":5490},[147,38785,445],{"class":397},[147,38787,616],{"class":448},[147,38789,38321],{"class":157},[147,38791,38792],{"class":149,"line":8284},[147,38793,38326],{"class":157},[147,38795,38796,38798,38800,38802,38804,38806,38808,38810,38812,38814,38816,38818,38820,38822,38824,38826,38828],{"class":149,"line":8289},[147,38797,38288],{"class":157},[147,38799,31130],{"class":5490},[147,38801,445],{"class":397},[147,38803,38731],{"class":448},[147,38805,777],{"class":157},[147,38807,31139],{"class":5490},[147,38809,445],{"class":397},[147,38811,38731],{"class":448},[147,38813,777],{"class":157},[147,38815,31148],{"class":5490},[147,38817,445],{"class":397},[147,38819,471],{"class":448},[147,38821,777],{"class":157},[147,38823,31157],{"class":5490},[147,38825,445],{"class":397},[147,38827,616],{"class":448},[147,38829,38321],{"class":157},[147,38831,38832],{"class":149,"line":8295},[147,38833,38326],{"class":157},[147,38835,38836,38838,38840,38842,38844,38846,38848,38850,38852,38854,38856,38858,38860],{"class":149,"line":8307},[147,38837,38371],{"class":157},[147,38839,31148],{"class":5490},[147,38841,445],{"class":397},[147,38843,477],{"class":448},[147,38845,777],{"class":157},[147,38847,31203],{"class":5490},[147,38849,445],{"class":397},[147,38851,477],{"class":448},[147,38853,777],{"class":157},[147,38855,31157],{"class":5490},[147,38857,445],{"class":397},[147,38859,590],{"class":448},[147,38861,407],{"class":157},[147,38863,38864],{"class":149,"line":8319},[147,38865,38400],{"class":157},[147,38867,38868],{"class":149,"line":8331},[147,38869,38870],{"class":458},"        # 第五层\n",[147,38872,38873,38875,38878,38880],{"class":149,"line":9990},[147,38874,31119],{"class":448},[147,38876,38877],{"class":157},".block5",[147,38879,445],{"class":397},[147,38881,38283],{"class":157},[147,38883,38884,38886,38888,38890,38892,38894,38896,38898,38900,38902,38904,38906,38908,38910,38912,38914,38916],{"class":149,"line":10015},[147,38885,38288],{"class":157},[147,38887,31130],{"class":5490},[147,38889,445],{"class":397},[147,38891,38731],{"class":448},[147,38893,777],{"class":157},[147,38895,31139],{"class":5490},[147,38897,445],{"class":397},[147,38899,38731],{"class":448},[147,38901,777],{"class":157},[147,38903,31148],{"class":5490},[147,38905,445],{"class":397},[147,38907,471],{"class":448},[147,38909,777],{"class":157},[147,38911,31157],{"class":5490},[147,38913,445],{"class":397},[147,38915,616],{"class":448},[147,38917,38321],{"class":157},[147,38919,38920],{"class":149,"line":10038},[147,38921,38326],{"class":157},[147,38923,38924,38926,38928,38930,38932,38934,38936,38938,38940,38942,38944,38946,38948,38950,38952,38954,38956],{"class":149,"line":10062},[147,38925,38288],{"class":157},[147,38927,31130],{"class":5490},[147,38929,445],{"class":397},[147,38931,38731],{"class":448},[147,38933,777],{"class":157},[147,38935,31139],{"class":5490},[147,38937,445],{"class":397},[147,38939,38731],{"class":448},[147,38941,777],{"class":157},[147,38943,31148],{"class":5490},[147,38945,445],{"class":397},[147,38947,471],{"class":448},[147,38949,777],{"class":157},[147,38951,31157],{"class":5490},[147,38953,445],{"class":397},[147,38955,616],{"class":448},[147,38957,38321],{"class":157},[147,38959,38960],{"class":149,"line":10067},[147,38961,38326],{"class":157},[147,38963,38964,38966,38968,38970,38972,38974,38976,38978,38980,38982,38984,38986,38988,38990,38992,38994,38996],{"class":149,"line":10072},[147,38965,38288],{"class":157},[147,38967,31130],{"class":5490},[147,38969,445],{"class":397},[147,38971,38731],{"class":448},[147,38973,777],{"class":157},[147,38975,31139],{"class":5490},[147,38977,445],{"class":397},[147,38979,38731],{"class":448},[147,38981,777],{"class":157},[147,38983,31148],{"class":5490},[147,38985,445],{"class":397},[147,38987,471],{"class":448},[147,38989,777],{"class":157},[147,38991,31157],{"class":5490},[147,38993,445],{"class":397},[147,38995,616],{"class":448},[147,38997,38321],{"class":157},[147,38999,39000],{"class":149,"line":10077},[147,39001,38326],{"class":157},[147,39003,39004,39006,39008,39010,39012,39014,39016,39018,39020,39022,39024,39026,39028],{"class":149,"line":10086},[147,39005,38371],{"class":157},[147,39007,31148],{"class":5490},[147,39009,445],{"class":397},[147,39011,477],{"class":448},[147,39013,777],{"class":157},[147,39015,31203],{"class":5490},[147,39017,445],{"class":397},[147,39019,477],{"class":448},[147,39021,777],{"class":157},[147,39023,31157],{"class":5490},[147,39025,445],{"class":397},[147,39027,590],{"class":448},[147,39029,407],{"class":157},[147,39031,39032],{"class":149,"line":10091},[147,39033,38400],{"class":157},[147,39035,39036],{"class":149,"line":10097},[147,39037,39038],{"class":458},"        # 全连接层\n",[147,39040,39041,39043,39046,39048],{"class":149,"line":10118},[147,39042,31119],{"class":448},[147,39044,39045],{"class":157},".block6",[147,39047,445],{"class":397},[147,39049,38283],{"class":157},[147,39051,39052],{"class":149,"line":10124},[147,39053,39054],{"class":458},"            # 平展操作\n",[147,39056,39057],{"class":149,"line":10138},[147,39058,39059],{"class":458},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[147,39061,39062],{"class":149,"line":10144},[147,39063,39064],{"class":157},"            nn.Flatten(),\n",[147,39066,39067,39070,39072,39074,39076,39078,39080,39082,39084],{"class":149,"line":10171},[147,39068,39069],{"class":157},"            nn.Linear(",[147,39071,768],{"class":448},[147,39073,854],{"class":397},[147,39075,768],{"class":448},[147,39077,854],{"class":397},[147,39079,38731],{"class":448},[147,39081,777],{"class":157},[147,39083,35144],{"class":448},[147,39085,38321],{"class":157},[147,39087,39088],{"class":149,"line":10180},[147,39089,38326],{"class":157},[147,39091,39092,39094,39096,39098,39100],{"class":149,"line":10186},[147,39093,39069],{"class":157},[147,39095,35144],{"class":448},[147,39097,777],{"class":157},[147,39099,32344],{"class":448},[147,39101,38321],{"class":157},[147,39103,39104],{"class":149,"line":10194},[147,39105,38326],{"class":157},[147,39107,39108,39110,39112,39114,39116],{"class":149,"line":10199},[147,39109,39069],{"class":157},[147,39111,32344],{"class":448},[147,39113,777],{"class":157},[147,39115,845],{"class":448},[147,39117,407],{"class":157},[147,39119,39120],{"class":149,"line":16877},[147,39121,38400],{"class":157},[147,39123,39124],{"class":149,"line":16883},[147,39125,2674],{"emptyLinePlaceholder":324},[147,39127,39128],{"class":149,"line":16906},[147,39129,39130],{"class":458},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[147,39132,39133],{"class":149,"line":16912},[147,39134,39135],{"class":458},"        # 循环遍历模型\n",[147,39137,39138,39140,39143,39145,39148],{"class":149,"line":16935},[147,39139,3677],{"class":397},[147,39141,39142],{"class":157}," m ",[147,39144,26317],{"class":397},[147,39146,39147],{"class":448}," self",[147,39149,39150],{"class":157},".modules():\n",[147,39152,39153],{"class":149,"line":16949},[147,39154,39155],{"class":458},"            # print(m)\n",[147,39157,39158,39160,39163],{"class":149,"line":16969},[147,39159,4916],{"class":397},[147,39161,39162],{"class":448}," isinstance",[147,39164,39165],{"class":157},"(m,nn.Conv2d):\n",[147,39167,39168],{"class":149,"line":16975},[147,39169,39170],{"class":458},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[147,39172,39173,39176,39179,39181,39184],{"class":149,"line":16986},[147,39174,39175],{"class":157},"                nn.init.kaiming_normal_(m.weight,",[147,39177,39178],{"class":5490},"nonlinearity",[147,39180,445],{"class":397},[147,39182,39183],{"class":504},"'relu'",[147,39185,407],{"class":157},[147,39187,39188],{"class":149,"line":17009},[147,39189,39190],{"class":458},"                # 判断b参数是否存在\n",[147,39192,39193,39196,39199,39202,39205,39208],{"class":149,"line":17031},[147,39194,39195],{"class":397},"                if",[147,39197,39198],{"class":157}," m.bias ",[147,39200,39201],{"class":397},"is",[147,39203,39204],{"class":397}," not",[147,39206,39207],{"class":448}," None",[147,39209,4013],{"class":157},[147,39211,39212],{"class":149,"line":17036},[147,39213,39214],{"class":458},"                    # 如果参数不存在的化初始化b=0\n",[147,39216,39217,39220,39222],{"class":149,"line":17042},[147,39218,39219],{"class":157},"                    nn.init.constant_(m.bias,",[147,39221,590],{"class":448},[147,39223,407],{"class":157},[147,39225,39226],{"class":149,"line":17056},[147,39227,39228],{"class":458},"            # 全连接层初始化\n",[147,39230,39231,39234,39236],{"class":149,"line":17069},[147,39232,39233],{"class":397},"            elif",[147,39235,39162],{"class":448},[147,39237,39238],{"class":157},"(m,nn.Linear):\n",[147,39240,39241],{"class":149,"line":17074},[147,39242,39243],{"class":458},"                # 这个初始化方法是利用的是正太分布的方式\n",[147,39245,39246],{"class":149,"line":17088},[147,39247,39248],{"class":458},"                # 均值为0，方差为0.01\n",[147,39250,39251,39254,39256,39258,39261],{"class":149,"line":17093},[147,39252,39253],{"class":157},"                nn.init.normal_(m.weight,",[147,39255,590],{"class":448},[147,39257,777],{"class":157},[147,39259,39260],{"class":448},"0.01",[147,39262,407],{"class":157},[147,39264,39265],{"class":149,"line":17099},[147,39266,39267],{"class":458},"                # 初始化b参数\n",[147,39269,39270,39272,39274,39276,39278,39280],{"class":149,"line":17104},[147,39271,39195],{"class":397},[147,39273,39198],{"class":157},[147,39275,39201],{"class":397},[147,39277,39204],{"class":397},[147,39279,39207],{"class":448},[147,39281,4013],{"class":157},[147,39283,39284,39286,39288],{"class":149,"line":17118},[147,39285,39219],{"class":157},[147,39287,590],{"class":448},[147,39289,407],{"class":157},[147,39291,39292],{"class":149,"line":17123},[147,39293,2674],{"emptyLinePlaceholder":324},[147,39295,39296],{"class":149,"line":17128},[147,39297,35439],{"class":458},[147,39299,39300,39302,39304],{"class":149,"line":17142},[147,39301,31075],{"class":397},[147,39303,31367],{"class":2237},[147,39305,31370],{"class":157},[147,39307,39308,39310,39312,39314],{"class":149,"line":17154},[147,39309,31375],{"class":157},[147,39311,445],{"class":397},[147,39313,31097],{"class":448},[147,39315,39316],{"class":157},".block1(x)\n",[147,39318,39319,39321,39323,39325],{"class":149,"line":17159},[147,39320,31375],{"class":157},[147,39322,445],{"class":397},[147,39324,31097],{"class":448},[147,39326,39327],{"class":157},".block2(x)\n",[147,39329,39330,39332,39334,39336],{"class":149,"line":17172},[147,39331,31375],{"class":157},[147,39333,445],{"class":397},[147,39335,31097],{"class":448},[147,39337,39338],{"class":157},".block3(x)\n",[147,39340,39341,39343,39345,39347],{"class":149,"line":17177},[147,39342,31375],{"class":157},[147,39344,445],{"class":397},[147,39346,31097],{"class":448},[147,39348,39349],{"class":157},".block4(x)\n",[147,39351,39352,39354,39356,39358],{"class":149,"line":17182},[147,39353,31375],{"class":157},[147,39355,445],{"class":397},[147,39357,31097],{"class":448},[147,39359,39360],{"class":157},".block5(x)\n",[147,39362,39363,39365,39367,39369],{"class":149,"line":17187},[147,39364,31375],{"class":157},[147,39366,445],{"class":397},[147,39368,31097],{"class":448},[147,39370,39371],{"class":157},".block6(x)\n",[147,39373,39374,39376],{"class":149,"line":17200},[147,39375,15025],{"class":397},[147,39377,31483],{"class":157},[147,39379,39380],{"class":149,"line":17205},[147,39381,2674],{"emptyLinePlaceholder":324},[147,39383,39384],{"class":149,"line":32907},[147,39385,39386],{"class":458},"# 验证模型\n",[147,39388,39389,39391,39393,39395,39398],{"class":149,"line":32913},[147,39390,1805],{"class":397},[147,39392,31494],{"class":448},[147,39394,3223],{"class":397},[147,39396,39397],{"class":504},"'__main__'",[147,39399,4013],{"class":157},[147,39401,39402,39404,39406,39408,39410,39412,39414,39416,39418],{"class":149,"line":32919},[147,39403,31511],{"class":157},[147,39405,445],{"class":397},[147,39407,30725],{"class":157},[147,39409,31518],{"class":504},[147,39411,1978],{"class":397},[147,39413,31523],{"class":157},[147,39415,1975],{"class":397},[147,39417,30750],{"class":504},[147,39419,407],{"class":157},[147,39421,39422,39424],{"class":149,"line":32925},[147,39423,31573],{"class":448},[147,39425,30759],{"class":157},[147,39427,39428,39430,39432],{"class":149,"line":32931},[147,39429,31563],{"class":157},[147,39431,445],{"class":397},[147,39433,39434],{"class":157},"VGG16().to(device)\n",[147,39436,39437,39439,39441,39443,39445,39447,39449,39451],{"class":149,"line":32942},[147,39438,31573],{"class":448},[147,39440,31576],{"class":157},[147,39442,616],{"class":448},[147,39444,777],{"class":157},[147,39446,31775],{"class":448},[147,39448,777],{"class":157},[147,39450,31775],{"class":448},[147,39452,31589],{"class":157},[350,39454,39455],{"start":312},[353,39456,39457],{},"训练代码",[19,39459,39460],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,39462,39463],{},"解决方式:",[19,39465,39466],{},"①权重初始化",[138,39468,39470],{"className":30652,"code":39469,"language":30654,"meta":143,"style":143},"# 权重初始化,保证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",[51,39471,39472,39477,39482,39494,39499,39507,39512,39525,39530,39544,39549,39558,39563,39572,39577,39582,39595,39600,39614],{"__ignoreMap":143},[147,39473,39474],{"class":149,"line":150},[147,39475,39476],{"class":458},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[147,39478,39479],{"class":149,"line":312},[147,39480,39481],{"class":458},"# 循环遍历模型\n",[147,39483,39484,39486,39488,39490,39492],{"class":149,"line":1454},[147,39485,3299],{"class":397},[147,39487,39142],{"class":157},[147,39489,26317],{"class":397},[147,39491,39147],{"class":448},[147,39493,39150],{"class":157},[147,39495,39496],{"class":149,"line":1469},[147,39497,39498],{"class":458},"    # print(m)\n",[147,39500,39501,39503,39505],{"class":149,"line":1475},[147,39502,3375],{"class":397},[147,39504,39162],{"class":448},[147,39506,39165],{"class":157},[147,39508,39509],{"class":149,"line":1489},[147,39510,39511],{"class":458},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[147,39513,39514,39517,39519,39521,39523],{"class":149,"line":1495},[147,39515,39516],{"class":157},"        nn.init.kaiming_normal_(m.weight,",[147,39518,39178],{"class":5490},[147,39520,445],{"class":397},[147,39522,39183],{"class":504},[147,39524,407],{"class":157},[147,39526,39527],{"class":149,"line":1586},[147,39528,39529],{"class":458},"        # 判断b参数是否存在\n",[147,39531,39532,39534,39536,39538,39540,39542],{"class":149,"line":1592},[147,39533,2771],{"class":397},[147,39535,39198],{"class":157},[147,39537,39201],{"class":397},[147,39539,39204],{"class":397},[147,39541,39207],{"class":448},[147,39543,4013],{"class":157},[147,39545,39546],{"class":149,"line":1604},[147,39547,39548],{"class":458},"            # 如果参数不存在的化初始化b=0\n",[147,39550,39551,39554,39556],{"class":149,"line":1886},[147,39552,39553],{"class":157},"            nn.init.constant_(m.bias,",[147,39555,590],{"class":448},[147,39557,407],{"class":157},[147,39559,39560],{"class":149,"line":1891},[147,39561,39562],{"class":458},"    # 全连接层初始化\n",[147,39564,39565,39568,39570],{"class":149,"line":1897},[147,39566,39567],{"class":397},"    elif",[147,39569,39162],{"class":448},[147,39571,39238],{"class":157},[147,39573,39574],{"class":149,"line":1902},[147,39575,39576],{"class":458},"        # 这个初始化方法是利用的是正太分布的方式\n",[147,39578,39579],{"class":149,"line":1916},[147,39580,39581],{"class":458},"        # 均值为0，方差为0.01\n",[147,39583,39584,39587,39589,39591,39593],{"class":149,"line":1921},[147,39585,39586],{"class":157},"        nn.init.normal_(m.weight,",[147,39588,590],{"class":448},[147,39590,777],{"class":157},[147,39592,39260],{"class":448},[147,39594,407],{"class":157},[147,39596,39597],{"class":149,"line":1927},[147,39598,39599],{"class":458},"        # 初始化b参数\n",[147,39601,39602,39604,39606,39608,39610,39612],{"class":149,"line":1948},[147,39603,2771],{"class":397},[147,39605,39198],{"class":157},[147,39607,39201],{"class":397},[147,39609,39204],{"class":397},[147,39611,39207],{"class":448},[147,39613,4013],{"class":157},[147,39615,39616,39618,39620],{"class":149,"line":1953},[147,39617,39553],{"class":157},[147,39619,590],{"class":448},[147,39621,407],{"class":157},[19,39623,39624],{},"②尽可能地增加批次",[19,39626,39627],{},"训练完整代码：",[138,39629,39630],{"className":30652,"code":38173,"language":30654,"meta":143,"style":143},[51,39631,39632,39638,39648,39658,39668,39672,39688,39696,39714,39718,39722,39732,39768,39772,39808,39812,39840,39844,39848,39858,39894,39898,39934,39938,39966,39970,39974,39984,40020,40024,40060,40064,40100,40104,40132,40136,40140,40150,40186,40190,40226,40230,40266,40270,40298,40302,40306,40316,40352,40356,40392,40396,40432,40436,40464,40468,40472,40482,40486,40490,40494,40514,40518,40530,40534,40546,40550,40554,40558,40562,40574,40578,40586,40590,40602,40606,40620,40624,40632,40636,40644,40648,40652,40664,40668,40682,40690,40694,40698,40706,40716,40726,40736,40746,40756,40766,40772,40776,40780,40792,40812,40818,40826],{"__ignoreMap":143},[147,39633,39634,39636],{"class":149,"line":150},[147,39635,30666],{"class":397},[147,39637,30669],{"class":157},[147,39639,39640,39642,39644,39646],{"class":149,"line":312},[147,39641,31011],{"class":397},[147,39643,38188],{"class":157},[147,39645,30666],{"class":397},[147,39647,38193],{"class":157},[147,39649,39650,39652,39654,39656],{"class":149,"line":1454},[147,39651,31011],{"class":397},[147,39653,31014],{"class":157},[147,39655,30666],{"class":397},[147,39657,31019],{"class":157},[147,39659,39660,39662,39664,39666],{"class":149,"line":1469},[147,39661,31011],{"class":397},[147,39663,31031],{"class":157},[147,39665,30666],{"class":397},[147,39667,31036],{"class":157},[147,39669,39670],{"class":149,"line":1475},[147,39671,2674],{"emptyLinePlaceholder":324},[147,39673,39674,39676,39678,39680,39682,39684,39686],{"class":149,"line":1489},[147,39675,14967],{"class":397},[147,39677,38224],{"class":2237},[147,39679,401],{"class":157},[147,39681,31052],{"class":2237},[147,39683,957],{"class":157},[147,39685,31057],{"class":2237},[147,39687,31060],{"class":157},[147,39689,39690,39692,39694],{"class":149,"line":1495},[147,39691,31075],{"class":397},[147,39693,31078],{"class":448},[147,39695,31081],{"class":157},[147,39697,39698,39700,39702,39704,39706,39708,39710,39712],{"class":149,"line":1586},[147,39699,31091],{"class":448},[147,39701,401],{"class":157},[147,39703,38251],{"class":448},[147,39705,12709],{"class":157},[147,39707,31097],{"class":448},[147,39709,31100],{"class":157},[147,39711,31103],{"class":448},[147,39713,2250],{"class":157},[147,39715,39716],{"class":149,"line":1592},[147,39717,38266],{"class":458},[147,39719,39720],{"class":149,"line":1604},[147,39721,38271],{"class":458},[147,39723,39724,39726,39728,39730],{"class":149,"line":1886},[147,39725,31119],{"class":448},[147,39727,38278],{"class":157},[147,39729,445],{"class":397},[147,39731,38283],{"class":157},[147,39733,39734,39736,39738,39740,39742,39744,39746,39748,39750,39752,39754,39756,39758,39760,39762,39764,39766],{"class":149,"line":1891},[147,39735,38288],{"class":157},[147,39737,31130],{"class":5490},[147,39739,445],{"class":397},[147,39741,616],{"class":448},[147,39743,777],{"class":157},[147,39745,31139],{"class":5490},[147,39747,445],{"class":397},[147,39749,602],{"class":448},[147,39751,777],{"class":157},[147,39753,31148],{"class":5490},[147,39755,445],{"class":397},[147,39757,471],{"class":448},[147,39759,777],{"class":157},[147,39761,31157],{"class":5490},[147,39763,445],{"class":397},[147,39765,616],{"class":448},[147,39767,38321],{"class":157},[147,39769,39770],{"class":149,"line":1897},[147,39771,38326],{"class":157},[147,39773,39774,39776,39778,39780,39782,39784,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806],{"class":149,"line":1902},[147,39775,38288],{"class":157},[147,39777,31130],{"class":5490},[147,39779,445],{"class":397},[147,39781,602],{"class":448},[147,39783,777],{"class":157},[147,39785,31139],{"class":5490},[147,39787,445],{"class":397},[147,39789,602],{"class":448},[147,39791,777],{"class":157},[147,39793,31148],{"class":5490},[147,39795,445],{"class":397},[147,39797,471],{"class":448},[147,39799,777],{"class":157},[147,39801,31157],{"class":5490},[147,39803,445],{"class":397},[147,39805,616],{"class":448},[147,39807,38321],{"class":157},[147,39809,39810],{"class":149,"line":1916},[147,39811,38326],{"class":157},[147,39813,39814,39816,39818,39820,39822,39824,39826,39828,39830,39832,39834,39836,39838],{"class":149,"line":1921},[147,39815,38371],{"class":157},[147,39817,31148],{"class":5490},[147,39819,445],{"class":397},[147,39821,477],{"class":448},[147,39823,777],{"class":157},[147,39825,31203],{"class":5490},[147,39827,445],{"class":397},[147,39829,477],{"class":448},[147,39831,777],{"class":157},[147,39833,31157],{"class":5490},[147,39835,445],{"class":397},[147,39837,590],{"class":448},[147,39839,407],{"class":157},[147,39841,39842],{"class":149,"line":1927},[147,39843,38400],{"class":157},[147,39845,39846],{"class":149,"line":1948},[147,39847,38405],{"class":458},[147,39849,39850,39852,39854,39856],{"class":149,"line":1953},[147,39851,31119],{"class":448},[147,39853,38412],{"class":157},[147,39855,445],{"class":397},[147,39857,38283],{"class":157},[147,39859,39860,39862,39864,39866,39868,39870,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892],{"class":149,"line":1967},[147,39861,38288],{"class":157},[147,39863,31130],{"class":5490},[147,39865,445],{"class":397},[147,39867,602],{"class":448},[147,39869,777],{"class":157},[147,39871,31139],{"class":5490},[147,39873,445],{"class":397},[147,39875,32344],{"class":448},[147,39877,777],{"class":157},[147,39879,31148],{"class":5490},[147,39881,445],{"class":397},[147,39883,471],{"class":448},[147,39885,777],{"class":157},[147,39887,31157],{"class":5490},[147,39889,445],{"class":397},[147,39891,616],{"class":448},[147,39893,38321],{"class":157},[147,39895,39896],{"class":149,"line":1972},[147,39897,38326],{"class":157},[147,39899,39900,39902,39904,39906,39908,39910,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932],{"class":149,"line":2001},[147,39901,38288],{"class":157},[147,39903,31130],{"class":5490},[147,39905,445],{"class":397},[147,39907,32344],{"class":448},[147,39909,777],{"class":157},[147,39911,31139],{"class":5490},[147,39913,445],{"class":397},[147,39915,32344],{"class":448},[147,39917,777],{"class":157},[147,39919,31148],{"class":5490},[147,39921,445],{"class":397},[147,39923,471],{"class":448},[147,39925,777],{"class":157},[147,39927,31157],{"class":5490},[147,39929,445],{"class":397},[147,39931,616],{"class":448},[147,39933,38321],{"class":157},[147,39935,39936],{"class":149,"line":2006},[147,39937,38326],{"class":157},[147,39939,39940,39942,39944,39946,39948,39950,39952,39954,39956,39958,39960,39962,39964],{"class":149,"line":2023},[147,39941,38371],{"class":157},[147,39943,31148],{"class":5490},[147,39945,445],{"class":397},[147,39947,477],{"class":448},[147,39949,777],{"class":157},[147,39951,31203],{"class":5490},[147,39953,445],{"class":397},[147,39955,477],{"class":448},[147,39957,777],{"class":157},[147,39959,31157],{"class":5490},[147,39961,445],{"class":397},[147,39963,590],{"class":448},[147,39965,407],{"class":157},[147,39967,39968],{"class":149,"line":2028},[147,39969,38400],{"class":157},[147,39971,39972],{"class":149,"line":2033},[147,39973,38533],{"class":458},[147,39975,39976,39978,39980,39982],{"class":149,"line":2038},[147,39977,31119],{"class":448},[147,39979,38540],{"class":157},[147,39981,445],{"class":397},[147,39983,38283],{"class":157},[147,39985,39986,39988,39990,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014,40016,40018],{"class":149,"line":2052},[147,39987,38288],{"class":157},[147,39989,31130],{"class":5490},[147,39991,445],{"class":397},[147,39993,32344],{"class":448},[147,39995,777],{"class":157},[147,39997,31139],{"class":5490},[147,39999,445],{"class":397},[147,40001,35144],{"class":448},[147,40003,777],{"class":157},[147,40005,31148],{"class":5490},[147,40007,445],{"class":397},[147,40009,471],{"class":448},[147,40011,777],{"class":157},[147,40013,31157],{"class":5490},[147,40015,445],{"class":397},[147,40017,616],{"class":448},[147,40019,38321],{"class":157},[147,40021,40022],{"class":149,"line":2057},[147,40023,38326],{"class":157},[147,40025,40026,40028,40030,40032,40034,40036,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058],{"class":149,"line":2851},[147,40027,38288],{"class":157},[147,40029,31130],{"class":5490},[147,40031,445],{"class":397},[147,40033,35144],{"class":448},[147,40035,777],{"class":157},[147,40037,31139],{"class":5490},[147,40039,445],{"class":397},[147,40041,35144],{"class":448},[147,40043,777],{"class":157},[147,40045,31148],{"class":5490},[147,40047,445],{"class":397},[147,40049,471],{"class":448},[147,40051,777],{"class":157},[147,40053,31157],{"class":5490},[147,40055,445],{"class":397},[147,40057,616],{"class":448},[147,40059,38321],{"class":157},[147,40061,40062],{"class":149,"line":2865},[147,40063,38326],{"class":157},[147,40065,40066,40068,40070,40072,40074,40076,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098],{"class":149,"line":2873},[147,40067,38288],{"class":157},[147,40069,31130],{"class":5490},[147,40071,445],{"class":397},[147,40073,35144],{"class":448},[147,40075,777],{"class":157},[147,40077,31139],{"class":5490},[147,40079,445],{"class":397},[147,40081,35144],{"class":448},[147,40083,777],{"class":157},[147,40085,31148],{"class":5490},[147,40087,445],{"class":397},[147,40089,471],{"class":448},[147,40091,777],{"class":157},[147,40093,31157],{"class":5490},[147,40095,445],{"class":397},[147,40097,616],{"class":448},[147,40099,38321],{"class":157},[147,40101,40102],{"class":149,"line":2878},[147,40103,38326],{"class":157},[147,40105,40106,40108,40110,40112,40114,40116,40118,40120,40122,40124,40126,40128,40130],{"class":149,"line":2884},[147,40107,38371],{"class":157},[147,40109,31148],{"class":5490},[147,40111,445],{"class":397},[147,40113,477],{"class":448},[147,40115,777],{"class":157},[147,40117,31203],{"class":5490},[147,40119,445],{"class":397},[147,40121,477],{"class":448},[147,40123,777],{"class":157},[147,40125,31157],{"class":5490},[147,40127,445],{"class":397},[147,40129,590],{"class":448},[147,40131,407],{"class":157},[147,40133,40134],{"class":149,"line":2890},[147,40135,38400],{"class":157},[147,40137,40138],{"class":149,"line":2895},[147,40139,38701],{"class":458},[147,40141,40142,40144,40146,40148],{"class":149,"line":8222},[147,40143,31119],{"class":448},[147,40145,38708],{"class":157},[147,40147,445],{"class":397},[147,40149,38283],{"class":157},[147,40151,40152,40154,40156,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180,40182,40184],{"class":149,"line":8246},[147,40153,38288],{"class":157},[147,40155,31130],{"class":5490},[147,40157,445],{"class":397},[147,40159,35144],{"class":448},[147,40161,777],{"class":157},[147,40163,31139],{"class":5490},[147,40165,445],{"class":397},[147,40167,38731],{"class":448},[147,40169,777],{"class":157},[147,40171,31148],{"class":5490},[147,40173,445],{"class":397},[147,40175,471],{"class":448},[147,40177,777],{"class":157},[147,40179,31157],{"class":5490},[147,40181,445],{"class":397},[147,40183,616],{"class":448},[147,40185,38321],{"class":157},[147,40187,40188],{"class":149,"line":8251},[147,40189,38326],{"class":157},[147,40191,40192,40194,40196,40198,40200,40202,40204,40206,40208,40210,40212,40214,40216,40218,40220,40222,40224],{"class":149,"line":8257},[147,40193,38288],{"class":157},[147,40195,31130],{"class":5490},[147,40197,445],{"class":397},[147,40199,38731],{"class":448},[147,40201,777],{"class":157},[147,40203,31139],{"class":5490},[147,40205,445],{"class":397},[147,40207,38731],{"class":448},[147,40209,777],{"class":157},[147,40211,31148],{"class":5490},[147,40213,445],{"class":397},[147,40215,471],{"class":448},[147,40217,777],{"class":157},[147,40219,31157],{"class":5490},[147,40221,445],{"class":397},[147,40223,616],{"class":448},[147,40225,38321],{"class":157},[147,40227,40228],{"class":149,"line":8284},[147,40229,38326],{"class":157},[147,40231,40232,40234,40236,40238,40240,40242,40244,40246,40248,40250,40252,40254,40256,40258,40260,40262,40264],{"class":149,"line":8289},[147,40233,38288],{"class":157},[147,40235,31130],{"class":5490},[147,40237,445],{"class":397},[147,40239,38731],{"class":448},[147,40241,777],{"class":157},[147,40243,31139],{"class":5490},[147,40245,445],{"class":397},[147,40247,38731],{"class":448},[147,40249,777],{"class":157},[147,40251,31148],{"class":5490},[147,40253,445],{"class":397},[147,40255,471],{"class":448},[147,40257,777],{"class":157},[147,40259,31157],{"class":5490},[147,40261,445],{"class":397},[147,40263,616],{"class":448},[147,40265,38321],{"class":157},[147,40267,40268],{"class":149,"line":8295},[147,40269,38326],{"class":157},[147,40271,40272,40274,40276,40278,40280,40282,40284,40286,40288,40290,40292,40294,40296],{"class":149,"line":8307},[147,40273,38371],{"class":157},[147,40275,31148],{"class":5490},[147,40277,445],{"class":397},[147,40279,477],{"class":448},[147,40281,777],{"class":157},[147,40283,31203],{"class":5490},[147,40285,445],{"class":397},[147,40287,477],{"class":448},[147,40289,777],{"class":157},[147,40291,31157],{"class":5490},[147,40293,445],{"class":397},[147,40295,590],{"class":448},[147,40297,407],{"class":157},[147,40299,40300],{"class":149,"line":8319},[147,40301,38400],{"class":157},[147,40303,40304],{"class":149,"line":8331},[147,40305,38870],{"class":458},[147,40307,40308,40310,40312,40314],{"class":149,"line":9990},[147,40309,31119],{"class":448},[147,40311,38877],{"class":157},[147,40313,445],{"class":397},[147,40315,38283],{"class":157},[147,40317,40318,40320,40322,40324,40326,40328,40330,40332,40334,40336,40338,40340,40342,40344,40346,40348,40350],{"class":149,"line":10015},[147,40319,38288],{"class":157},[147,40321,31130],{"class":5490},[147,40323,445],{"class":397},[147,40325,38731],{"class":448},[147,40327,777],{"class":157},[147,40329,31139],{"class":5490},[147,40331,445],{"class":397},[147,40333,38731],{"class":448},[147,40335,777],{"class":157},[147,40337,31148],{"class":5490},[147,40339,445],{"class":397},[147,40341,471],{"class":448},[147,40343,777],{"class":157},[147,40345,31157],{"class":5490},[147,40347,445],{"class":397},[147,40349,616],{"class":448},[147,40351,38321],{"class":157},[147,40353,40354],{"class":149,"line":10038},[147,40355,38326],{"class":157},[147,40357,40358,40360,40362,40364,40366,40368,40370,40372,40374,40376,40378,40380,40382,40384,40386,40388,40390],{"class":149,"line":10062},[147,40359,38288],{"class":157},[147,40361,31130],{"class":5490},[147,40363,445],{"class":397},[147,40365,38731],{"class":448},[147,40367,777],{"class":157},[147,40369,31139],{"class":5490},[147,40371,445],{"class":397},[147,40373,38731],{"class":448},[147,40375,777],{"class":157},[147,40377,31148],{"class":5490},[147,40379,445],{"class":397},[147,40381,471],{"class":448},[147,40383,777],{"class":157},[147,40385,31157],{"class":5490},[147,40387,445],{"class":397},[147,40389,616],{"class":448},[147,40391,38321],{"class":157},[147,40393,40394],{"class":149,"line":10067},[147,40395,38326],{"class":157},[147,40397,40398,40400,40402,40404,40406,40408,40410,40412,40414,40416,40418,40420,40422,40424,40426,40428,40430],{"class":149,"line":10072},[147,40399,38288],{"class":157},[147,40401,31130],{"class":5490},[147,40403,445],{"class":397},[147,40405,38731],{"class":448},[147,40407,777],{"class":157},[147,40409,31139],{"class":5490},[147,40411,445],{"class":397},[147,40413,38731],{"class":448},[147,40415,777],{"class":157},[147,40417,31148],{"class":5490},[147,40419,445],{"class":397},[147,40421,471],{"class":448},[147,40423,777],{"class":157},[147,40425,31157],{"class":5490},[147,40427,445],{"class":397},[147,40429,616],{"class":448},[147,40431,38321],{"class":157},[147,40433,40434],{"class":149,"line":10077},[147,40435,38326],{"class":157},[147,40437,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460,40462],{"class":149,"line":10086},[147,40439,38371],{"class":157},[147,40441,31148],{"class":5490},[147,40443,445],{"class":397},[147,40445,477],{"class":448},[147,40447,777],{"class":157},[147,40449,31203],{"class":5490},[147,40451,445],{"class":397},[147,40453,477],{"class":448},[147,40455,777],{"class":157},[147,40457,31157],{"class":5490},[147,40459,445],{"class":397},[147,40461,590],{"class":448},[147,40463,407],{"class":157},[147,40465,40466],{"class":149,"line":10091},[147,40467,38400],{"class":157},[147,40469,40470],{"class":149,"line":10097},[147,40471,39038],{"class":458},[147,40473,40474,40476,40478,40480],{"class":149,"line":10118},[147,40475,31119],{"class":448},[147,40477,39045],{"class":157},[147,40479,445],{"class":397},[147,40481,38283],{"class":157},[147,40483,40484],{"class":149,"line":10124},[147,40485,39054],{"class":458},[147,40487,40488],{"class":149,"line":10138},[147,40489,39059],{"class":458},[147,40491,40492],{"class":149,"line":10144},[147,40493,39064],{"class":157},[147,40495,40496,40498,40500,40502,40504,40506,40508,40510,40512],{"class":149,"line":10171},[147,40497,39069],{"class":157},[147,40499,768],{"class":448},[147,40501,854],{"class":397},[147,40503,768],{"class":448},[147,40505,854],{"class":397},[147,40507,38731],{"class":448},[147,40509,777],{"class":157},[147,40511,35144],{"class":448},[147,40513,38321],{"class":157},[147,40515,40516],{"class":149,"line":10180},[147,40517,38326],{"class":157},[147,40519,40520,40522,40524,40526,40528],{"class":149,"line":10186},[147,40521,39069],{"class":157},[147,40523,35144],{"class":448},[147,40525,777],{"class":157},[147,40527,32344],{"class":448},[147,40529,38321],{"class":157},[147,40531,40532],{"class":149,"line":10194},[147,40533,38326],{"class":157},[147,40535,40536,40538,40540,40542,40544],{"class":149,"line":10199},[147,40537,39069],{"class":157},[147,40539,32344],{"class":448},[147,40541,777],{"class":157},[147,40543,845],{"class":448},[147,40545,407],{"class":157},[147,40547,40548],{"class":149,"line":16877},[147,40549,38400],{"class":157},[147,40551,40552],{"class":149,"line":16883},[147,40553,2674],{"emptyLinePlaceholder":324},[147,40555,40556],{"class":149,"line":16906},[147,40557,39130],{"class":458},[147,40559,40560],{"class":149,"line":16912},[147,40561,39135],{"class":458},[147,40563,40564,40566,40568,40570,40572],{"class":149,"line":16935},[147,40565,3677],{"class":397},[147,40567,39142],{"class":157},[147,40569,26317],{"class":397},[147,40571,39147],{"class":448},[147,40573,39150],{"class":157},[147,40575,40576],{"class":149,"line":16949},[147,40577,39155],{"class":458},[147,40579,40580,40582,40584],{"class":149,"line":16969},[147,40581,4916],{"class":397},[147,40583,39162],{"class":448},[147,40585,39165],{"class":157},[147,40587,40588],{"class":149,"line":16975},[147,40589,39170],{"class":458},[147,40591,40592,40594,40596,40598,40600],{"class":149,"line":16986},[147,40593,39175],{"class":157},[147,40595,39178],{"class":5490},[147,40597,445],{"class":397},[147,40599,39183],{"class":504},[147,40601,407],{"class":157},[147,40603,40604],{"class":149,"line":17009},[147,40605,39190],{"class":458},[147,40607,40608,40610,40612,40614,40616,40618],{"class":149,"line":17031},[147,40609,39195],{"class":397},[147,40611,39198],{"class":157},[147,40613,39201],{"class":397},[147,40615,39204],{"class":397},[147,40617,39207],{"class":448},[147,40619,4013],{"class":157},[147,40621,40622],{"class":149,"line":17036},[147,40623,39214],{"class":458},[147,40625,40626,40628,40630],{"class":149,"line":17042},[147,40627,39219],{"class":157},[147,40629,590],{"class":448},[147,40631,407],{"class":157},[147,40633,40634],{"class":149,"line":17056},[147,40635,39228],{"class":458},[147,40637,40638,40640,40642],{"class":149,"line":17069},[147,40639,39233],{"class":397},[147,40641,39162],{"class":448},[147,40643,39238],{"class":157},[147,40645,40646],{"class":149,"line":17074},[147,40647,39243],{"class":458},[147,40649,40650],{"class":149,"line":17088},[147,40651,39248],{"class":458},[147,40653,40654,40656,40658,40660,40662],{"class":149,"line":17093},[147,40655,39253],{"class":157},[147,40657,590],{"class":448},[147,40659,777],{"class":157},[147,40661,39260],{"class":448},[147,40663,407],{"class":157},[147,40665,40666],{"class":149,"line":17099},[147,40667,39267],{"class":458},[147,40669,40670,40672,40674,40676,40678,40680],{"class":149,"line":17104},[147,40671,39195],{"class":397},[147,40673,39198],{"class":157},[147,40675,39201],{"class":397},[147,40677,39204],{"class":397},[147,40679,39207],{"class":448},[147,40681,4013],{"class":157},[147,40683,40684,40686,40688],{"class":149,"line":17118},[147,40685,39219],{"class":157},[147,40687,590],{"class":448},[147,40689,407],{"class":157},[147,40691,40692],{"class":149,"line":17123},[147,40693,2674],{"emptyLinePlaceholder":324},[147,40695,40696],{"class":149,"line":17128},[147,40697,35439],{"class":458},[147,40699,40700,40702,40704],{"class":149,"line":17142},[147,40701,31075],{"class":397},[147,40703,31367],{"class":2237},[147,40705,31370],{"class":157},[147,40707,40708,40710,40712,40714],{"class":149,"line":17154},[147,40709,31375],{"class":157},[147,40711,445],{"class":397},[147,40713,31097],{"class":448},[147,40715,39316],{"class":157},[147,40717,40718,40720,40722,40724],{"class":149,"line":17159},[147,40719,31375],{"class":157},[147,40721,445],{"class":397},[147,40723,31097],{"class":448},[147,40725,39327],{"class":157},[147,40727,40728,40730,40732,40734],{"class":149,"line":17172},[147,40729,31375],{"class":157},[147,40731,445],{"class":397},[147,40733,31097],{"class":448},[147,40735,39338],{"class":157},[147,40737,40738,40740,40742,40744],{"class":149,"line":17177},[147,40739,31375],{"class":157},[147,40741,445],{"class":397},[147,40743,31097],{"class":448},[147,40745,39349],{"class":157},[147,40747,40748,40750,40752,40754],{"class":149,"line":17182},[147,40749,31375],{"class":157},[147,40751,445],{"class":397},[147,40753,31097],{"class":448},[147,40755,39360],{"class":157},[147,40757,40758,40760,40762,40764],{"class":149,"line":17187},[147,40759,31375],{"class":157},[147,40761,445],{"class":397},[147,40763,31097],{"class":448},[147,40765,39371],{"class":157},[147,40767,40768,40770],{"class":149,"line":17200},[147,40769,15025],{"class":397},[147,40771,31483],{"class":157},[147,40773,40774],{"class":149,"line":17205},[147,40775,2674],{"emptyLinePlaceholder":324},[147,40777,40778],{"class":149,"line":32907},[147,40779,39386],{"class":458},[147,40781,40782,40784,40786,40788,40790],{"class":149,"line":32913},[147,40783,1805],{"class":397},[147,40785,31494],{"class":448},[147,40787,3223],{"class":397},[147,40789,39397],{"class":504},[147,40791,4013],{"class":157},[147,40793,40794,40796,40798,40800,40802,40804,40806,40808,40810],{"class":149,"line":32919},[147,40795,31511],{"class":157},[147,40797,445],{"class":397},[147,40799,30725],{"class":157},[147,40801,31518],{"class":504},[147,40803,1978],{"class":397},[147,40805,31523],{"class":157},[147,40807,1975],{"class":397},[147,40809,30750],{"class":504},[147,40811,407],{"class":157},[147,40813,40814,40816],{"class":149,"line":32925},[147,40815,31573],{"class":448},[147,40817,30759],{"class":157},[147,40819,40820,40822,40824],{"class":149,"line":32931},[147,40821,31563],{"class":157},[147,40823,445],{"class":397},[147,40825,39434],{"class":157},[147,40827,40828,40830,40832,40834,40836,40838,40840,40842],{"class":149,"line":32942},[147,40829,31573],{"class":448},[147,40831,31576],{"class":157},[147,40833,616],{"class":448},[147,40835,777],{"class":157},[147,40837,31775],{"class":448},[147,40839,777],{"class":157},[147,40841,31775],{"class":448},[147,40843,31589],{"class":157},[350,40845,40846],{"start":1454},[353,40847,40848],{},"测试代码",[138,40850,40852],{"className":30652,"code":40851,"language":30654,"meta":143,"style":143},"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",[51,40853,40854,40860,40870,40880,40884,40894,40905,40909,40913,40917,40925,40941,40951,40967,40977,40991,40995,41005,41015,41025,41031,41035,41039,41047,41051,41067,41075,41079,41083,41091,41099,41103,41107,41111,41115,41121,41125,41135,41143,41151,41155,41159,41163,41171,41175,41191,41195,41199,41203,41215,41219,41231,41235,41239,41251,41255,41265,41269,41273,41285,41289,41298,41302,41306,41314,41318,41326,41330,41334,41338,41342,41346,41362,41370,41374,41378,41426,41432,41436,41446,41454,41462,41466,41470,41474,41478,41486,41490,41506,41510,41518,41526],{"__ignoreMap":143},[147,40855,40856,40858],{"class":149,"line":150},[147,40857,30666],{"class":397},[147,40859,30669],{"class":157},[147,40861,40862,40864,40866,40868],{"class":149,"line":312},[147,40863,30666],{"class":397},[147,40865,31689],{"class":157},[147,40867,31657],{"class":397},[147,40869,31694],{"class":157},[147,40871,40872,40874,40876,40878],{"class":149,"line":1454},[147,40873,31011],{"class":397},[147,40875,31672],{"class":157},[147,40877,30666],{"class":397},[147,40879,31677],{"class":157},[147,40881,40882],{"class":149,"line":1469},[147,40883,34196],{"class":458},[147,40885,40886,40888,40890,40892],{"class":149,"line":1475},[147,40887,31011],{"class":397},[147,40889,31642],{"class":157},[147,40891,30666],{"class":397},[147,40893,31647],{"class":157},[147,40895,40896,40898,40900,40902],{"class":149,"line":1489},[147,40897,31011],{"class":397},[147,40899,32188],{"class":157},[147,40901,30666],{"class":397},[147,40903,40904],{"class":448}," VGG16\n",[147,40906,40907],{"class":149,"line":1495},[147,40908,2674],{"emptyLinePlaceholder":324},[147,40910,40911],{"class":149,"line":1586},[147,40912,2674],{"emptyLinePlaceholder":324},[147,40914,40915],{"class":149,"line":1592},[147,40916,34225],{"class":458},[147,40918,40919,40921,40923],{"class":149,"line":1604},[147,40920,32221],{"class":397},[147,40922,34232],{"class":2237},[147,40924,32227],{"class":157},[147,40926,40927,40929,40931,40933,40935,40937,40939],{"class":149,"line":1886},[147,40928,34239],{"class":157},[147,40930,445],{"class":397},[147,40932,31729],{"class":157},[147,40934,31732],{"class":5490},[147,40936,445],{"class":397},[147,40938,31737],{"class":504},[147,40940,31740],{"class":157},[147,40942,40943,40945,40947,40949],{"class":149,"line":1891},[147,40944,34256],{"class":5490},[147,40946,445],{"class":397},[147,40948,34261],{"class":448},[147,40950,31740],{"class":157},[147,40952,40953,40955,40957,40959,40961,40963,40965],{"class":149,"line":1897},[147,40954,34268],{"class":5490},[147,40956,445],{"class":397},[147,40958,31767],{"class":157},[147,40960,31770],{"class":5490},[147,40962,445],{"class":397},[147,40964,31775],{"class":448},[147,40966,31778],{"class":157},[147,40968,40969,40971,40973,40975],{"class":149,"line":1902},[147,40970,34285],{"class":5490},[147,40972,445],{"class":397},[147,40974,31750],{"class":448},[147,40976,407],{"class":157},[147,40978,40979,40981,40983,40985,40987,40989],{"class":149,"line":1916},[147,40980,34296],{"class":157},[147,40982,445],{"class":397},[147,40984,31808],{"class":157},[147,40986,31811],{"class":5490},[147,40988,445],{"class":397},[147,40990,34307],{"class":157},[147,40992,40993],{"class":149,"line":1921},[147,40994,34312],{"class":458},[147,40996,40997,40999,41001,41003],{"class":149,"line":1927},[147,40998,34317],{"class":5490},[147,41000,445],{"class":397},[147,41002,616],{"class":448},[147,41004,31740],{"class":157},[147,41006,41007,41009,41011,41013],{"class":149,"line":1948},[147,41008,34328],{"class":5490},[147,41010,445],{"class":397},[147,41012,31750],{"class":448},[147,41014,31740],{"class":157},[147,41016,41017,41019,41021,41023],{"class":149,"line":1953},[147,41018,34339],{"class":5490},[147,41020,445],{"class":397},[147,41022,590],{"class":448},[147,41024,407],{"class":157},[147,41026,41027,41029],{"class":149,"line":1967},[147,41028,4364],{"class":397},[147,41030,34352],{"class":157},[147,41032,41033],{"class":149,"line":1972},[147,41034,2674],{"emptyLinePlaceholder":324},[147,41036,41037],{"class":149,"line":2001},[147,41038,34361],{"class":458},[147,41040,41041,41043,41045],{"class":149,"line":2006},[147,41042,32221],{"class":397},[147,41044,34368],{"class":2237},[147,41046,34371],{"class":157},[147,41048,41049],{"class":149,"line":2023},[147,41050,34376],{"class":458},[147,41052,41053,41055,41057,41059,41061,41063,41065],{"class":149,"line":2028},[147,41054,31511],{"class":157},[147,41056,445],{"class":397},[147,41058,31518],{"class":504},[147,41060,1978],{"class":397},[147,41062,31523],{"class":157},[147,41064,1975],{"class":397},[147,41066,34393],{"class":504},[147,41068,41069,41071,41073],{"class":149,"line":2033},[147,41070,31563],{"class":157},[147,41072,445],{"class":397},[147,41074,32563],{"class":157},[147,41076,41077],{"class":149,"line":2038},[147,41078,2674],{"emptyLinePlaceholder":324},[147,41080,41081],{"class":149,"line":2052},[147,41082,34410],{"class":458},[147,41084,41085,41087,41089],{"class":149,"line":2057},[147,41086,34415],{"class":157},[147,41088,445],{"class":397},[147,41090,32616],{"class":448},[147,41092,41093,41095,41097],{"class":149,"line":2851},[147,41094,34424],{"class":157},[147,41096,445],{"class":397},[147,41098,3359],{"class":448},[147,41100,41101],{"class":149,"line":2865},[147,41102,2674],{"emptyLinePlaceholder":324},[147,41104,41105],{"class":149,"line":2873},[147,41106,34437],{"class":458},[147,41108,41109],{"class":149,"line":2878},[147,41110,34442],{"class":458},[147,41112,41113],{"class":149,"line":2884},[147,41114,34447],{"class":458},[147,41116,41117,41119],{"class":149,"line":2890},[147,41118,34452],{"class":397},[147,41120,33158],{"class":157},[147,41122,41123],{"class":149,"line":2895},[147,41124,34459],{"class":458},[147,41126,41127,41129,41131,41133],{"class":149,"line":8222},[147,41128,3677],{"class":397},[147,41130,34466],{"class":157},[147,41132,26317],{"class":397},[147,41134,34471],{"class":157},[147,41136,41137,41139,41141],{"class":149,"line":8246},[147,41138,34476],{"class":157},[147,41140,445],{"class":397},[147,41142,34481],{"class":157},[147,41144,41145,41147,41149],{"class":149,"line":8251},[147,41146,34486],{"class":157},[147,41148,445],{"class":397},[147,41150,34491],{"class":157},[147,41152,41153],{"class":149,"line":8257},[147,41154,34496],{"class":458},[147,41156,41157],{"class":149,"line":8284},[147,41158,33149],{"class":157},[147,41160,41161],{"class":149,"line":8289},[147,41162,34505],{"class":458},[147,41164,41165,41167,41169],{"class":149,"line":8295},[147,41166,32934],{"class":157},[147,41168,445],{"class":397},[147,41170,34514],{"class":157},[147,41172,41173],{"class":149,"line":8307},[147,41174,34519],{"class":458},[147,41176,41177,41179,41181,41183,41185,41187,41189],{"class":149,"line":8319},[147,41178,32951],{"class":157},[147,41180,445],{"class":397},[147,41182,32956],{"class":157},[147,41184,32959],{"class":5490},[147,41186,445],{"class":397},[147,41188,616],{"class":448},[147,41190,407],{"class":157},[147,41192,41193],{"class":149,"line":8331},[147,41194,34540],{"class":458},[147,41196,41197],{"class":149,"line":9990},[147,41198,34545],{"class":458},[147,41200,41201],{"class":149,"line":10015},[147,41202,34550],{"class":458},[147,41204,41205,41207,41209,41211,41213],{"class":149,"line":10038},[147,41206,34555],{"class":157},[147,41208,9751],{"class":397},[147,41210,33061],{"class":157},[147,41212,3223],{"class":397},[147,41214,34564],{"class":157},[147,41216,41217],{"class":149,"line":10062},[147,41218,34569],{"class":458},[147,41220,41221,41223,41225,41227,41229],{"class":149,"line":10067},[147,41222,34574],{"class":157},[147,41224,9751],{"class":397},[147,41226,34579],{"class":157},[147,41228,590],{"class":448},[147,41230,407],{"class":157},[147,41232,41233],{"class":149,"line":10072},[147,41234,2674],{"emptyLinePlaceholder":324},[147,41236,41237],{"class":149,"line":10077},[147,41238,34592],{"class":458},[147,41240,41241,41243,41245,41247,41249],{"class":149,"line":10086},[147,41242,34597],{"class":157},[147,41244,445],{"class":397},[147,41246,34602],{"class":157},[147,41248,983],{"class":397},[147,41250,34607],{"class":157},[147,41252,41253],{"class":149,"line":10091},[147,41254,34612],{"class":458},[147,41256,41257,41259,41261,41263],{"class":149,"line":10097},[147,41258,32725],{"class":448},[147,41260,401],{"class":157},[147,41262,34621],{"class":504},[147,41264,34624],{"class":157},[147,41266,41267],{"class":149,"line":10118},[147,41268,2674],{"emptyLinePlaceholder":324},[147,41270,41271],{"class":149,"line":10124},[147,41272,34633],{"class":458},[147,41274,41275,41277,41279,41281,41283],{"class":149,"line":10138},[147,41276,1805],{"class":397},[147,41278,31494],{"class":448},[147,41280,3223],{"class":397},[147,41282,31499],{"class":504},[147,41284,4013],{"class":157},[147,41286,41287],{"class":149,"line":10144},[147,41288,34650],{"class":458},[147,41290,41291,41293,41295],{"class":149,"line":10171},[147,41292,31563],{"class":157},[147,41294,445],{"class":397},[147,41296,41297],{"class":157},"VGG16()\n",[147,41299,41300],{"class":149,"line":10180},[147,41301,34663],{"class":458},[147,41303,41304],{"class":149,"line":10186},[147,41305,34668],{"class":458},[147,41307,41308,41310,41312],{"class":149,"line":10194},[147,41309,34673],{"class":157},[147,41311,34676],{"class":504},[147,41313,30771],{"class":157},[147,41315,41316],{"class":149,"line":10199},[147,41317,34683],{"class":458},[147,41319,41320,41322,41324],{"class":149,"line":16877},[147,41321,34296],{"class":157},[147,41323,445],{"class":397},[147,41325,34692],{"class":157},[147,41327,41328],{"class":149,"line":16883},[147,41329,34697],{"class":458},[147,41331,41332],{"class":149,"line":16906},[147,41333,34702],{"class":157},[147,41335,41336],{"class":149,"line":16912},[147,41337,2674],{"emptyLinePlaceholder":324},[147,41339,41340],{"class":149,"line":16935},[147,41341,34711],{"class":458},[147,41343,41344],{"class":149,"line":16949},[147,41345,34716],{"class":458},[147,41347,41348,41350,41352,41354,41356,41358,41360],{"class":149,"line":16969},[147,41349,31511],{"class":157},[147,41351,445],{"class":397},[147,41353,31518],{"class":504},[147,41355,1978],{"class":397},[147,41357,31523],{"class":157},[147,41359,1975],{"class":397},[147,41361,34393],{"class":504},[147,41363,41364,41366,41368],{"class":149,"line":16975},[147,41365,31563],{"class":157},[147,41367,445],{"class":397},[147,41369,32563],{"class":157},[147,41371,41372],{"class":149,"line":16986},[147,41373,34745],{"class":458},[147,41375,41376],{"class":149,"line":17009},[147,41377,34750],{"class":458},[147,41379,41380,41382,41384,41386,41388,41390,41392,41394,41396,41398,41400,41402,41404,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424],{"class":149,"line":17031},[147,41381,34755],{"class":157},[147,41383,445],{"class":397},[147,41385,1289],{"class":157},[147,41387,34762],{"class":504},[147,41389,777],{"class":157},[147,41391,34767],{"class":504},[147,41393,777],{"class":157},[147,41395,34772],{"class":504},[147,41397,777],{"class":157},[147,41399,34777],{"class":504},[147,41401,777],{"class":157},[147,41403,34782],{"class":504},[147,41405,777],{"class":157},[147,41407,34787],{"class":504},[147,41409,777],{"class":157},[147,41411,34792],{"class":504},[147,41413,777],{"class":157},[147,41415,34797],{"class":504},[147,41417,777],{"class":157},[147,41419,34802],{"class":504},[147,41421,777],{"class":157},[147,41423,34807],{"class":504},[147,41425,33520],{"class":157},[147,41427,41428,41430],{"class":149,"line":17036},[147,41429,34452],{"class":397},[147,41431,33158],{"class":157},[147,41433,41434],{"class":149,"line":17042},[147,41435,34820],{"class":458},[147,41437,41438,41440,41442,41444],{"class":149,"line":17056},[147,41439,3677],{"class":397},[147,41441,34827],{"class":157},[147,41443,26317],{"class":397},[147,41445,34471],{"class":157},[147,41447,41448,41450,41452],{"class":149,"line":17069},[147,41449,32884],{"class":157},[147,41451,445],{"class":397},[147,41453,32889],{"class":157},[147,41455,41456,41458,41460],{"class":149,"line":17074},[147,41457,32899],{"class":157},[147,41459,445],{"class":397},[147,41461,32904],{"class":157},[147,41463,41464],{"class":149,"line":17088},[147,41465,2674],{"emptyLinePlaceholder":324},[147,41467,41468],{"class":149,"line":17093},[147,41469,34856],{"class":458},[147,41471,41472],{"class":149,"line":17099},[147,41473,33149],{"class":157},[147,41475,41476],{"class":149,"line":17104},[147,41477,34865],{"class":458},[147,41479,41480,41482,41484],{"class":149,"line":17118},[147,41481,32934],{"class":157},[147,41483,445],{"class":397},[147,41485,32939],{"class":157},[147,41487,41488],{"class":149,"line":17123},[147,41489,34878],{"class":458},[147,41491,41492,41494,41496,41498,41500,41502,41504],{"class":149,"line":17128},[147,41493,32951],{"class":157},[147,41495,445],{"class":397},[147,41497,32956],{"class":157},[147,41499,32959],{"class":5490},[147,41501,445],{"class":397},[147,41503,616],{"class":448},[147,41505,407],{"class":157},[147,41507,41508],{"class":149,"line":17142},[147,41509,34899],{"class":458},[147,41511,41512,41514,41516],{"class":149,"line":17154},[147,41513,34904],{"class":157},[147,41515,445],{"class":397},[147,41517,34909],{"class":157},[147,41519,41520,41522,41524],{"class":149,"line":17159},[147,41521,34914],{"class":157},[147,41523,445],{"class":397},[147,41525,34919],{"class":157},[147,41527,41528,41530,41532,41534,41536,41538,41540,41542],{"class":149,"line":17172},[147,41529,34924],{"class":448},[147,41531,401],{"class":157},[147,41533,34929],{"class":504},[147,41535,34932],{"class":157},[147,41537,34935],{"class":504},[147,41539,777],{"class":157},[147,41541,34940],{"class":504},[147,41543,34943],{"class":157},[367,41545,41547],{"id":41546},"_23googlenet","2.3.GoogLeNet",[22271,41549,41551],{"id":41550},"_231原理","2.3.1.原理",[350,41553,41554],{},[353,41555,41556],{},"网络结构",[19,41558,41559],{},[29,41560],{"alt":143,"src":41561},"\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,41563,41564],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,41566,41567],{},[29,41568],{"alt":143,"src":41569},"\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,41571,41572],{},[29,41573],{"alt":143,"src":41574},"\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,41576,41577],{},[29,41578],{"alt":143,"src":41579},"\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",[350,41581,41582],{"start":312},[353,41583,41584],{},"1x1卷积的优点",[19,41586,41587],{},[29,41588],{"alt":143,"src":41589},"\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",[350,41591,41592],{"start":1454},[353,41593,41594],{},"全局平均池化层优点",[19,41596,41597],{},[29,41598],{"alt":143,"src":41599},"\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,41601,41602],{},[29,41603],{"alt":143,"src":41604},"\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",[350,41606,41607],{"start":1469},[353,41608,41609],{},"参数详细描述",[19,41611,41612],{},[29,41613],{"alt":143,"src":41614},"\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,41616,41617],{},[29,41618],{"alt":143,"src":41619},"\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,41621,41622],{},[29,41623],{"alt":143,"src":41624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,41626,41627],{},[29,41628],{"alt":143,"src":41629},"\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,41631,41632],{},[29,41633],{"alt":143,"src":41634},"\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,41636,41637],{},[29,41638],{"alt":143,"src":41639},"\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,41641,41642],{},[29,41643],{"alt":143,"src":41644},"\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,41646,41647],{},[29,41648],{"alt":143,"src":41649},"\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,41651,41652],{},[29,41653],{"alt":143,"src":41654},"\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,41656,41657],{},[29,41658],{"alt":143,"src":41659},"\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,41661,41662],{},[29,41663],{"alt":143,"src":41664},"\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,41666,41667],{},[29,41668],{"alt":143,"src":41669},"\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,41671,41672],{},[29,41673],{"alt":143,"src":41674},"\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,41676,41677],{},[29,41678],{"alt":143,"src":41679},"\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,41681,41682],{},[29,41683],{"alt":143,"src":41684},"\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,41686,41687],{},[29,41688],{"alt":143,"src":41689},"\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,41691,41692],{},[29,41693],{"alt":143,"src":41694},"\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,41696,41697],{},[29,41698],{"alt":143,"src":41699},"\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,41701,41702],{},[29,41703],{"alt":143,"src":41704},"\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,41706,41707],{},[29,41708],{"alt":143,"src":41709},"\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,41711,41712],{},[29,41713],{"alt":143,"src":41714},"\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",[22271,41716,41718],{"id":41717},"_232代码实现","2.3.2.代码实现",[350,41720,41721],{},[353,41722,30985],{},[19,41724,41725],{},"根据原理一步一步搭建即可",[138,41727,41729],{"className":30652,"code":41728,"language":30654,"meta":143,"style":143},"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",[51,41730,41731,41737,41747,41757,41761,41778,41787,41802,41812,41817,41850,41855,41892,41939,41944,41980,42027,42032,42037,42072,42104,42108,42116,42132,42156,42181,42202,42207,42222,42226,42230,42235,42252,42257,42266,42281,42292,42336,42340,42368,42372,42383,42411,42415,42452,42456,42484,42488,42499,42535,42567,42595,42599,42610,42644,42676,42708,42741,42775,42803,42807,42818,42851,42883,42897,42901,42914,42918,42923,42935,42943,42965,42970,42975,42980,42985,42990,42995,43009,43017,43026,43039,43054,43063,43067,43075,43086,43097,43108,43119,43130,43136,43140,43145,43157,43177,43186],{"__ignoreMap":143},[147,41732,41733,41735],{"class":149,"line":150},[147,41734,30666],{"class":397},[147,41736,30669],{"class":157},[147,41738,41739,41741,41743,41745],{"class":149,"line":312},[147,41740,31011],{"class":397},[147,41742,31014],{"class":157},[147,41744,30666],{"class":397},[147,41746,31019],{"class":157},[147,41748,41749,41751,41753,41755],{"class":149,"line":1454},[147,41750,31011],{"class":397},[147,41752,31031],{"class":157},[147,41754,30666],{"class":397},[147,41756,31036],{"class":157},[147,41758,41759],{"class":149,"line":1469},[147,41760,2674],{"emptyLinePlaceholder":324},[147,41762,41763,41765,41768,41770,41772,41774,41776],{"class":149,"line":1475},[147,41764,14967],{"class":397},[147,41766,41767],{"class":2237}," Inception",[147,41769,401],{"class":157},[147,41771,31052],{"class":2237},[147,41773,957],{"class":157},[147,41775,31057],{"class":2237},[147,41777,31060],{"class":157},[147,41779,41780,41782,41784],{"class":149,"line":1489},[147,41781,31075],{"class":397},[147,41783,31078],{"class":448},[147,41785,41786],{"class":157},"(self,in_channels,c1,c2,c3,c4):\n",[147,41788,41789,41791,41794,41796,41798,41800],{"class":149,"line":1495},[147,41790,31091],{"class":448},[147,41792,41793],{"class":157},"(Inception,",[147,41795,31097],{"class":448},[147,41797,31100],{"class":157},[147,41799,31103],{"class":448},[147,41801,2250],{"class":157},[147,41803,41804,41806,41808,41810],{"class":149,"line":1586},[147,41805,31119],{"class":448},[147,41807,35045],{"class":157},[147,41809,445],{"class":397},[147,41811,35050],{"class":157},[147,41813,41814],{"class":149,"line":1592},[147,41815,41816],{"class":458},"        # 路线1：定义1*1卷积\n",[147,41818,41819,41821,41824,41826,41828,41830,41832,41835,41837,41839,41842,41844,41846,41848],{"class":149,"line":1604},[147,41820,31119],{"class":448},[147,41822,41823],{"class":157},".p1_1",[147,41825,445],{"class":397},[147,41827,31127],{"class":157},[147,41829,31130],{"class":5490},[147,41831,445],{"class":397},[147,41833,41834],{"class":157},"in_channels,",[147,41836,31139],{"class":5490},[147,41838,445],{"class":397},[147,41840,41841],{"class":157},"c1,",[147,41843,31148],{"class":5490},[147,41845,445],{"class":397},[147,41847,616],{"class":448},[147,41849,407],{"class":157},[147,41851,41852],{"class":149,"line":1886},[147,41853,41854],{"class":458},"        # 路线2：定义1*1卷积和3*3\n",[147,41856,41857,41859,41862,41864,41866,41868,41870,41872,41874,41876,41879,41881,41884,41886,41888,41890],{"class":149,"line":1891},[147,41858,31119],{"class":448},[147,41860,41861],{"class":157},".p2_1",[147,41863,445],{"class":397},[147,41865,31127],{"class":157},[147,41867,31130],{"class":5490},[147,41869,445],{"class":397},[147,41871,41834],{"class":157},[147,41873,31139],{"class":5490},[147,41875,445],{"class":397},[147,41877,41878],{"class":157},"c2[",[147,41880,590],{"class":448},[147,41882,41883],{"class":157},"],",[147,41885,31148],{"class":5490},[147,41887,445],{"class":397},[147,41889,616],{"class":448},[147,41891,407],{"class":157},[147,41893,41894,41896,41899,41901,41903,41905,41907,41909,41911,41913,41915,41917,41919,41921,41923,41925,41927,41929,41931,41933,41935,41937],{"class":149,"line":1897},[147,41895,31119],{"class":448},[147,41897,41898],{"class":157},".p2_2",[147,41900,445],{"class":397},[147,41902,31127],{"class":157},[147,41904,31130],{"class":5490},[147,41906,445],{"class":397},[147,41908,41878],{"class":157},[147,41910,590],{"class":448},[147,41912,41883],{"class":157},[147,41914,31139],{"class":5490},[147,41916,445],{"class":397},[147,41918,41878],{"class":157},[147,41920,616],{"class":448},[147,41922,41883],{"class":157},[147,41924,31148],{"class":5490},[147,41926,445],{"class":397},[147,41928,471],{"class":448},[147,41930,777],{"class":157},[147,41932,31157],{"class":5490},[147,41934,445],{"class":397},[147,41936,616],{"class":448},[147,41938,407],{"class":157},[147,41940,41941],{"class":149,"line":1902},[147,41942,41943],{"class":458},"        # 路线3：定义1*1卷积和5*5\n",[147,41945,41946,41948,41951,41953,41955,41957,41959,41961,41963,41965,41968,41970,41972,41974,41976,41978],{"class":149,"line":1916},[147,41947,31119],{"class":448},[147,41949,41950],{"class":157},".p3_1",[147,41952,445],{"class":397},[147,41954,31127],{"class":157},[147,41956,31130],{"class":5490},[147,41958,445],{"class":397},[147,41960,41834],{"class":157},[147,41962,31139],{"class":5490},[147,41964,445],{"class":397},[147,41966,41967],{"class":157},"c3[",[147,41969,590],{"class":448},[147,41971,41883],{"class":157},[147,41973,31148],{"class":5490},[147,41975,445],{"class":397},[147,41977,616],{"class":448},[147,41979,407],{"class":157},[147,41981,41982,41984,41987,41989,41991,41993,41995,41997,41999,42001,42003,42005,42007,42009,42011,42013,42015,42017,42019,42021,42023,42025],{"class":149,"line":1921},[147,41983,31119],{"class":448},[147,41985,41986],{"class":157},".p3_2",[147,41988,445],{"class":397},[147,41990,31127],{"class":157},[147,41992,31130],{"class":5490},[147,41994,445],{"class":397},[147,41996,41967],{"class":157},[147,41998,590],{"class":448},[147,42000,41883],{"class":157},[147,42002,31139],{"class":5490},[147,42004,445],{"class":397},[147,42006,41967],{"class":157},[147,42008,616],{"class":448},[147,42010,41883],{"class":157},[147,42012,31148],{"class":5490},[147,42014,445],{"class":397},[147,42016,718],{"class":448},[147,42018,777],{"class":157},[147,42020,31157],{"class":5490},[147,42022,445],{"class":397},[147,42024,477],{"class":448},[147,42026,407],{"class":157},[147,42028,42029],{"class":149,"line":1927},[147,42030,42031],{"class":458},"        # 路线4：定义3*3最大池化和1*1卷积\n",[147,42033,42034],{"class":149,"line":1948},[147,42035,42036],{"class":458},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[147,42038,42039,42041,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062,42064,42066,42068,42070],{"class":149,"line":1953},[147,42040,31119],{"class":448},[147,42042,42043],{"class":157},".p4_1",[147,42045,445],{"class":397},[147,42047,35103],{"class":157},[147,42049,31148],{"class":5490},[147,42051,445],{"class":397},[147,42053,471],{"class":448},[147,42055,777],{"class":157},[147,42057,31203],{"class":5490},[147,42059,445],{"class":397},[147,42061,616],{"class":448},[147,42063,777],{"class":157},[147,42065,31157],{"class":5490},[147,42067,445],{"class":397},[147,42069,616],{"class":448},[147,42071,407],{"class":157},[147,42073,42074,42076,42079,42081,42083,42085,42087,42089,42091,42093,42096,42098,42100,42102],{"class":149,"line":1967},[147,42075,31119],{"class":448},[147,42077,42078],{"class":157},".p4_2",[147,42080,445],{"class":397},[147,42082,31127],{"class":157},[147,42084,31130],{"class":5490},[147,42086,445],{"class":397},[147,42088,41834],{"class":157},[147,42090,31139],{"class":5490},[147,42092,445],{"class":397},[147,42094,42095],{"class":157},"c4,",[147,42097,31148],{"class":5490},[147,42099,445],{"class":397},[147,42101,616],{"class":448},[147,42103,407],{"class":157},[147,42105,42106],{"class":149,"line":1972},[147,42107,2674],{"emptyLinePlaceholder":324},[147,42109,42110,42112,42114],{"class":149,"line":2001},[147,42111,31075],{"class":397},[147,42113,31367],{"class":2237},[147,42115,31370],{"class":157},[147,42117,42118,42121,42123,42125,42127,42129],{"class":149,"line":2006},[147,42119,42120],{"class":157},"        p1",[147,42122,445],{"class":397},[147,42124,31097],{"class":448},[147,42126,35458],{"class":157},[147,42128,31097],{"class":448},[147,42130,42131],{"class":157},".p1_1(x))\n",[147,42133,42134,42136,42138,42140,42142,42144,42147,42149,42151,42153],{"class":149,"line":2023},[147,42135,7359],{"class":157},[147,42137,445],{"class":397},[147,42139,31097],{"class":448},[147,42141,35458],{"class":157},[147,42143,31097],{"class":448},[147,42145,42146],{"class":157},".p2_2(",[147,42148,31097],{"class":448},[147,42150,35458],{"class":157},[147,42152,31097],{"class":448},[147,42154,42155],{"class":157},".p2_1(x))))\n",[147,42157,42158,42161,42163,42165,42167,42169,42172,42174,42176,42178],{"class":149,"line":2028},[147,42159,42160],{"class":157},"        p3",[147,42162,445],{"class":397},[147,42164,31097],{"class":448},[147,42166,35458],{"class":157},[147,42168,31097],{"class":448},[147,42170,42171],{"class":157},".p3_2(",[147,42173,31097],{"class":448},[147,42175,35458],{"class":157},[147,42177,31097],{"class":448},[147,42179,42180],{"class":157},".p3_1(x))))\n",[147,42182,42183,42186,42188,42190,42192,42194,42197,42199],{"class":149,"line":2033},[147,42184,42185],{"class":157},"        p4",[147,42187,445],{"class":397},[147,42189,31097],{"class":448},[147,42191,35458],{"class":157},[147,42193,31097],{"class":448},[147,42195,42196],{"class":157},".p4_2(",[147,42198,31097],{"class":448},[147,42200,42201],{"class":157},".p4_1(x)))\n",[147,42203,42204],{"class":149,"line":2038},[147,42205,42206],{"class":458},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[147,42208,42209,42211,42214,42216,42218,42220],{"class":149,"line":2052},[147,42210,15025],{"class":397},[147,42212,42213],{"class":157}," torch.cat((p1,p2,p3,p4),",[147,42215,32959],{"class":5490},[147,42217,445],{"class":397},[147,42219,616],{"class":448},[147,42221,407],{"class":157},[147,42223,42224],{"class":149,"line":2057},[147,42225,2674],{"emptyLinePlaceholder":324},[147,42227,42228],{"class":149,"line":2851},[147,42229,2674],{"emptyLinePlaceholder":324},[147,42231,42232],{"class":149,"line":2865},[147,42233,42234],{"class":458},"# 搭建GoogLeNet网络\n",[147,42236,42237,42239,42242,42244,42246,42248,42250],{"class":149,"line":2873},[147,42238,14967],{"class":397},[147,42240,42241],{"class":2237}," GoogLeNet",[147,42243,401],{"class":157},[147,42245,31052],{"class":2237},[147,42247,957],{"class":157},[147,42249,31057],{"class":2237},[147,42251,31060],{"class":157},[147,42253,42254],{"class":149,"line":2878},[147,42255,42256],{"class":458},"    # 必须把Inception导入到里边\n",[147,42258,42259,42261,42263],{"class":149,"line":2884},[147,42260,31075],{"class":397},[147,42262,31078],{"class":448},[147,42264,42265],{"class":157},"(self,Inception):\n",[147,42267,42268,42270,42273,42275,42277,42279],{"class":149,"line":2890},[147,42269,31091],{"class":448},[147,42271,42272],{"class":157},"(GoogLeNet,",[147,42274,31097],{"class":448},[147,42276,31100],{"class":157},[147,42278,31103],{"class":448},[147,42280,2250],{"class":157},[147,42282,42283,42285,42288,42290],{"class":149,"line":2895},[147,42284,31119],{"class":448},[147,42286,42287],{"class":157},".b1",[147,42289,445],{"class":397},[147,42291,38283],{"class":157},[147,42293,42294,42296,42298,42300,42302,42304,42306,42308,42310,42312,42314,42316,42318,42320,42322,42324,42326,42328,42330,42332,42334],{"class":149,"line":8222},[147,42295,38288],{"class":157},[147,42297,31130],{"class":5490},[147,42299,445],{"class":397},[147,42301,616],{"class":448},[147,42303,777],{"class":157},[147,42305,31139],{"class":5490},[147,42307,445],{"class":397},[147,42309,602],{"class":448},[147,42311,777],{"class":157},[147,42313,31148],{"class":5490},[147,42315,445],{"class":397},[147,42317,768],{"class":448},[147,42319,777],{"class":157},[147,42321,31203],{"class":5490},[147,42323,445],{"class":397},[147,42325,477],{"class":448},[147,42327,777],{"class":157},[147,42329,31157],{"class":5490},[147,42331,445],{"class":397},[147,42333,471],{"class":448},[147,42335,38321],{"class":157},[147,42337,42338],{"class":149,"line":8246},[147,42339,38326],{"class":157},[147,42341,42342,42344,42346,42348,42350,42352,42354,42356,42358,42360,42362,42364,42366],{"class":149,"line":8251},[147,42343,38371],{"class":157},[147,42345,31148],{"class":5490},[147,42347,445],{"class":397},[147,42349,471],{"class":448},[147,42351,777],{"class":157},[147,42353,31203],{"class":5490},[147,42355,445],{"class":397},[147,42357,477],{"class":448},[147,42359,777],{"class":157},[147,42361,31157],{"class":5490},[147,42363,445],{"class":397},[147,42365,616],{"class":448},[147,42367,407],{"class":157},[147,42369,42370],{"class":149,"line":8257},[147,42371,38400],{"class":157},[147,42373,42374,42376,42379,42381],{"class":149,"line":8284},[147,42375,31119],{"class":448},[147,42377,42378],{"class":157},".b2",[147,42380,445],{"class":397},[147,42382,38283],{"class":157},[147,42384,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409],{"class":149,"line":8289},[147,42386,38288],{"class":157},[147,42388,31130],{"class":5490},[147,42390,445],{"class":397},[147,42392,602],{"class":448},[147,42394,777],{"class":157},[147,42396,31139],{"class":5490},[147,42398,445],{"class":397},[147,42400,602],{"class":448},[147,42402,777],{"class":157},[147,42404,31148],{"class":5490},[147,42406,445],{"class":397},[147,42408,616],{"class":448},[147,42410,38321],{"class":157},[147,42412,42413],{"class":149,"line":8295},[147,42414,38326],{"class":157},[147,42416,42417,42419,42421,42423,42425,42427,42429,42431,42434,42436,42438,42440,42442,42444,42446,42448,42450],{"class":149,"line":8307},[147,42418,38288],{"class":157},[147,42420,31130],{"class":5490},[147,42422,445],{"class":397},[147,42424,602],{"class":448},[147,42426,777],{"class":157},[147,42428,31139],{"class":5490},[147,42430,445],{"class":397},[147,42432,42433],{"class":448},"192",[147,42435,777],{"class":157},[147,42437,31148],{"class":5490},[147,42439,445],{"class":397},[147,42441,471],{"class":448},[147,42443,777],{"class":157},[147,42445,31157],{"class":5490},[147,42447,445],{"class":397},[147,42449,616],{"class":448},[147,42451,38321],{"class":157},[147,42453,42454],{"class":149,"line":8319},[147,42455,38326],{"class":157},[147,42457,42458,42460,42462,42464,42466,42468,42470,42472,42474,42476,42478,42480,42482],{"class":149,"line":8331},[147,42459,38371],{"class":157},[147,42461,31148],{"class":5490},[147,42463,445],{"class":397},[147,42465,471],{"class":448},[147,42467,777],{"class":157},[147,42469,31203],{"class":5490},[147,42471,445],{"class":397},[147,42473,477],{"class":448},[147,42475,777],{"class":157},[147,42477,31157],{"class":5490},[147,42479,445],{"class":397},[147,42481,616],{"class":448},[147,42483,407],{"class":157},[147,42485,42486],{"class":149,"line":9990},[147,42487,38400],{"class":157},[147,42489,42490,42492,42495,42497],{"class":149,"line":10015},[147,42491,31119],{"class":448},[147,42493,42494],{"class":157},".b3",[147,42496,445],{"class":397},[147,42498,38283],{"class":157},[147,42500,42501,42504,42506,42508,42510,42513,42515,42517,42519,42522,42524,42526,42528,42531,42533],{"class":149,"line":10038},[147,42502,42503],{"class":157},"            Inception(",[147,42505,42433],{"class":448},[147,42507,777],{"class":157},[147,42509,602],{"class":448},[147,42511,42512],{"class":157},",(",[147,42514,608],{"class":448},[147,42516,777],{"class":157},[147,42518,32344],{"class":448},[147,42520,42521],{"class":157},"),(",[147,42523,1000],{"class":448},[147,42525,777],{"class":157},[147,42527,596],{"class":448},[147,42529,42530],{"class":157},"),",[147,42532,596],{"class":448},[147,42534,38321],{"class":157},[147,42536,42537,42539,42541,42543,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565],{"class":149,"line":10062},[147,42538,42503],{"class":157},[147,42540,35144],{"class":448},[147,42542,777],{"class":157},[147,42544,32344],{"class":448},[147,42546,42512],{"class":157},[147,42548,32344],{"class":448},[147,42550,777],{"class":157},[147,42552,42433],{"class":448},[147,42554,42521],{"class":157},[147,42556,596],{"class":448},[147,42558,777],{"class":157},[147,42560,608],{"class":448},[147,42562,42530],{"class":157},[147,42564,602],{"class":448},[147,42566,38321],{"class":157},[147,42568,42569,42571,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593],{"class":149,"line":10067},[147,42570,38371],{"class":157},[147,42572,31148],{"class":5490},[147,42574,445],{"class":397},[147,42576,471],{"class":448},[147,42578,777],{"class":157},[147,42580,31203],{"class":5490},[147,42582,445],{"class":397},[147,42584,477],{"class":448},[147,42586,777],{"class":157},[147,42588,31157],{"class":5490},[147,42590,445],{"class":397},[147,42592,616],{"class":448},[147,42594,407],{"class":157},[147,42596,42597],{"class":149,"line":10072},[147,42598,38400],{"class":157},[147,42600,42601,42603,42606,42608],{"class":149,"line":10077},[147,42602,31119],{"class":448},[147,42604,42605],{"class":157},".b4",[147,42607,445],{"class":397},[147,42609,38283],{"class":157},[147,42611,42612,42614,42617,42619,42621,42623,42625,42627,42630,42632,42634,42636,42638,42640,42642],{"class":149,"line":10086},[147,42613,42503],{"class":157},[147,42615,42616],{"class":448},"480",[147,42618,777],{"class":157},[147,42620,42433],{"class":448},[147,42622,42512],{"class":157},[147,42624,608],{"class":448},[147,42626,777],{"class":157},[147,42628,42629],{"class":448},"208",[147,42631,42521],{"class":157},[147,42633,1000],{"class":448},[147,42635,777],{"class":157},[147,42637,1006],{"class":448},[147,42639,42530],{"class":157},[147,42641,602],{"class":448},[147,42643,38321],{"class":157},[147,42645,42646,42648,42650,42652,42654,42656,42658,42660,42662,42664,42666,42668,42670,42672,42674],{"class":149,"line":10091},[147,42647,42503],{"class":157},[147,42649,38731],{"class":448},[147,42651,777],{"class":157},[147,42653,21321],{"class":448},[147,42655,42512],{"class":157},[147,42657,1017],{"class":448},[147,42659,777],{"class":157},[147,42661,31775],{"class":448},[147,42663,42521],{"class":157},[147,42665,1199],{"class":448},[147,42667,777],{"class":157},[147,42669,602],{"class":448},[147,42671,42530],{"class":157},[147,42673,602],{"class":448},[147,42675,38321],{"class":157},[147,42677,42678,42680,42682,42684,42686,42688,42690,42692,42694,42696,42698,42700,42702,42704,42706],{"class":149,"line":10097},[147,42679,42503],{"class":157},[147,42681,38731],{"class":448},[147,42683,777],{"class":157},[147,42685,32344],{"class":448},[147,42687,42512],{"class":157},[147,42689,32344],{"class":448},[147,42691,777],{"class":157},[147,42693,35144],{"class":448},[147,42695,42521],{"class":157},[147,42697,1199],{"class":448},[147,42699,777],{"class":157},[147,42701,602],{"class":448},[147,42703,42530],{"class":157},[147,42705,602],{"class":448},[147,42707,38321],{"class":157},[147,42709,42710,42712,42714,42716,42718,42720,42722,42724,42727,42729,42731,42733,42735,42737,42739],{"class":149,"line":10118},[147,42711,42503],{"class":157},[147,42713,38731],{"class":448},[147,42715,777],{"class":157},[147,42717,1017],{"class":448},[147,42719,42512],{"class":157},[147,42721,32344],{"class":448},[147,42723,777],{"class":157},[147,42725,42726],{"class":448},"288",[147,42728,42521],{"class":157},[147,42730,596],{"class":448},[147,42732,777],{"class":157},[147,42734,602],{"class":448},[147,42736,42530],{"class":157},[147,42738,602],{"class":448},[147,42740,38321],{"class":157},[147,42742,42743,42745,42748,42750,42752,42754,42756,42758,42761,42763,42765,42767,42769,42771,42773],{"class":149,"line":10124},[147,42744,42503],{"class":157},[147,42746,42747],{"class":448},"528",[147,42749,777],{"class":157},[147,42751,35144],{"class":448},[147,42753,42512],{"class":157},[147,42755,21321],{"class":448},[147,42757,777],{"class":157},[147,42759,42760],{"class":448},"320",[147,42762,42521],{"class":157},[147,42764,596],{"class":448},[147,42766,777],{"class":157},[147,42768,32344],{"class":448},[147,42770,42530],{"class":157},[147,42772,32344],{"class":448},[147,42774,38321],{"class":157},[147,42776,42777,42779,42781,42783,42785,42787,42789,42791,42793,42795,42797,42799,42801],{"class":149,"line":10138},[147,42778,38371],{"class":157},[147,42780,31148],{"class":5490},[147,42782,445],{"class":397},[147,42784,471],{"class":448},[147,42786,777],{"class":157},[147,42788,31203],{"class":5490},[147,42790,445],{"class":397},[147,42792,477],{"class":448},[147,42794,777],{"class":157},[147,42796,31157],{"class":5490},[147,42798,445],{"class":397},[147,42800,616],{"class":448},[147,42802,407],{"class":157},[147,42804,42805],{"class":149,"line":10144},[147,42806,38400],{"class":157},[147,42808,42809,42811,42814,42816],{"class":149,"line":10171},[147,42810,31119],{"class":448},[147,42812,42813],{"class":157},".b5",[147,42815,445],{"class":397},[147,42817,38283],{"class":157},[147,42819,42820,42822,42825,42827,42829,42831,42833,42835,42837,42839,42841,42843,42845,42847,42849],{"class":149,"line":10180},[147,42821,42503],{"class":157},[147,42823,42824],{"class":448},"832",[147,42826,777],{"class":157},[147,42828,35144],{"class":448},[147,42830,42512],{"class":157},[147,42832,21321],{"class":448},[147,42834,777],{"class":157},[147,42836,42760],{"class":448},[147,42838,42521],{"class":157},[147,42840,596],{"class":448},[147,42842,777],{"class":157},[147,42844,32344],{"class":448},[147,42846,42530],{"class":157},[147,42848,32344],{"class":448},[147,42850,38321],{"class":157},[147,42852,42853,42855,42857,42859,42861,42863,42865,42867,42869,42871,42873,42875,42877,42879,42881],{"class":149,"line":10186},[147,42854,42503],{"class":157},[147,42856,42824],{"class":448},[147,42858,777],{"class":157},[147,42860,35214],{"class":448},[147,42862,42512],{"class":157},[147,42864,42433],{"class":448},[147,42866,777],{"class":157},[147,42868,35214],{"class":448},[147,42870,42521],{"class":157},[147,42872,1006],{"class":448},[147,42874,777],{"class":157},[147,42876,32344],{"class":448},[147,42878,42530],{"class":157},[147,42880,32344],{"class":448},[147,42882,38321],{"class":157},[147,42884,42885,42888,42890,42892,42894],{"class":149,"line":10194},[147,42886,42887],{"class":157},"            nn.AdaptiveAvgPool2d((",[147,42889,616],{"class":448},[147,42891,777],{"class":157},[147,42893,616],{"class":448},[147,42895,42896],{"class":157},")),\n",[147,42898,42899],{"class":149,"line":10199},[147,42900,39064],{"class":157},[147,42902,42903,42905,42908,42910,42912],{"class":149,"line":16877},[147,42904,39069],{"class":157},[147,42906,42907],{"class":448},"1024",[147,42909,777],{"class":157},[147,42911,845],{"class":448},[147,42913,407],{"class":157},[147,42915,42916],{"class":149,"line":16883},[147,42917,38400],{"class":157},[147,42919,42920],{"class":149,"line":16906},[147,42921,42922],{"class":458},"        # 对模型参数初始化\n",[147,42924,42925,42927,42929,42931,42933],{"class":149,"line":16912},[147,42926,3677],{"class":397},[147,42928,39142],{"class":157},[147,42930,26317],{"class":397},[147,42932,39147],{"class":448},[147,42934,39150],{"class":157},[147,42936,42937,42939,42941],{"class":149,"line":16935},[147,42938,4916],{"class":397},[147,42940,39162],{"class":448},[147,42942,39165],{"class":157},[147,42944,42945,42947,42950,42952,42955,42957,42959,42961,42963],{"class":149,"line":16949},[147,42946,39175],{"class":157},[147,42948,42949],{"class":5490},"mode",[147,42951,445],{"class":397},[147,42953,42954],{"class":504},"'fan_out'",[147,42956,777],{"class":157},[147,42958,39178],{"class":5490},[147,42960,445],{"class":397},[147,42962,39183],{"class":504},[147,42964,407],{"class":157},[147,42966,42967],{"class":149,"line":16969},[147,42968,42969],{"class":458},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[147,42971,42972],{"class":149,"line":16975},[147,42973,42974],{"class":458},"                # ② mode = 'fan_out'决定使用的fan值：\n",[147,42976,42977],{"class":149,"line":16986},[147,42978,42979],{"class":458},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[147,42981,42982],{"class":149,"line":17009},[147,42983,42984],{"class":458},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[147,42986,42987],{"class":149,"line":17031},[147,42988,42989],{"class":458},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[147,42991,42992],{"class":149,"line":17036},[147,42993,42994],{"class":458},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[147,42996,42997,42999,43001,43003,43005,43007],{"class":149,"line":17042},[147,42998,39195],{"class":397},[147,43000,39198],{"class":157},[147,43002,39201],{"class":397},[147,43004,39204],{"class":397},[147,43006,39207],{"class":448},[147,43008,4013],{"class":157},[147,43010,43011,43013,43015],{"class":149,"line":17056},[147,43012,39219],{"class":157},[147,43014,590],{"class":448},[147,43016,407],{"class":157},[147,43018,43019,43022,43024],{"class":149,"line":17069},[147,43020,43021],{"class":397},"                elif",[147,43023,39162],{"class":448},[147,43025,39238],{"class":157},[147,43027,43028,43031,43033,43035,43037],{"class":149,"line":17074},[147,43029,43030],{"class":157},"                    nn.init.normal_(m.weight,",[147,43032,590],{"class":448},[147,43034,777],{"class":157},[147,43036,39260],{"class":448},[147,43038,407],{"class":157},[147,43040,43041,43044,43046,43048,43050,43052],{"class":149,"line":17088},[147,43042,43043],{"class":397},"                    if",[147,43045,39198],{"class":157},[147,43047,39201],{"class":397},[147,43049,39204],{"class":397},[147,43051,39207],{"class":448},[147,43053,4013],{"class":157},[147,43055,43056,43059,43061],{"class":149,"line":17093},[147,43057,43058],{"class":157},"                        nn.init.constant_(m.bias,",[147,43060,590],{"class":448},[147,43062,407],{"class":157},[147,43064,43065],{"class":149,"line":17099},[147,43066,35439],{"class":458},[147,43068,43069,43071,43073],{"class":149,"line":17104},[147,43070,31075],{"class":397},[147,43072,31367],{"class":2237},[147,43074,31370],{"class":157},[147,43076,43077,43079,43081,43083],{"class":149,"line":17118},[147,43078,31375],{"class":157},[147,43080,445],{"class":397},[147,43082,31097],{"class":448},[147,43084,43085],{"class":157},".b1(x)\n",[147,43087,43088,43090,43092,43094],{"class":149,"line":17123},[147,43089,31375],{"class":157},[147,43091,445],{"class":397},[147,43093,31097],{"class":448},[147,43095,43096],{"class":157},".b2(x)\n",[147,43098,43099,43101,43103,43105],{"class":149,"line":17128},[147,43100,31375],{"class":157},[147,43102,445],{"class":397},[147,43104,31097],{"class":448},[147,43106,43107],{"class":157},".b3(x)\n",[147,43109,43110,43112,43114,43116],{"class":149,"line":17142},[147,43111,31375],{"class":157},[147,43113,445],{"class":397},[147,43115,31097],{"class":448},[147,43117,43118],{"class":157},".b4(x)\n",[147,43120,43121,43123,43125,43127],{"class":149,"line":17154},[147,43122,31375],{"class":157},[147,43124,445],{"class":397},[147,43126,31097],{"class":448},[147,43128,43129],{"class":157},".b5(x)\n",[147,43131,43132,43134],{"class":149,"line":17159},[147,43133,15025],{"class":397},[147,43135,31483],{"class":157},[147,43137,43138],{"class":149,"line":17172},[147,43139,2674],{"emptyLinePlaceholder":324},[147,43141,43142],{"class":149,"line":17177},[147,43143,43144],{"class":458},"# 模型展示\n",[147,43146,43147,43149,43151,43153,43155],{"class":149,"line":17182},[147,43148,1805],{"class":397},[147,43150,31494],{"class":448},[147,43152,3223],{"class":397},[147,43154,31499],{"class":504},[147,43156,4013],{"class":157},[147,43158,43159,43161,43163,43165,43167,43169,43171,43173,43175],{"class":149,"line":17187},[147,43160,31511],{"class":157},[147,43162,445],{"class":397},[147,43164,30725],{"class":157},[147,43166,31518],{"class":504},[147,43168,1978],{"class":397},[147,43170,31523],{"class":157},[147,43172,1975],{"class":397},[147,43174,30750],{"class":504},[147,43176,407],{"class":157},[147,43178,43179,43181,43183],{"class":149,"line":17200},[147,43180,31563],{"class":157},[147,43182,445],{"class":397},[147,43184,43185],{"class":157},"GoogLeNet(Inception).to(device)\n",[147,43187,43188,43190,43192,43194,43196,43198,43200,43202],{"class":149,"line":17205},[147,43189,31573],{"class":448},[147,43191,31576],{"class":157},[147,43193,616],{"class":448},[147,43195,777],{"class":157},[147,43197,31775],{"class":448},[147,43199,777],{"class":157},[147,43201,31775],{"class":448},[147,43203,31589],{"class":157},[350,43205,43206],{"start":312},[353,43207,39457],{},[138,43209,43211],{"className":30652,"code":43210,"language":30654,"meta":143,"style":143},"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",[51,43212,43213,43219,43225,43235,43241,43251,43261,43271,43281,43291,43295,43306,43316,43320,43324,43328,43336,43348,43358,43374,43384,43416,43430,43440,43450,43454,43464,43478,43488,43498,43508,43514,43518,43522,43526,43530,43534,43542,43562,43566,43570,43574,43578,43582,43598,43602,43606,43614,43618,43622,43630,43634,43638,43642,43650,43654,43658,43662,43666,43674,43678,43686,43690,43698,43702,43710,43714,43722,43726,43730,43738,43742,43746,43750,43762,43786,43800,43804,43808,43812,43820,43824,43832,43836,43844,43848,43856,43860,43868,43872,43880,43884,43896,43900,43908,43912,43920,43924,43928,43932,43936,43944,43948,43964,43968,43976,43980,43984,43988,43992,43996,44000,44004,44020,44024,44036,44040,44052,44056,44068,44072,44080,44084,44092,44096,44100,44104,44110,44114,44122,44126,44142,44146,44154,44158,44174,44186,44190,44202,44206,44210,44218,44222,44226,44234,44238,44246,44250,44258,44262,44266,44308,44350,44354,44358,44374,44378,44394,44398,44402,44410,44414,44418,44430,44468,44472,44476,44484,44488,44502,44512,44518,44524,44530,44536,44540,44544,44550,44554,44558,44566,44570,44588,44592,44596,44600,44616,44620,44624,44628,44632,44636,44656,44676,44680,44684,44688,44696,44704,44708,44724,44744,44764,44768,44772,44780,44788,44792,44796,44800,44812,44816,44826,44834,44851],{"__ignoreMap":143},[147,43214,43215,43217],{"class":149,"line":150},[147,43216,30666],{"class":397},[147,43218,32096],{"class":157},[147,43220,43221,43223],{"class":149,"line":312},[147,43222,30666],{"class":397},[147,43224,32103],{"class":157},[147,43226,43227,43229,43231,43233],{"class":149,"line":1454},[147,43228,30666],{"class":397},[147,43230,32114],{"class":157},[147,43232,31657],{"class":397},[147,43234,32119],{"class":157},[147,43236,43237,43239],{"class":149,"line":1469},[147,43238,30666],{"class":397},[147,43240,30669],{"class":157},[147,43242,43243,43245,43247,43249],{"class":149,"line":1475},[147,43244,31011],{"class":397},[147,43246,31689],{"class":157},[147,43248,30666],{"class":397},[147,43250,32136],{"class":157},[147,43252,43253,43255,43257,43259],{"class":149,"line":1489},[147,43254,31011],{"class":397},[147,43256,31642],{"class":157},[147,43258,30666],{"class":397},[147,43260,31647],{"class":157},[147,43262,43263,43265,43267,43269],{"class":149,"line":1495},[147,43264,31011],{"class":397},[147,43266,31672],{"class":157},[147,43268,30666],{"class":397},[147,43270,31677],{"class":157},[147,43272,43273,43275,43277,43279],{"class":149,"line":1586},[147,43274,30666],{"class":397},[147,43276,31689],{"class":157},[147,43278,31657],{"class":397},[147,43280,31694],{"class":157},[147,43282,43283,43285,43287,43289],{"class":149,"line":1592},[147,43284,30666],{"class":397},[147,43286,31706],{"class":157},[147,43288,31657],{"class":397},[147,43290,31711],{"class":157},[147,43292,43293],{"class":149,"line":1604},[147,43294,32181],{"class":458},[147,43296,43297,43299,43301,43303],{"class":149,"line":1886},[147,43298,31011],{"class":397},[147,43300,32188],{"class":157},[147,43302,30666],{"class":397},[147,43304,43305],{"class":157}," GoogLeNet, Inception\n",[147,43307,43308,43310,43312,43314],{"class":149,"line":1891},[147,43309,31011],{"class":397},[147,43311,31014],{"class":157},[147,43313,30666],{"class":397},[147,43315,31019],{"class":157},[147,43317,43318],{"class":149,"line":1897},[147,43319,2674],{"emptyLinePlaceholder":324},[147,43321,43322],{"class":149,"line":1902},[147,43323,2674],{"emptyLinePlaceholder":324},[147,43325,43326],{"class":149,"line":1916},[147,43327,32216],{"class":458},[147,43329,43330,43332,43334],{"class":149,"line":1921},[147,43331,32221],{"class":397},[147,43333,32224],{"class":2237},[147,43335,32227],{"class":157},[147,43337,43338,43340,43342,43344,43346],{"class":149,"line":1927},[147,43339,32232],{"class":157},[147,43341,445],{"class":397},[147,43343,31729],{"class":157},[147,43345,31737],{"class":504},[147,43347,31740],{"class":157},[147,43349,43350,43352,43354,43356],{"class":149,"line":1948},[147,43351,32245],{"class":5490},[147,43353,445],{"class":397},[147,43355,31750],{"class":448},[147,43357,31740],{"class":157},[147,43359,43360,43362,43364,43366,43368,43370,43372],{"class":149,"line":1953},[147,43361,32256],{"class":5490},[147,43363,445],{"class":397},[147,43365,31767],{"class":157},[147,43367,31770],{"class":5490},[147,43369,445],{"class":397},[147,43371,35723],{"class":448},[147,43373,31778],{"class":157},[147,43375,43376,43378,43380,43382],{"class":149,"line":1967},[147,43377,32273],{"class":5490},[147,43379,445],{"class":397},[147,43381,31750],{"class":448},[147,43383,407],{"class":157},[147,43385,43386,43388,43390,43392,43394,43396,43398,43400,43402,43404,43406,43408,43410,43412,43414],{"class":149,"line":1972},[147,43387,32284],{"class":157},[147,43389,445],{"class":397},[147,43391,32289],{"class":157},[147,43393,32292],{"class":448},[147,43395,401],{"class":157},[147,43397,32297],{"class":448},[147,43399,854],{"class":397},[147,43401,7632],{"class":448},[147,43403,32304],{"class":157},[147,43405,32292],{"class":448},[147,43407,401],{"class":157},[147,43409,32311],{"class":448},[147,43411,854],{"class":397},[147,43413,7632],{"class":448},[147,43415,32318],{"class":157},[147,43417,43418,43420,43422,43424,43426,43428],{"class":149,"line":2001},[147,43419,32323],{"class":157},[147,43421,445],{"class":397},[147,43423,32328],{"class":157},[147,43425,31811],{"class":5490},[147,43427,445],{"class":397},[147,43429,31816],{"class":157},[147,43431,43432,43434,43436,43438],{"class":149,"line":2006},[147,43433,32339],{"class":5490},[147,43435,445],{"class":397},[147,43437,596],{"class":448},[147,43439,31740],{"class":157},[147,43441,43442,43444,43446,43448],{"class":149,"line":2023},[147,43443,32351],{"class":5490},[147,43445,445],{"class":397},[147,43447,31750],{"class":448},[147,43449,31740],{"class":157},[147,43451,43452],{"class":149,"line":2028},[147,43453,32362],{"class":458},[147,43455,43456,43458,43460,43462],{"class":149,"line":2033},[147,43457,32367],{"class":5490},[147,43459,445],{"class":397},[147,43461,794],{"class":448},[147,43463,407],{"class":157},[147,43465,43466,43468,43470,43472,43474,43476],{"class":149,"line":2038},[147,43467,32378],{"class":157},[147,43469,445],{"class":397},[147,43471,31808],{"class":157},[147,43473,31811],{"class":5490},[147,43475,445],{"class":397},[147,43477,32389],{"class":157},[147,43479,43480,43482,43484,43486],{"class":149,"line":2052},[147,43481,32394],{"class":5490},[147,43483,445],{"class":397},[147,43485,596],{"class":448},[147,43487,31740],{"class":157},[147,43489,43490,43492,43494,43496],{"class":149,"line":2057},[147,43491,32405],{"class":5490},[147,43493,445],{"class":397},[147,43495,31750],{"class":448},[147,43497,31740],{"class":157},[147,43499,43500,43502,43504,43506],{"class":149,"line":2851},[147,43501,32416],{"class":5490},[147,43503,445],{"class":397},[147,43505,794],{"class":448},[147,43507,407],{"class":157},[147,43509,43510,43512],{"class":149,"line":2865},[147,43511,4364],{"class":397},[147,43513,32429],{"class":157},[147,43515,43516],{"class":149,"line":2873},[147,43517,2674],{"emptyLinePlaceholder":324},[147,43519,43520],{"class":149,"line":2878},[147,43521,32438],{"class":458},[147,43523,43524],{"class":149,"line":2884},[147,43525,32443],{"class":458},[147,43527,43528],{"class":149,"line":2890},[147,43529,2674],{"emptyLinePlaceholder":324},[147,43531,43532],{"class":149,"line":2895},[147,43533,32452],{"class":458},[147,43535,43536,43538,43540],{"class":149,"line":8222},[147,43537,32221],{"class":397},[147,43539,32459],{"class":2237},[147,43541,32462],{"class":157},[147,43543,43544,43546,43548,43550,43552,43554,43556,43558,43560],{"class":149,"line":8246},[147,43545,31511],{"class":157},[147,43547,445],{"class":397},[147,43549,30725],{"class":157},[147,43551,31518],{"class":504},[147,43553,1978],{"class":397},[147,43555,31523],{"class":157},[147,43557,1975],{"class":397},[147,43559,32481],{"class":504},[147,43561,407],{"class":157},[147,43563,43564],{"class":149,"line":8251},[147,43565,2674],{"emptyLinePlaceholder":324},[147,43567,43568],{"class":149,"line":8257},[147,43569,2674],{"emptyLinePlaceholder":324},[147,43571,43572],{"class":149,"line":8284},[147,43573,32496],{"class":458},[147,43575,43576],{"class":149,"line":8289},[147,43577,32501],{"class":458},[147,43579,43580],{"class":149,"line":8295},[147,43581,32506],{"class":458},[147,43583,43584,43586,43588,43590,43592,43594,43596],{"class":149,"line":8307},[147,43585,32511],{"class":157},[147,43587,445],{"class":397},[147,43589,32516],{"class":157},[147,43591,32519],{"class":5490},[147,43593,445],{"class":397},[147,43595,32524],{"class":448},[147,43597,407],{"class":157},[147,43599,43600],{"class":149,"line":8319},[147,43601,2674],{"emptyLinePlaceholder":324},[147,43603,43604],{"class":149,"line":8331},[147,43605,32535],{"class":458},[147,43607,43608,43610,43612],{"class":149,"line":9990},[147,43609,32540],{"class":157},[147,43611,445],{"class":397},[147,43613,32545],{"class":157},[147,43615,43616],{"class":149,"line":10015},[147,43617,2674],{"emptyLinePlaceholder":324},[147,43619,43620],{"class":149,"line":10038},[147,43621,32554],{"class":458},[147,43623,43624,43626,43628],{"class":149,"line":10062},[147,43625,31563],{"class":157},[147,43627,445],{"class":397},[147,43629,32563],{"class":157},[147,43631,43632],{"class":149,"line":10067},[147,43633,32568],{"class":458},[147,43635,43636],{"class":149,"line":10072},[147,43637,32573],{"class":458},[147,43639,43640],{"class":149,"line":10077},[147,43641,32578],{"class":458},[147,43643,43644,43646,43648],{"class":149,"line":10086},[147,43645,32583],{"class":157},[147,43647,445],{"class":397},[147,43649,32588],{"class":157},[147,43651,43652],{"class":149,"line":10091},[147,43653,2674],{"emptyLinePlaceholder":324},[147,43655,43656],{"class":149,"line":10097},[147,43657,2674],{"emptyLinePlaceholder":324},[147,43659,43660],{"class":149,"line":10118},[147,43661,32601],{"class":458},[147,43663,43664],{"class":149,"line":10124},[147,43665,32606],{"class":458},[147,43667,43668,43670,43672],{"class":149,"line":10138},[147,43669,32611],{"class":157},[147,43671,445],{"class":397},[147,43673,32616],{"class":448},[147,43675,43676],{"class":149,"line":10144},[147,43677,32621],{"class":458},[147,43679,43680,43682,43684],{"class":149,"line":10171},[147,43681,32626],{"class":157},[147,43683,445],{"class":397},[147,43685,32631],{"class":157},[147,43687,43688],{"class":149,"line":10180},[147,43689,32636],{"class":458},[147,43691,43692,43694,43696],{"class":149,"line":10186},[147,43693,32641],{"class":157},[147,43695,445],{"class":397},[147,43697,32631],{"class":157},[147,43699,43700],{"class":149,"line":10194},[147,43701,32650],{"class":458},[147,43703,43704,43706,43708],{"class":149,"line":10199},[147,43705,32655],{"class":157},[147,43707,445],{"class":397},[147,43709,32631],{"class":157},[147,43711,43712],{"class":149,"line":16877},[147,43713,32664],{"class":458},[147,43715,43716,43718,43720],{"class":149,"line":16883},[147,43717,32669],{"class":157},[147,43719,445],{"class":397},[147,43721,32631],{"class":157},[147,43723,43724],{"class":149,"line":16906},[147,43725,2674],{"emptyLinePlaceholder":324},[147,43727,43728],{"class":149,"line":16912},[147,43729,32682],{"class":458},[147,43731,43732,43734,43736],{"class":149,"line":16935},[147,43733,32687],{"class":157},[147,43735,445],{"class":397},[147,43737,32692],{"class":157},[147,43739,43740],{"class":149,"line":16949},[147,43741,2674],{"emptyLinePlaceholder":324},[147,43743,43744],{"class":149,"line":16969},[147,43745,2674],{"emptyLinePlaceholder":324},[147,43747,43748],{"class":149,"line":16975},[147,43749,32705],{"class":458},[147,43751,43752,43754,43756,43758,43760],{"class":149,"line":16986},[147,43753,3475],{"class":397},[147,43755,32712],{"class":157},[147,43757,26317],{"class":397},[147,43759,32717],{"class":448},[147,43761,32720],{"class":157},[147,43763,43764,43766,43768,43770,43772,43774,43776,43778,43780,43782,43784],{"class":149,"line":17009},[147,43765,32725],{"class":448},[147,43767,401],{"class":157},[147,43769,32730],{"class":504},[147,43771,32733],{"class":448},[147,43773,983],{"class":504},[147,43775,32733],{"class":448},[147,43777,650],{"class":504},[147,43779,32742],{"class":157},[147,43781,931],{"class":397},[147,43783,616],{"class":448},[147,43785,30771],{"class":157},[147,43787,43788,43790,43792,43794,43796,43798],{"class":149,"line":17031},[147,43789,32725],{"class":448},[147,43791,401],{"class":157},[147,43793,32757],{"class":504},[147,43795,854],{"class":397},[147,43797,845],{"class":448},[147,43799,407],{"class":157},[147,43801,43802],{"class":149,"line":17036},[147,43803,2674],{"emptyLinePlaceholder":324},[147,43805,43806],{"class":149,"line":17042},[147,43807,32772],{"class":458},[147,43809,43810],{"class":149,"line":17056},[147,43811,32777],{"class":458},[147,43813,43814,43816,43818],{"class":149,"line":17069},[147,43815,32782],{"class":157},[147,43817,445],{"class":397},[147,43819,32616],{"class":448},[147,43821,43822],{"class":149,"line":17074},[147,43823,32791],{"class":458},[147,43825,43826,43828,43830],{"class":149,"line":17088},[147,43827,32796],{"class":157},[147,43829,445],{"class":397},[147,43831,3359],{"class":448},[147,43833,43834],{"class":149,"line":17093},[147,43835,32805],{"class":458},[147,43837,43838,43840,43842],{"class":149,"line":17099},[147,43839,32810],{"class":157},[147,43841,445],{"class":397},[147,43843,32616],{"class":448},[147,43845,43846],{"class":149,"line":17104},[147,43847,32819],{"class":458},[147,43849,43850,43852,43854],{"class":149,"line":17118},[147,43851,32824],{"class":157},[147,43853,445],{"class":397},[147,43855,3359],{"class":448},[147,43857,43858],{"class":149,"line":17123},[147,43859,32833],{"class":458},[147,43861,43862,43864,43866],{"class":149,"line":17128},[147,43863,32838],{"class":157},[147,43865,445],{"class":397},[147,43867,3359],{"class":448},[147,43869,43870],{"class":149,"line":17142},[147,43871,32847],{"class":458},[147,43873,43874,43876,43878],{"class":149,"line":17154},[147,43875,32852],{"class":157},[147,43877,445],{"class":397},[147,43879,3359],{"class":448},[147,43881,43882],{"class":149,"line":17159},[147,43883,32861],{"class":458},[147,43885,43886,43888,43890,43892,43894],{"class":149,"line":17172},[147,43887,3677],{"class":397},[147,43889,31875],{"class":157},[147,43891,26317],{"class":397},[147,43893,31880],{"class":448},[147,43895,32874],{"class":157},[147,43897,43898],{"class":149,"line":17177},[147,43899,32879],{"class":458},[147,43901,43902,43904,43906],{"class":149,"line":17182},[147,43903,32884],{"class":157},[147,43905,445],{"class":397},[147,43907,32889],{"class":157},[147,43909,43910],{"class":149,"line":17187},[147,43911,32894],{"class":458},[147,43913,43914,43916,43918],{"class":149,"line":17200},[147,43915,32899],{"class":157},[147,43917,445],{"class":397},[147,43919,32904],{"class":157},[147,43921,43922],{"class":149,"line":17205},[147,43923,32910],{"class":458},[147,43925,43926],{"class":149,"line":32907},[147,43927,32916],{"class":157},[147,43929,43930],{"class":149,"line":32913},[147,43931,32922],{"class":458},[147,43933,43934],{"class":149,"line":32919},[147,43935,32928],{"class":458},[147,43937,43938,43940,43942],{"class":149,"line":32925},[147,43939,32934],{"class":157},[147,43941,445],{"class":397},[147,43943,32939],{"class":157},[147,43945,43946],{"class":149,"line":32931},[147,43947,32945],{"class":458},[147,43949,43950,43952,43954,43956,43958,43960,43962],{"class":149,"line":32942},[147,43951,32951],{"class":157},[147,43953,445],{"class":397},[147,43955,32956],{"class":157},[147,43957,32959],{"class":5490},[147,43959,445],{"class":397},[147,43961,616],{"class":448},[147,43963,407],{"class":157},[147,43965,43966],{"class":149,"line":32948},[147,43967,32971],{"class":458},[147,43969,43970,43972,43974],{"class":149,"line":32968},[147,43971,32977],{"class":157},[147,43973,445],{"class":397},[147,43975,32982],{"class":157},[147,43977,43978],{"class":149,"line":32974},[147,43979,32988],{"class":458},[147,43981,43982],{"class":149,"line":32985},[147,43983,32994],{"class":157},[147,43985,43986],{"class":149,"line":32991},[147,43987,33000],{"class":458},[147,43989,43990],{"class":149,"line":32997},[147,43991,33006],{"class":157},[147,43993,43994],{"class":149,"line":33003},[147,43995,33012],{"class":458},[147,43997,43998],{"class":149,"line":33009},[147,43999,33018],{"class":157},[147,44001,44002],{"class":149,"line":33015},[147,44003,33024],{"class":458},[147,44005,44006,44008,44010,44012,44014,44016,44018],{"class":149,"line":33021},[147,44007,33030],{"class":157},[147,44009,9751],{"class":397},[147,44011,33035],{"class":157},[147,44013,854],{"class":397},[147,44015,33040],{"class":157},[147,44017,590],{"class":448},[147,44019,407],{"class":157},[147,44021,44022],{"class":149,"line":33027},[147,44023,33050],{"class":458},[147,44025,44026,44028,44030,44032,44034],{"class":149,"line":33047},[147,44027,33056],{"class":157},[147,44029,9751],{"class":397},[147,44031,33061],{"class":157},[147,44033,3223],{"class":397},[147,44035,33066],{"class":157},[147,44037,44038],{"class":149,"line":33053},[147,44039,33072],{"class":458},[147,44041,44042,44044,44046,44048,44050],{"class":149,"line":33069},[147,44043,33078],{"class":157},[147,44045,9751],{"class":397},[147,44047,33040],{"class":157},[147,44049,590],{"class":448},[147,44051,407],{"class":157},[147,44053,44054],{"class":149,"line":33075},[147,44055,33092],{"class":458},[147,44057,44058,44060,44062,44064,44066],{"class":149,"line":33089},[147,44059,3677],{"class":397},[147,44061,33100],{"class":157},[147,44063,26317],{"class":397},[147,44065,31880],{"class":448},[147,44067,33107],{"class":157},[147,44069,44070],{"class":149,"line":33095},[147,44071,33113],{"class":458},[147,44073,44074,44076,44078],{"class":149,"line":33110},[147,44075,32884],{"class":157},[147,44077,445],{"class":397},[147,44079,32889],{"class":157},[147,44081,44082],{"class":149,"line":33116},[147,44083,33128],{"class":458},[147,44085,44086,44088,44090],{"class":149,"line":33125},[147,44087,32899],{"class":157},[147,44089,445],{"class":397},[147,44091,32904],{"class":157},[147,44093,44094],{"class":149,"line":33131},[147,44095,33143],{"class":458},[147,44097,44098],{"class":149,"line":33140},[147,44099,33149],{"class":157},[147,44101,44102],{"class":149,"line":33146},[147,44103,36630],{"class":458},[147,44105,44106,44108],{"class":149,"line":33152},[147,44107,33155],{"class":397},[147,44109,33158],{"class":157},[147,44111,44112],{"class":149,"line":33161},[147,44113,33164],{"class":458},[147,44115,44116,44118,44120],{"class":149,"line":33167},[147,44117,36645],{"class":157},[147,44119,445],{"class":397},[147,44121,32939],{"class":157},[147,44123,44124],{"class":149,"line":33178},[147,44125,33181],{"class":458},[147,44127,44128,44130,44132,44134,44136,44138,44140],{"class":149,"line":33184},[147,44129,36658],{"class":157},[147,44131,445],{"class":397},[147,44133,32956],{"class":157},[147,44135,32959],{"class":5490},[147,44137,445],{"class":397},[147,44139,616],{"class":448},[147,44141,407],{"class":157},[147,44143,44144],{"class":149,"line":33203},[147,44145,33206],{"class":458},[147,44147,44148,44150,44152],{"class":149,"line":33209},[147,44149,36679],{"class":157},[147,44151,445],{"class":397},[147,44153,32982],{"class":157},[147,44155,44156],{"class":149,"line":33220},[147,44157,33223],{"class":458},[147,44159,44160,44162,44164,44166,44168,44170,44172],{"class":149,"line":33226},[147,44161,36692],{"class":157},[147,44163,9751],{"class":397},[147,44165,36697],{"class":157},[147,44167,854],{"class":397},[147,44169,33040],{"class":157},[147,44171,590],{"class":448},[147,44173,407],{"class":157},[147,44175,44176,44178,44180,44182,44184],{"class":149,"line":33246},[147,44177,36710],{"class":157},[147,44179,9751],{"class":397},[147,44181,33061],{"class":157},[147,44183,3223],{"class":397},[147,44185,33066],{"class":157},[147,44187,44188],{"class":149,"line":33262},[147,44189,36723],{"class":458},[147,44191,44192,44194,44196,44198,44200],{"class":149,"line":33268},[147,44193,36728],{"class":157},[147,44195,9751],{"class":397},[147,44197,33040],{"class":157},[147,44199,590],{"class":448},[147,44201,407],{"class":157},[147,44203,44204],{"class":149,"line":33282},[147,44205,33285],{"class":458},[147,44207,44208],{"class":149,"line":33288},[147,44209,33291],{"class":458},[147,44211,44212,44214,44216],{"class":149,"line":33294},[147,44213,33297],{"class":157},[147,44215,983],{"class":397},[147,44217,33302],{"class":157},[147,44219,44220],{"class":149,"line":33305},[147,44221,33308],{"class":458},[147,44223,44224],{"class":149,"line":33311},[147,44225,33314],{"class":458},[147,44227,44228,44230,44232],{"class":149,"line":33317},[147,44229,33320],{"class":157},[147,44231,983],{"class":397},[147,44233,33302],{"class":157},[147,44235,44236],{"class":149,"line":33327},[147,44237,33330],{"class":458},[147,44239,44240,44242,44244],{"class":149,"line":33333},[147,44241,33336],{"class":157},[147,44243,983],{"class":397},[147,44245,33341],{"class":157},[147,44247,44248],{"class":149,"line":33344},[147,44249,33347],{"class":458},[147,44251,44252,44254,44256],{"class":149,"line":33350},[147,44253,33353],{"class":157},[147,44255,983],{"class":397},[147,44257,33341],{"class":157},[147,44259,44260],{"class":149,"line":33360},[147,44261,2674],{"emptyLinePlaceholder":324},[147,44263,44264],{"class":149,"line":33365},[147,44265,33368],{"class":458},[147,44267,44268,44270,44272,44274,44276,44278,44280,44282,44284,44286,44288,44290,44292,44294,44296,44298,44300,44302,44304,44306],{"class":149,"line":33371},[147,44269,32725],{"class":448},[147,44271,401],{"class":157},[147,44273,3866],{"class":504},[147,44275,32733],{"class":448},[147,44277,33382],{"class":504},[147,44279,1295],{"class":448},[147,44281,33387],{"class":397},[147,44283,1345],{"class":448},[147,44285,33392],{"class":504},[147,44287,1295],{"class":448},[147,44289,33387],{"class":397},[147,44291,1345],{"class":448},[147,44293,3866],{"class":504},[147,44295,33403],{"class":157},[147,44297,931],{"class":397},[147,44299,616],{"class":448},[147,44301,33410],{"class":157},[147,44303,931],{"class":397},[147,44305,616],{"class":448},[147,44307,33417],{"class":157},[147,44309,44310,44312,44314,44316,44318,44320,44322,44324,44326,44328,44330,44332,44334,44336,44338,44340,44342,44344,44346,44348],{"class":149,"line":33420},[147,44311,32725],{"class":448},[147,44313,401],{"class":157},[147,44315,3866],{"class":504},[147,44317,32733],{"class":448},[147,44319,33431],{"class":504},[147,44321,1295],{"class":448},[147,44323,33387],{"class":397},[147,44325,1345],{"class":448},[147,44327,33440],{"class":504},[147,44329,1295],{"class":448},[147,44331,33387],{"class":397},[147,44333,1345],{"class":448},[147,44335,3866],{"class":504},[147,44337,33451],{"class":157},[147,44339,931],{"class":397},[147,44341,616],{"class":448},[147,44343,33458],{"class":157},[147,44345,931],{"class":397},[147,44347,616],{"class":448},[147,44349,33417],{"class":157},[147,44351,44352],{"class":149,"line":33467},[147,44353,2674],{"emptyLinePlaceholder":324},[147,44355,44356],{"class":149,"line":33472},[147,44357,33475],{"class":458},[147,44359,44360,44362,44364,44366,44368,44370,44372],{"class":149,"line":33478},[147,44361,2771],{"class":397},[147,44363,33483],{"class":157},[147,44365,931],{"class":397},[147,44367,616],{"class":448},[147,44369,1339],{"class":157},[147,44371,1359],{"class":397},[147,44373,33494],{"class":157},[147,44375,44376],{"class":149,"line":33497},[147,44377,33500],{"class":458},[147,44379,44380,44382,44384,44386,44388,44390,44392],{"class":149,"line":33503},[147,44381,33506],{"class":157},[147,44383,439],{"class":448},[147,44385,445],{"class":397},[147,44387,33513],{"class":157},[147,44389,931],{"class":397},[147,44391,616],{"class":448},[147,44393,33520],{"class":157},[147,44395,44396],{"class":149,"line":33523},[147,44397,33526],{"class":458},[147,44399,44400],{"class":149,"line":33529},[147,44401,33532],{"class":458},[147,44403,44404,44406,44408],{"class":149,"line":33535},[147,44405,33538],{"class":157},[147,44407,445],{"class":397},[147,44409,32588],{"class":157},[147,44411,44412],{"class":149,"line":33545},[147,44413,2674],{"emptyLinePlaceholder":324},[147,44415,44416],{"class":149,"line":33550},[147,44417,33553],{"class":458},[147,44419,44420,44422,44424,44426,44428],{"class":149,"line":33556},[147,44421,33559],{"class":157},[147,44423,445],{"class":397},[147,44425,33564],{"class":157},[147,44427,931],{"class":397},[147,44429,33569],{"class":157},[147,44431,44432,44434,44436,44438,44440,44442,44444,44446,44448,44450,44452,44454,44456,44458,44460,44462,44464,44466],{"class":149,"line":33572},[147,44433,32725],{"class":448},[147,44435,401],{"class":157},[147,44437,33579],{"class":504},[147,44439,1295],{"class":448},[147,44441,33584],{"class":397},[147,44443,1345],{"class":448},[147,44445,943],{"class":504},[147,44447,1295],{"class":448},[147,44449,33584],{"class":397},[147,44451,1345],{"class":448},[147,44453,33597],{"class":504},[147,44455,33600],{"class":157},[147,44457,33603],{"class":397},[147,44459,1306],{"class":448},[147,44461,33608],{"class":157},[147,44463,727],{"class":397},[147,44465,1306],{"class":448},[147,44467,30771],{"class":157},[147,44469,44470],{"class":149,"line":33617},[147,44471,37007],{"class":458},[147,44473,44474],{"class":149,"line":33623},[147,44475,37012],{"class":458},[147,44477,44478,44480,44482],{"class":149,"line":33629},[147,44479,37017],{"class":157},[147,44481,33641],{"class":504},[147,44483,407],{"class":157},[147,44485,44486],{"class":149,"line":33635},[147,44487,33661],{"class":458},[147,44489,44490,44492,44494,44496,44498,44500],{"class":149,"line":33646},[147,44491,33667],{"class":157},[147,44493,445],{"class":397},[147,44495,33672],{"class":157},[147,44497,33675],{"class":5490},[147,44499,445],{"class":397},[147,44501,1820],{"class":157},[147,44503,44504,44506,44508,44510],{"class":149,"line":33652},[147,44505,33685],{"class":504},[147,44507,1258],{"class":157},[147,44509,33690],{"class":448},[147,44511,33693],{"class":157},[147,44513,44514,44516],{"class":149,"line":33658},[147,44515,33699],{"class":504},[147,44517,33702],{"class":157},[147,44519,44520,44522],{"class":149,"line":33664},[147,44521,33708],{"class":504},[147,44523,33711],{"class":157},[147,44525,44526,44528],{"class":149,"line":33682},[147,44527,33717],{"class":504},[147,44529,33720],{"class":157},[147,44531,44532,44534],{"class":149,"line":33696},[147,44533,33726],{"class":504},[147,44535,33729],{"class":157},[147,44537,44538],{"class":149,"line":33705},[147,44539,33735],{"class":157},[147,44541,44542],{"class":149,"line":33714},[147,44543,33741],{"class":458},[147,44545,44546,44548],{"class":149,"line":33723},[147,44547,4364],{"class":397},[147,44549,33749],{"class":157},[147,44551,44552],{"class":149,"line":33732},[147,44553,2674],{"emptyLinePlaceholder":324},[147,44555,44556],{"class":149,"line":33738},[147,44557,33760],{"class":458},[147,44559,44560,44562,44564],{"class":149,"line":33744},[147,44561,32221],{"class":397},[147,44563,33768],{"class":2237},[147,44565,33771],{"class":157},[147,44567,44568],{"class":149,"line":33752},[147,44569,33777],{"class":458},[147,44571,44572,44574,44576,44578,44580,44582,44584,44586],{"class":149,"line":33757},[147,44573,33783],{"class":157},[147,44575,31967],{"class":5490},[147,44577,445],{"class":397},[147,44579,401],{"class":157},[147,44581,897],{"class":448},[147,44583,777],{"class":157},[147,44585,692],{"class":448},[147,44587,30771],{"class":157},[147,44589,44590],{"class":149,"line":33763},[147,44591,33803],{"class":458},[147,44593,44594],{"class":149,"line":33774},[147,44595,33809],{"class":458},[147,44597,44598],{"class":149,"line":33780},[147,44599,33815],{"class":458},[147,44601,44602,44604,44606,44608,44610,44612,44614],{"class":149,"line":33800},[147,44603,32001],{"class":157},[147,44605,616],{"class":448},[147,44607,777],{"class":157},[147,44609,477],{"class":448},[147,44611,777],{"class":157},[147,44613,616],{"class":448},[147,44615,407],{"class":157},[147,44617,44618],{"class":149,"line":33806},[147,44619,33838],{"class":458},[147,44621,44622],{"class":149,"line":33812},[147,44623,33844],{"class":458},[147,44625,44626],{"class":149,"line":33818},[147,44627,33850],{"class":458},[147,44629,44630],{"class":149,"line":33835},[147,44631,33856],{"class":458},[147,44633,44634],{"class":149,"line":33841},[147,44635,33862],{"class":458},[147,44637,44638,44640,44642,44644,44646,44648,44650,44652,44654],{"class":149,"line":33847},[147,44639,33868],{"class":157},[147,44641,33871],{"class":504},[147,44643,33874],{"class":157},[147,44645,33877],{"class":504},[147,44647,777],{"class":157},[147,44649,33882],{"class":5490},[147,44651,445],{"class":397},[147,44653,33887],{"class":504},[147,44655,407],{"class":157},[147,44657,44658,44660,44662,44664,44666,44668,44670,44672,44674],{"class":149,"line":33853},[147,44659,33868],{"class":157},[147,44661,33871],{"class":504},[147,44663,33899],{"class":157},[147,44665,33902],{"class":504},[147,44667,777],{"class":157},[147,44669,33882],{"class":5490},[147,44671,445],{"class":397},[147,44673,33911],{"class":504},[147,44675,407],{"class":157},[147,44677,44678],{"class":149,"line":33859},[147,44679,33919],{"class":458},[147,44681,44682],{"class":149,"line":33865},[147,44683,33925],{"class":157},[147,44685,44686],{"class":149,"line":33892},[147,44687,33931],{"class":458},[147,44689,44690,44692,44694],{"class":149,"line":33916},[147,44691,33937],{"class":157},[147,44693,33940],{"class":504},[147,44695,407],{"class":157},[147,44697,44698,44700,44702],{"class":149,"line":33922},[147,44699,33948],{"class":157},[147,44701,33951],{"class":504},[147,44703,407],{"class":157},[147,44705,44706],{"class":149,"line":33928},[147,44707,33959],{"class":458},[147,44709,44710,44712,44714,44716,44718,44720,44722],{"class":149,"line":33934},[147,44711,32001],{"class":157},[147,44713,616],{"class":448},[147,44715,777],{"class":157},[147,44717,477],{"class":448},[147,44719,777],{"class":157},[147,44721,477],{"class":448},[147,44723,407],{"class":157},[147,44725,44726,44728,44730,44732,44734,44736,44738,44740,44742],{"class":149,"line":33945},[147,44727,33868],{"class":157},[147,44729,33871],{"class":504},[147,44731,33986],{"class":157},[147,44733,33877],{"class":504},[147,44735,777],{"class":157},[147,44737,33882],{"class":5490},[147,44739,445],{"class":397},[147,44741,33997],{"class":504},[147,44743,407],{"class":157},[147,44745,44746,44748,44750,44752,44754,44756,44758,44760,44762],{"class":149,"line":33956},[147,44747,33868],{"class":157},[147,44749,33871],{"class":504},[147,44751,34009],{"class":157},[147,44753,33902],{"class":504},[147,44755,777],{"class":157},[147,44757,33882],{"class":5490},[147,44759,445],{"class":397},[147,44761,34020],{"class":504},[147,44763,407],{"class":157},[147,44765,44766],{"class":149,"line":33962},[147,44767,34028],{"class":458},[147,44769,44770],{"class":149,"line":33979},[147,44771,33925],{"class":157},[147,44773,44774,44776,44778],{"class":149,"line":34002},[147,44775,33937],{"class":157},[147,44777,33871],{"class":504},[147,44779,407],{"class":157},[147,44781,44782,44784,44786],{"class":149,"line":34025},[147,44783,33948],{"class":157},[147,44785,34050],{"class":504},[147,44787,407],{"class":157},[147,44789,44790],{"class":149,"line":34031},[147,44791,34058],{"class":157},[147,44793,44794],{"class":149,"line":34036},[147,44795,2674],{"emptyLinePlaceholder":324},[147,44797,44798],{"class":149,"line":34045},[147,44799,34069],{"class":458},[147,44801,44802,44804,44806,44808,44810],{"class":149,"line":34055},[147,44803,1805],{"class":397},[147,44805,31494],{"class":448},[147,44807,3223],{"class":397},[147,44809,31499],{"class":504},[147,44811,4013],{"class":157},[147,44813,44814],{"class":149,"line":34061},[147,44815,34088],{"class":458},[147,44817,44818,44821,44823],{"class":149,"line":34066},[147,44819,44820],{"class":157},"    GoogLeNet",[147,44822,445],{"class":397},[147,44824,44825],{"class":157},"GoogLeNet(Inception)\n",[147,44827,44828,44830,44832],{"class":149,"line":34072},[147,44829,34105],{"class":157},[147,44831,445],{"class":397},[147,44833,34110],{"class":157},[147,44835,44836,44838,44840,44843,44845,44847,44849],{"class":149,"line":34085},[147,44837,33667],{"class":157},[147,44839,445],{"class":397},[147,44841,44842],{"class":157},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[147,44844,34123],{"class":5490},[147,44846,445],{"class":397},[147,44848,1350],{"class":448},[147,44850,407],{"class":157},[147,44852,44853],{"class":149,"line":34091},[147,44854,34135],{"class":157},[350,44856,44857],{"start":1454},[353,44858,40848],{},[138,44860,44862],{"className":30652,"code":44861,"language":30654,"meta":143,"style":143},"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",[51,44863,44864,44870,44880,44890,44894,44904,44915,44919,44923,44927,44935,44951,44961,44977,44987,45001,45005,45015,45025,45035,45041,45045,45049,45057,45061,45077,45085,45089,45093,45101,45109,45113,45117,45121,45125,45131,45135,45145,45153,45161,45165,45169,45173,45181,45185,45201,45205,45209,45213,45225,45229,45241,45245,45249,45261,45265,45275,45279,45283,45295,45299,45307,45311,45315,45323,45327,45335,45339,45343,45347,45351,45355,45371,45379,45383,45387,45435,45441,45445,45455,45463,45471,45475,45479,45483,45487,45495,45499,45515,45519,45527,45535],{"__ignoreMap":143},[147,44865,44866,44868],{"class":149,"line":150},[147,44867,30666],{"class":397},[147,44869,30669],{"class":157},[147,44871,44872,44874,44876,44878],{"class":149,"line":312},[147,44873,30666],{"class":397},[147,44875,31689],{"class":157},[147,44877,31657],{"class":397},[147,44879,31694],{"class":157},[147,44881,44882,44884,44886,44888],{"class":149,"line":1454},[147,44883,31011],{"class":397},[147,44885,31672],{"class":157},[147,44887,30666],{"class":397},[147,44889,31677],{"class":157},[147,44891,44892],{"class":149,"line":1469},[147,44893,34196],{"class":458},[147,44895,44896,44898,44900,44902],{"class":149,"line":1475},[147,44897,31011],{"class":397},[147,44899,31642],{"class":157},[147,44901,30666],{"class":397},[147,44903,31647],{"class":157},[147,44905,44906,44908,44910,44912],{"class":149,"line":1489},[147,44907,31011],{"class":397},[147,44909,32188],{"class":157},[147,44911,30666],{"class":397},[147,44913,44914],{"class":157}," GoogLeNet,Inception\n",[147,44916,44917],{"class":149,"line":1495},[147,44918,2674],{"emptyLinePlaceholder":324},[147,44920,44921],{"class":149,"line":1586},[147,44922,2674],{"emptyLinePlaceholder":324},[147,44924,44925],{"class":149,"line":1592},[147,44926,34225],{"class":458},[147,44928,44929,44931,44933],{"class":149,"line":1604},[147,44930,32221],{"class":397},[147,44932,34232],{"class":2237},[147,44934,32227],{"class":157},[147,44936,44937,44939,44941,44943,44945,44947,44949],{"class":149,"line":1886},[147,44938,34239],{"class":157},[147,44940,445],{"class":397},[147,44942,31729],{"class":157},[147,44944,31732],{"class":5490},[147,44946,445],{"class":397},[147,44948,31737],{"class":504},[147,44950,31740],{"class":157},[147,44952,44953,44955,44957,44959],{"class":149,"line":1891},[147,44954,34256],{"class":5490},[147,44956,445],{"class":397},[147,44958,34261],{"class":448},[147,44960,31740],{"class":157},[147,44962,44963,44965,44967,44969,44971,44973,44975],{"class":149,"line":1897},[147,44964,34268],{"class":5490},[147,44966,445],{"class":397},[147,44968,31767],{"class":157},[147,44970,31770],{"class":5490},[147,44972,445],{"class":397},[147,44974,35723],{"class":448},[147,44976,31778],{"class":157},[147,44978,44979,44981,44983,44985],{"class":149,"line":1902},[147,44980,34285],{"class":5490},[147,44982,445],{"class":397},[147,44984,31750],{"class":448},[147,44986,407],{"class":157},[147,44988,44989,44991,44993,44995,44997,44999],{"class":149,"line":1916},[147,44990,34296],{"class":157},[147,44992,445],{"class":397},[147,44994,31808],{"class":157},[147,44996,31811],{"class":5490},[147,44998,445],{"class":397},[147,45000,34307],{"class":157},[147,45002,45003],{"class":149,"line":1921},[147,45004,34312],{"class":458},[147,45006,45007,45009,45011,45013],{"class":149,"line":1927},[147,45008,34317],{"class":5490},[147,45010,445],{"class":397},[147,45012,616],{"class":448},[147,45014,31740],{"class":157},[147,45016,45017,45019,45021,45023],{"class":149,"line":1948},[147,45018,34328],{"class":5490},[147,45020,445],{"class":397},[147,45022,31750],{"class":448},[147,45024,31740],{"class":157},[147,45026,45027,45029,45031,45033],{"class":149,"line":1953},[147,45028,34339],{"class":5490},[147,45030,445],{"class":397},[147,45032,590],{"class":448},[147,45034,407],{"class":157},[147,45036,45037,45039],{"class":149,"line":1967},[147,45038,4364],{"class":397},[147,45040,34352],{"class":157},[147,45042,45043],{"class":149,"line":1972},[147,45044,2674],{"emptyLinePlaceholder":324},[147,45046,45047],{"class":149,"line":2001},[147,45048,34361],{"class":458},[147,45050,45051,45053,45055],{"class":149,"line":2006},[147,45052,32221],{"class":397},[147,45054,34368],{"class":2237},[147,45056,34371],{"class":157},[147,45058,45059],{"class":149,"line":2023},[147,45060,34376],{"class":458},[147,45062,45063,45065,45067,45069,45071,45073,45075],{"class":149,"line":2028},[147,45064,31511],{"class":157},[147,45066,445],{"class":397},[147,45068,31518],{"class":504},[147,45070,1978],{"class":397},[147,45072,31523],{"class":157},[147,45074,1975],{"class":397},[147,45076,34393],{"class":504},[147,45078,45079,45081,45083],{"class":149,"line":2033},[147,45080,31563],{"class":157},[147,45082,445],{"class":397},[147,45084,32563],{"class":157},[147,45086,45087],{"class":149,"line":2038},[147,45088,2674],{"emptyLinePlaceholder":324},[147,45090,45091],{"class":149,"line":2052},[147,45092,34410],{"class":458},[147,45094,45095,45097,45099],{"class":149,"line":2057},[147,45096,34415],{"class":157},[147,45098,445],{"class":397},[147,45100,32616],{"class":448},[147,45102,45103,45105,45107],{"class":149,"line":2851},[147,45104,34424],{"class":157},[147,45106,445],{"class":397},[147,45108,3359],{"class":448},[147,45110,45111],{"class":149,"line":2865},[147,45112,2674],{"emptyLinePlaceholder":324},[147,45114,45115],{"class":149,"line":2873},[147,45116,34437],{"class":458},[147,45118,45119],{"class":149,"line":2878},[147,45120,34442],{"class":458},[147,45122,45123],{"class":149,"line":2884},[147,45124,34447],{"class":458},[147,45126,45127,45129],{"class":149,"line":2890},[147,45128,34452],{"class":397},[147,45130,33158],{"class":157},[147,45132,45133],{"class":149,"line":2895},[147,45134,34459],{"class":458},[147,45136,45137,45139,45141,45143],{"class":149,"line":8222},[147,45138,3677],{"class":397},[147,45140,34466],{"class":157},[147,45142,26317],{"class":397},[147,45144,34471],{"class":157},[147,45146,45147,45149,45151],{"class":149,"line":8246},[147,45148,34476],{"class":157},[147,45150,445],{"class":397},[147,45152,34481],{"class":157},[147,45154,45155,45157,45159],{"class":149,"line":8251},[147,45156,34486],{"class":157},[147,45158,445],{"class":397},[147,45160,34491],{"class":157},[147,45162,45163],{"class":149,"line":8257},[147,45164,34496],{"class":458},[147,45166,45167],{"class":149,"line":8284},[147,45168,33149],{"class":157},[147,45170,45171],{"class":149,"line":8289},[147,45172,34505],{"class":458},[147,45174,45175,45177,45179],{"class":149,"line":8295},[147,45176,32934],{"class":157},[147,45178,445],{"class":397},[147,45180,34514],{"class":157},[147,45182,45183],{"class":149,"line":8307},[147,45184,34519],{"class":458},[147,45186,45187,45189,45191,45193,45195,45197,45199],{"class":149,"line":8319},[147,45188,32951],{"class":157},[147,45190,445],{"class":397},[147,45192,32956],{"class":157},[147,45194,32959],{"class":5490},[147,45196,445],{"class":397},[147,45198,616],{"class":448},[147,45200,407],{"class":157},[147,45202,45203],{"class":149,"line":8331},[147,45204,34540],{"class":458},[147,45206,45207],{"class":149,"line":9990},[147,45208,34545],{"class":458},[147,45210,45211],{"class":149,"line":10015},[147,45212,34550],{"class":458},[147,45214,45215,45217,45219,45221,45223],{"class":149,"line":10038},[147,45216,34555],{"class":157},[147,45218,9751],{"class":397},[147,45220,33061],{"class":157},[147,45222,3223],{"class":397},[147,45224,34564],{"class":157},[147,45226,45227],{"class":149,"line":10062},[147,45228,34569],{"class":458},[147,45230,45231,45233,45235,45237,45239],{"class":149,"line":10067},[147,45232,34574],{"class":157},[147,45234,9751],{"class":397},[147,45236,34579],{"class":157},[147,45238,590],{"class":448},[147,45240,407],{"class":157},[147,45242,45243],{"class":149,"line":10072},[147,45244,2674],{"emptyLinePlaceholder":324},[147,45246,45247],{"class":149,"line":10077},[147,45248,34592],{"class":458},[147,45250,45251,45253,45255,45257,45259],{"class":149,"line":10086},[147,45252,34597],{"class":157},[147,45254,445],{"class":397},[147,45256,34602],{"class":157},[147,45258,983],{"class":397},[147,45260,34607],{"class":157},[147,45262,45263],{"class":149,"line":10091},[147,45264,34612],{"class":458},[147,45266,45267,45269,45271,45273],{"class":149,"line":10097},[147,45268,32725],{"class":448},[147,45270,401],{"class":157},[147,45272,34621],{"class":504},[147,45274,34624],{"class":157},[147,45276,45277],{"class":149,"line":10118},[147,45278,2674],{"emptyLinePlaceholder":324},[147,45280,45281],{"class":149,"line":10124},[147,45282,34633],{"class":458},[147,45284,45285,45287,45289,45291,45293],{"class":149,"line":10138},[147,45286,1805],{"class":397},[147,45288,31494],{"class":448},[147,45290,3223],{"class":397},[147,45292,31499],{"class":504},[147,45294,4013],{"class":157},[147,45296,45297],{"class":149,"line":10144},[147,45298,34650],{"class":458},[147,45300,45301,45303,45305],{"class":149,"line":10171},[147,45302,31563],{"class":157},[147,45304,445],{"class":397},[147,45306,44825],{"class":157},[147,45308,45309],{"class":149,"line":10180},[147,45310,34663],{"class":458},[147,45312,45313],{"class":149,"line":10186},[147,45314,34668],{"class":458},[147,45316,45317,45319,45321],{"class":149,"line":10194},[147,45318,34673],{"class":157},[147,45320,34676],{"class":504},[147,45322,30771],{"class":157},[147,45324,45325],{"class":149,"line":10199},[147,45326,34683],{"class":458},[147,45328,45329,45331,45333],{"class":149,"line":16877},[147,45330,34296],{"class":157},[147,45332,445],{"class":397},[147,45334,34692],{"class":157},[147,45336,45337],{"class":149,"line":16883},[147,45338,34697],{"class":458},[147,45340,45341],{"class":149,"line":16906},[147,45342,34702],{"class":157},[147,45344,45345],{"class":149,"line":16912},[147,45346,2674],{"emptyLinePlaceholder":324},[147,45348,45349],{"class":149,"line":16935},[147,45350,34711],{"class":458},[147,45352,45353],{"class":149,"line":16949},[147,45354,34716],{"class":458},[147,45356,45357,45359,45361,45363,45365,45367,45369],{"class":149,"line":16969},[147,45358,31511],{"class":157},[147,45360,445],{"class":397},[147,45362,31518],{"class":504},[147,45364,1978],{"class":397},[147,45366,31523],{"class":157},[147,45368,1975],{"class":397},[147,45370,34393],{"class":504},[147,45372,45373,45375,45377],{"class":149,"line":16975},[147,45374,31563],{"class":157},[147,45376,445],{"class":397},[147,45378,32563],{"class":157},[147,45380,45381],{"class":149,"line":16986},[147,45382,34745],{"class":458},[147,45384,45385],{"class":149,"line":17009},[147,45386,34750],{"class":458},[147,45388,45389,45391,45393,45395,45397,45399,45401,45403,45405,45407,45409,45411,45413,45415,45417,45419,45421,45423,45425,45427,45429,45431,45433],{"class":149,"line":17031},[147,45390,34755],{"class":157},[147,45392,445],{"class":397},[147,45394,1289],{"class":157},[147,45396,34762],{"class":504},[147,45398,777],{"class":157},[147,45400,34767],{"class":504},[147,45402,777],{"class":157},[147,45404,34772],{"class":504},[147,45406,777],{"class":157},[147,45408,34777],{"class":504},[147,45410,777],{"class":157},[147,45412,34782],{"class":504},[147,45414,777],{"class":157},[147,45416,34787],{"class":504},[147,45418,777],{"class":157},[147,45420,34792],{"class":504},[147,45422,777],{"class":157},[147,45424,34797],{"class":504},[147,45426,777],{"class":157},[147,45428,34802],{"class":504},[147,45430,777],{"class":157},[147,45432,34807],{"class":504},[147,45434,33520],{"class":157},[147,45436,45437,45439],{"class":149,"line":17036},[147,45438,34452],{"class":397},[147,45440,33158],{"class":157},[147,45442,45443],{"class":149,"line":17042},[147,45444,34820],{"class":458},[147,45446,45447,45449,45451,45453],{"class":149,"line":17056},[147,45448,3677],{"class":397},[147,45450,34827],{"class":157},[147,45452,26317],{"class":397},[147,45454,34471],{"class":157},[147,45456,45457,45459,45461],{"class":149,"line":17069},[147,45458,32884],{"class":157},[147,45460,445],{"class":397},[147,45462,32889],{"class":157},[147,45464,45465,45467,45469],{"class":149,"line":17074},[147,45466,32899],{"class":157},[147,45468,445],{"class":397},[147,45470,32904],{"class":157},[147,45472,45473],{"class":149,"line":17088},[147,45474,2674],{"emptyLinePlaceholder":324},[147,45476,45477],{"class":149,"line":17093},[147,45478,34856],{"class":458},[147,45480,45481],{"class":149,"line":17099},[147,45482,33149],{"class":157},[147,45484,45485],{"class":149,"line":17104},[147,45486,34865],{"class":458},[147,45488,45489,45491,45493],{"class":149,"line":17118},[147,45490,32934],{"class":157},[147,45492,445],{"class":397},[147,45494,32939],{"class":157},[147,45496,45497],{"class":149,"line":17123},[147,45498,34878],{"class":458},[147,45500,45501,45503,45505,45507,45509,45511,45513],{"class":149,"line":17128},[147,45502,32951],{"class":157},[147,45504,445],{"class":397},[147,45506,32956],{"class":157},[147,45508,32959],{"class":5490},[147,45510,445],{"class":397},[147,45512,616],{"class":448},[147,45514,407],{"class":157},[147,45516,45517],{"class":149,"line":17142},[147,45518,34899],{"class":458},[147,45520,45521,45523,45525],{"class":149,"line":17154},[147,45522,34904],{"class":157},[147,45524,445],{"class":397},[147,45526,34909],{"class":157},[147,45528,45529,45531,45533],{"class":149,"line":17159},[147,45530,34914],{"class":157},[147,45532,445],{"class":397},[147,45534,34919],{"class":157},[147,45536,45537,45539,45541,45543,45545,45547,45549,45551],{"class":149,"line":17172},[147,45538,34924],{"class":448},[147,45540,401],{"class":157},[147,45542,34929],{"class":504},[147,45544,34932],{"class":157},[147,45546,34935],{"class":504},[147,45548,777],{"class":157},[147,45550,34940],{"class":504},[147,45552,34943],{"class":157},[367,45554,45556],{"id":45555},"_24训练自己的数据集","2.4.训练自己的数据集",[19,45558,45559],{},"猫狗分类任务",[19,45561,45562],{},"划分数据集和验证集",[138,45564,45566],{"className":30652,"code":45565,"language":30654,"meta":143,"style":143},"# 创建脚本，用于划分数据集和验证集\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",[51,45567,45568,45573,45580,45585,45596,45603,45607,45617,45631,45640,45644,45649,45659,45679,45683,45688,45698,45709,45722,45726,45731,45740,45750,45761,45765,45770,45780,45784,45789,45794,45799,45804,45809,45813,45823,45850,45863,45875,45902,45907,45912,45926,45931,45943,45958,45973,45981,45985,45990,45996,46008,46021,46026,46031,46036,46086,46092,46096],{"__ignoreMap":143},[147,45569,45570],{"class":149,"line":150},[147,45571,45572],{"class":458},"# 创建脚本，用于划分数据集和验证集\n",[147,45574,45575,45577],{"class":149,"line":312},[147,45576,30666],{"class":397},[147,45578,45579],{"class":157}," os\n",[147,45581,45582],{"class":149,"line":1454},[147,45583,45584],{"class":458},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[147,45586,45587,45589,45592,45594],{"class":149,"line":1469},[147,45588,31011],{"class":397},[147,45590,45591],{"class":157}," shutil ",[147,45593,30666],{"class":397},[147,45595,32096],{"class":157},[147,45597,45598,45600],{"class":149,"line":1475},[147,45599,30666],{"class":397},[147,45601,45602],{"class":157}," random\n",[147,45604,45605],{"class":149,"line":1489},[147,45606,2674],{"emptyLinePlaceholder":324},[147,45608,45609,45611,45614],{"class":149,"line":1495},[147,45610,32221],{"class":397},[147,45612,45613],{"class":2237}," mkfile",[147,45615,45616],{"class":157},"(file):\n",[147,45618,45619,45621,45623,45626,45629],{"class":149,"line":1586},[147,45620,3375],{"class":397},[147,45622,39204],{"class":397},[147,45624,45625],{"class":157}," os.path.exists(",[147,45627,45628],{"class":5490},"file",[147,45630,31060],{"class":157},[147,45632,45633,45636,45638],{"class":149,"line":1592},[147,45634,45635],{"class":157},"        os.makedirs(",[147,45637,45628],{"class":5490},[147,45639,407],{"class":157},[147,45641,45642],{"class":149,"line":1604},[147,45643,2674],{"emptyLinePlaceholder":324},[147,45645,45646],{"class":149,"line":1886},[147,45647,45648],{"class":458},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[147,45650,45651,45654,45656],{"class":149,"line":1891},[147,45652,45653],{"class":157},"file_path",[147,45655,445],{"class":397},[147,45657,45658],{"class":504},"'data_cat_dog'\n",[147,45660,45661,45664,45666,45669,45671,45674,45676],{"class":149,"line":1897},[147,45662,45663],{"class":157},"flower_class",[147,45665,445],{"class":397},[147,45667,45668],{"class":157},"[cla ",[147,45670,3299],{"class":397},[147,45672,45673],{"class":157}," cla ",[147,45675,26317],{"class":397},[147,45677,45678],{"class":157}," os.listdir(file_path)]\n",[147,45680,45681],{"class":149,"line":1902},[147,45682,2674],{"emptyLinePlaceholder":324},[147,45684,45685],{"class":149,"line":1916},[147,45686,45687],{"class":458},"# 创建训练集train文件夹\n",[147,45689,45690,45693,45696],{"class":149,"line":1921},[147,45691,45692],{"class":157},"mkfile(",[147,45694,45695],{"class":504},"'data\u002Ftrain'",[147,45697,407],{"class":157},[147,45699,45700,45702,45704,45706],{"class":149,"line":1927},[147,45701,3299],{"class":397},[147,45703,45673],{"class":157},[147,45705,26317],{"class":397},[147,45707,45708],{"class":157}," flower_class:\n",[147,45710,45711,45714,45717,45719],{"class":149,"line":1948},[147,45712,45713],{"class":157},"    mkfile(",[147,45715,45716],{"class":504},"'data\u002Ftrain\u002F'",[147,45718,880],{"class":397},[147,45720,45721],{"class":157},"cla)\n",[147,45723,45724],{"class":149,"line":1953},[147,45725,2674],{"emptyLinePlaceholder":324},[147,45727,45728],{"class":149,"line":1967},[147,45729,45730],{"class":458},"# 创建验证集val文件夹\n",[147,45732,45733,45735,45738],{"class":149,"line":1972},[147,45734,45692],{"class":157},[147,45736,45737],{"class":504},"'data\u002Ftest'",[147,45739,407],{"class":157},[147,45741,45742,45744,45746,45748],{"class":149,"line":2001},[147,45743,3299],{"class":397},[147,45745,45673],{"class":157},[147,45747,26317],{"class":397},[147,45749,45708],{"class":157},[147,45751,45752,45754,45757,45759],{"class":149,"line":2006},[147,45753,45713],{"class":157},[147,45755,45756],{"class":504},"'data\u002Ftest\u002F'",[147,45758,880],{"class":397},[147,45760,45721],{"class":157},[147,45762,45763],{"class":149,"line":2023},[147,45764,2674],{"emptyLinePlaceholder":324},[147,45766,45767],{"class":149,"line":2028},[147,45768,45769],{"class":458},"# 划分比例，训练集：测试集=9：1\n",[147,45771,45772,45775,45777],{"class":149,"line":2033},[147,45773,45774],{"class":157},"split_rate",[147,45776,445],{"class":397},[147,45778,45779],{"class":448},"0.1\n",[147,45781,45782],{"class":149,"line":2038},[147,45783,2674],{"emptyLinePlaceholder":324},[147,45785,45786],{"class":149,"line":2052},[147,45787,45788],{"class":458},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[147,45790,45791],{"class":149,"line":2057},[147,45792,45793],{"class":458},"# cla_path：当前类别的原始图片路径\n",[147,45795,45796],{"class":149,"line":2851},[147,45797,45798],{"class":458},"# images：当前类别下所有图片的文件名列表\n",[147,45800,45801],{"class":149,"line":2865},[147,45802,45803],{"class":458},"# num：该类别图片总数\n",[147,45805,45806],{"class":149,"line":2873},[147,45807,45808],{"class":458},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[147,45810,45811],{"class":149,"line":2878},[147,45812,2674],{"emptyLinePlaceholder":324},[147,45814,45815,45817,45819,45821],{"class":149,"line":2884},[147,45816,3299],{"class":397},[147,45818,45673],{"class":157},[147,45820,26317],{"class":397},[147,45822,45708],{"class":157},[147,45824,45825,45828,45830,45833,45835,45838,45841,45843,45845,45847],{"class":149,"line":2890},[147,45826,45827],{"class":157},"    cla_path ",[147,45829,445],{"class":397},[147,45831,45832],{"class":157}," file_path ",[147,45834,880],{"class":397},[147,45836,45837],{"class":504}," '\u002F'",[147,45839,45840],{"class":397}," +",[147,45842,45673],{"class":157},[147,45844,880],{"class":397},[147,45846,45837],{"class":504},[147,45848,45849],{"class":458},"  # 某一类别的子目录\n",[147,45851,45852,45855,45857,45860],{"class":149,"line":2895},[147,45853,45854],{"class":157},"    images ",[147,45856,445],{"class":397},[147,45858,45859],{"class":157}," os.listdir(cla_path)  ",[147,45861,45862],{"class":458},"# iamges 列表存储了该目录下所有图像的名称\n",[147,45864,45865,45868,45870,45872],{"class":149,"line":8222},[147,45866,45867],{"class":157},"    num ",[147,45869,445],{"class":397},[147,45871,7605],{"class":448},[147,45873,45874],{"class":157},"(images)\n",[147,45876,45877,45880,45882,45885,45887,45889,45891,45894,45896,45899],{"class":149,"line":8246},[147,45878,45879],{"class":157},"    eval_index ",[147,45881,445],{"class":397},[147,45883,45884],{"class":157}," random.sample(images, ",[147,45886,892],{"class":5490},[147,45888,445],{"class":397},[147,45890,404],{"class":448},[147,45892,45893],{"class":157},"(num ",[147,45895,854],{"class":397},[147,45897,45898],{"class":157}," split_rate))  ",[147,45900,45901],{"class":458},"# 从images列表中随机抽取 k 个图像名称\n",[147,45903,45904],{"class":149,"line":8251},[147,45905,45906],{"class":458},"    # 遍历该类别下的所有图片\n",[147,45908,45909],{"class":149,"line":8257},[147,45910,45911],{"class":458},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[147,45913,45914,45916,45919,45921,45923],{"class":149,"line":8284},[147,45915,3475],{"class":397},[147,45917,45918],{"class":157}," index, image ",[147,45920,26317],{"class":397},[147,45922,31880],{"class":448},[147,45924,45925],{"class":157},"(images):\n",[147,45927,45928],{"class":149,"line":8289},[147,45929,45930],{"class":458},"        # eval_index 中保存验证集val的图像名称\n",[147,45932,45933,45935,45938,45940],{"class":149,"line":8295},[147,45934,2771],{"class":397},[147,45936,45937],{"class":157}," image ",[147,45939,26317],{"class":397},[147,45941,45942],{"class":157}," eval_index:\n",[147,45944,45945,45948,45950,45953,45955],{"class":149,"line":8307},[147,45946,45947],{"class":157},"            image_path ",[147,45949,445],{"class":397},[147,45951,45952],{"class":157}," cla_path ",[147,45954,880],{"class":397},[147,45956,45957],{"class":157}," image\n",[147,45959,45960,45963,45965,45968,45970],{"class":149,"line":8319},[147,45961,45962],{"class":157},"            new_path ",[147,45964,445],{"class":397},[147,45966,45967],{"class":504}," 'data\u002Ftest\u002F'",[147,45969,45840],{"class":397},[147,45971,45972],{"class":157}," cla\n",[147,45974,45975,45978],{"class":149,"line":8331},[147,45976,45977],{"class":157},"            copy(image_path, new_path)  ",[147,45979,45980],{"class":458},"# 将选中的图像复制到新路径\n",[147,45982,45983],{"class":149,"line":9990},[147,45984,2674],{"emptyLinePlaceholder":324},[147,45986,45987],{"class":149,"line":10015},[147,45988,45989],{"class":458},"        # 其余的图像保存在训练集train中\n",[147,45991,45992,45994],{"class":149,"line":10038},[147,45993,2808],{"class":397},[147,45995,4013],{"class":157},[147,45997,45998,46000,46002,46004,46006],{"class":149,"line":10062},[147,45999,45947],{"class":157},[147,46001,445],{"class":397},[147,46003,45952],{"class":157},[147,46005,880],{"class":397},[147,46007,45957],{"class":157},[147,46009,46010,46012,46014,46017,46019],{"class":149,"line":10067},[147,46011,45962],{"class":157},[147,46013,445],{"class":397},[147,46015,46016],{"class":504}," 'data\u002Ftrain\u002F'",[147,46018,45840],{"class":397},[147,46020,45972],{"class":157},[147,46022,46023],{"class":149,"line":10072},[147,46024,46025],{"class":157},"            copy(image_path, new_path)\n",[147,46027,46028],{"class":149,"line":10077},[147,46029,46030],{"class":458},"            # 打印进度条信息\n",[147,46032,46033],{"class":149,"line":10086},[147,46034,46035],{"class":458},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[147,46037,46038,46040,46042,46044,46047,46049,46051,46054,46056,46058,46060,46063,46066,46068,46070,46073,46076,46078,46080,46083],{"class":149,"line":10091},[147,46039,32725],{"class":448},[147,46041,401],{"class":157},[147,46043,650],{"class":504},[147,46045,46046],{"class":448},"\\r",[147,46048,1289],{"class":504},[147,46050,32733],{"class":448},[147,46052,46053],{"class":504},"] processing [",[147,46055,32733],{"class":448},[147,46057,983],{"class":504},[147,46059,32733],{"class":448},[147,46061,46062],{"class":504},"]\"",[147,46064,46065],{"class":157},".format(cla, index ",[147,46067,880],{"class":397},[147,46069,25392],{"class":448},[147,46071,46072],{"class":157},", num), ",[147,46074,46075],{"class":5490},"end",[147,46077,445],{"class":397},[147,46079,7926],{"class":504},[147,46081,46082],{"class":157},")  ",[147,46084,46085],{"class":458},"# processing bar\n",[147,46087,46088,46090],{"class":149,"line":10097},[147,46089,31573],{"class":448},[147,46091,2250],{"class":157},[147,46093,46094],{"class":149,"line":10118},[147,46095,2674],{"emptyLinePlaceholder":324},[147,46097,46098,46100,46102,46105],{"class":149,"line":10124},[147,46099,30689],{"class":448},[147,46101,401],{"class":157},[147,46103,46104],{"class":504},"\"processing done!\"",[147,46106,407],{"class":157},[19,46108,46109],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22271,46111,46113],{"id":46112},"_242模型代码","2.4.2.模型代码",[19,46115,46116],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[138,46118,46120],{"className":30652,"code":46119,"language":30654,"meta":143,"style":143},"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",[51,46121,46122,46128,46138,46148,46152,46168,46176,46190,46200,46204,46234,46238,46272,46318,46322,46356,46402,46406,46410,46444,46474,46478,46486,46500,46522,46544,46562,46566,46580,46584,46588,46604,46608,46616,46630,46640,46684,46688,46716,46720,46730,46758,46762,46798,46802,46830,46834,46844,46876,46908,46936,46940,46950,46982,47014,47046,47078,47110,47138,47142,47152,47184,47216,47228,47232,47244,47248,47252,47264,47272,47292,47296,47300,47304,47308,47312,47316,47330,47338,47346,47358,47372,47380,47384,47392,47402,47412,47422,47432,47442,47448,47452,47456,47468,47488,47496],{"__ignoreMap":143},[147,46123,46124,46126],{"class":149,"line":150},[147,46125,30666],{"class":397},[147,46127,30669],{"class":157},[147,46129,46130,46132,46134,46136],{"class":149,"line":312},[147,46131,31011],{"class":397},[147,46133,31014],{"class":157},[147,46135,30666],{"class":397},[147,46137,31019],{"class":157},[147,46139,46140,46142,46144,46146],{"class":149,"line":1454},[147,46141,31011],{"class":397},[147,46143,31031],{"class":157},[147,46145,30666],{"class":397},[147,46147,31036],{"class":157},[147,46149,46150],{"class":149,"line":1469},[147,46151,2674],{"emptyLinePlaceholder":324},[147,46153,46154,46156,46158,46160,46162,46164,46166],{"class":149,"line":1475},[147,46155,14967],{"class":397},[147,46157,41767],{"class":2237},[147,46159,401],{"class":157},[147,46161,31052],{"class":2237},[147,46163,957],{"class":157},[147,46165,31057],{"class":2237},[147,46167,31060],{"class":157},[147,46169,46170,46172,46174],{"class":149,"line":1489},[147,46171,31075],{"class":397},[147,46173,31078],{"class":448},[147,46175,41786],{"class":157},[147,46177,46178,46180,46182,46184,46186,46188],{"class":149,"line":1495},[147,46179,31091],{"class":448},[147,46181,41793],{"class":157},[147,46183,31097],{"class":448},[147,46185,31100],{"class":157},[147,46187,31103],{"class":448},[147,46189,2250],{"class":157},[147,46191,46192,46194,46196,46198],{"class":149,"line":1586},[147,46193,31119],{"class":448},[147,46195,35045],{"class":157},[147,46197,445],{"class":397},[147,46199,35050],{"class":157},[147,46201,46202],{"class":149,"line":1592},[147,46203,41816],{"class":458},[147,46205,46206,46208,46210,46212,46214,46216,46218,46220,46222,46224,46226,46228,46230,46232],{"class":149,"line":1604},[147,46207,31119],{"class":448},[147,46209,41823],{"class":157},[147,46211,445],{"class":397},[147,46213,31127],{"class":157},[147,46215,31130],{"class":5490},[147,46217,445],{"class":397},[147,46219,41834],{"class":157},[147,46221,31139],{"class":5490},[147,46223,445],{"class":397},[147,46225,41841],{"class":157},[147,46227,31148],{"class":5490},[147,46229,445],{"class":397},[147,46231,616],{"class":448},[147,46233,407],{"class":157},[147,46235,46236],{"class":149,"line":1886},[147,46237,41854],{"class":458},[147,46239,46240,46242,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262,46264,46266,46268,46270],{"class":149,"line":1891},[147,46241,31119],{"class":448},[147,46243,41861],{"class":157},[147,46245,445],{"class":397},[147,46247,31127],{"class":157},[147,46249,31130],{"class":5490},[147,46251,445],{"class":397},[147,46253,41834],{"class":157},[147,46255,31139],{"class":5490},[147,46257,445],{"class":397},[147,46259,41878],{"class":157},[147,46261,590],{"class":448},[147,46263,41883],{"class":157},[147,46265,31148],{"class":5490},[147,46267,445],{"class":397},[147,46269,616],{"class":448},[147,46271,407],{"class":157},[147,46273,46274,46276,46278,46280,46282,46284,46286,46288,46290,46292,46294,46296,46298,46300,46302,46304,46306,46308,46310,46312,46314,46316],{"class":149,"line":1897},[147,46275,31119],{"class":448},[147,46277,41898],{"class":157},[147,46279,445],{"class":397},[147,46281,31127],{"class":157},[147,46283,31130],{"class":5490},[147,46285,445],{"class":397},[147,46287,41878],{"class":157},[147,46289,590],{"class":448},[147,46291,41883],{"class":157},[147,46293,31139],{"class":5490},[147,46295,445],{"class":397},[147,46297,41878],{"class":157},[147,46299,616],{"class":448},[147,46301,41883],{"class":157},[147,46303,31148],{"class":5490},[147,46305,445],{"class":397},[147,46307,471],{"class":448},[147,46309,777],{"class":157},[147,46311,31157],{"class":5490},[147,46313,445],{"class":397},[147,46315,616],{"class":448},[147,46317,407],{"class":157},[147,46319,46320],{"class":149,"line":1902},[147,46321,41943],{"class":458},[147,46323,46324,46326,46328,46330,46332,46334,46336,46338,46340,46342,46344,46346,46348,46350,46352,46354],{"class":149,"line":1916},[147,46325,31119],{"class":448},[147,46327,41950],{"class":157},[147,46329,445],{"class":397},[147,46331,31127],{"class":157},[147,46333,31130],{"class":5490},[147,46335,445],{"class":397},[147,46337,41834],{"class":157},[147,46339,31139],{"class":5490},[147,46341,445],{"class":397},[147,46343,41967],{"class":157},[147,46345,590],{"class":448},[147,46347,41883],{"class":157},[147,46349,31148],{"class":5490},[147,46351,445],{"class":397},[147,46353,616],{"class":448},[147,46355,407],{"class":157},[147,46357,46358,46360,46362,46364,46366,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398,46400],{"class":149,"line":1921},[147,46359,31119],{"class":448},[147,46361,41986],{"class":157},[147,46363,445],{"class":397},[147,46365,31127],{"class":157},[147,46367,31130],{"class":5490},[147,46369,445],{"class":397},[147,46371,41967],{"class":157},[147,46373,590],{"class":448},[147,46375,41883],{"class":157},[147,46377,31139],{"class":5490},[147,46379,445],{"class":397},[147,46381,41967],{"class":157},[147,46383,616],{"class":448},[147,46385,41883],{"class":157},[147,46387,31148],{"class":5490},[147,46389,445],{"class":397},[147,46391,718],{"class":448},[147,46393,777],{"class":157},[147,46395,31157],{"class":5490},[147,46397,445],{"class":397},[147,46399,477],{"class":448},[147,46401,407],{"class":157},[147,46403,46404],{"class":149,"line":1927},[147,46405,42031],{"class":458},[147,46407,46408],{"class":149,"line":1948},[147,46409,42036],{"class":458},[147,46411,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430,46432,46434,46436,46438,46440,46442],{"class":149,"line":1953},[147,46413,31119],{"class":448},[147,46415,42043],{"class":157},[147,46417,445],{"class":397},[147,46419,35103],{"class":157},[147,46421,31148],{"class":5490},[147,46423,445],{"class":397},[147,46425,471],{"class":448},[147,46427,777],{"class":157},[147,46429,31203],{"class":5490},[147,46431,445],{"class":397},[147,46433,616],{"class":448},[147,46435,777],{"class":157},[147,46437,31157],{"class":5490},[147,46439,445],{"class":397},[147,46441,616],{"class":448},[147,46443,407],{"class":157},[147,46445,46446,46448,46450,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472],{"class":149,"line":1967},[147,46447,31119],{"class":448},[147,46449,42078],{"class":157},[147,46451,445],{"class":397},[147,46453,31127],{"class":157},[147,46455,31130],{"class":5490},[147,46457,445],{"class":397},[147,46459,41834],{"class":157},[147,46461,31139],{"class":5490},[147,46463,445],{"class":397},[147,46465,42095],{"class":157},[147,46467,31148],{"class":5490},[147,46469,445],{"class":397},[147,46471,616],{"class":448},[147,46473,407],{"class":157},[147,46475,46476],{"class":149,"line":1972},[147,46477,2674],{"emptyLinePlaceholder":324},[147,46479,46480,46482,46484],{"class":149,"line":2001},[147,46481,31075],{"class":397},[147,46483,31367],{"class":2237},[147,46485,31370],{"class":157},[147,46487,46488,46490,46492,46494,46496,46498],{"class":149,"line":2006},[147,46489,42120],{"class":157},[147,46491,445],{"class":397},[147,46493,31097],{"class":448},[147,46495,35458],{"class":157},[147,46497,31097],{"class":448},[147,46499,42131],{"class":157},[147,46501,46502,46504,46506,46508,46510,46512,46514,46516,46518,46520],{"class":149,"line":2023},[147,46503,7359],{"class":157},[147,46505,445],{"class":397},[147,46507,31097],{"class":448},[147,46509,35458],{"class":157},[147,46511,31097],{"class":448},[147,46513,42146],{"class":157},[147,46515,31097],{"class":448},[147,46517,35458],{"class":157},[147,46519,31097],{"class":448},[147,46521,42155],{"class":157},[147,46523,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542],{"class":149,"line":2028},[147,46525,42160],{"class":157},[147,46527,445],{"class":397},[147,46529,31097],{"class":448},[147,46531,35458],{"class":157},[147,46533,31097],{"class":448},[147,46535,42171],{"class":157},[147,46537,31097],{"class":448},[147,46539,35458],{"class":157},[147,46541,31097],{"class":448},[147,46543,42180],{"class":157},[147,46545,46546,46548,46550,46552,46554,46556,46558,46560],{"class":149,"line":2033},[147,46547,42185],{"class":157},[147,46549,445],{"class":397},[147,46551,31097],{"class":448},[147,46553,35458],{"class":157},[147,46555,31097],{"class":448},[147,46557,42196],{"class":157},[147,46559,31097],{"class":448},[147,46561,42201],{"class":157},[147,46563,46564],{"class":149,"line":2038},[147,46565,42206],{"class":458},[147,46567,46568,46570,46572,46574,46576,46578],{"class":149,"line":2052},[147,46569,15025],{"class":397},[147,46571,42213],{"class":157},[147,46573,32959],{"class":5490},[147,46575,445],{"class":397},[147,46577,616],{"class":448},[147,46579,407],{"class":157},[147,46581,46582],{"class":149,"line":2057},[147,46583,2674],{"emptyLinePlaceholder":324},[147,46585,46586],{"class":149,"line":2851},[147,46587,42234],{"class":458},[147,46589,46590,46592,46594,46596,46598,46600,46602],{"class":149,"line":2865},[147,46591,14967],{"class":397},[147,46593,42241],{"class":2237},[147,46595,401],{"class":157},[147,46597,31052],{"class":2237},[147,46599,957],{"class":157},[147,46601,31057],{"class":2237},[147,46603,31060],{"class":157},[147,46605,46606],{"class":149,"line":2873},[147,46607,42256],{"class":458},[147,46609,46610,46612,46614],{"class":149,"line":2878},[147,46611,31075],{"class":397},[147,46613,31078],{"class":448},[147,46615,42265],{"class":157},[147,46617,46618,46620,46622,46624,46626,46628],{"class":149,"line":2884},[147,46619,31091],{"class":448},[147,46621,42272],{"class":157},[147,46623,31097],{"class":448},[147,46625,31100],{"class":157},[147,46627,31103],{"class":448},[147,46629,2250],{"class":157},[147,46631,46632,46634,46636,46638],{"class":149,"line":2890},[147,46633,31119],{"class":448},[147,46635,42287],{"class":157},[147,46637,445],{"class":397},[147,46639,38283],{"class":157},[147,46641,46642,46644,46646,46648,46650,46652,46654,46656,46658,46660,46662,46664,46666,46668,46670,46672,46674,46676,46678,46680,46682],{"class":149,"line":2895},[147,46643,38288],{"class":157},[147,46645,31130],{"class":5490},[147,46647,445],{"class":397},[147,46649,471],{"class":448},[147,46651,777],{"class":157},[147,46653,31139],{"class":5490},[147,46655,445],{"class":397},[147,46657,602],{"class":448},[147,46659,777],{"class":157},[147,46661,31148],{"class":5490},[147,46663,445],{"class":397},[147,46665,768],{"class":448},[147,46667,777],{"class":157},[147,46669,31203],{"class":5490},[147,46671,445],{"class":397},[147,46673,477],{"class":448},[147,46675,777],{"class":157},[147,46677,31157],{"class":5490},[147,46679,445],{"class":397},[147,46681,471],{"class":448},[147,46683,38321],{"class":157},[147,46685,46686],{"class":149,"line":8222},[147,46687,38326],{"class":157},[147,46689,46690,46692,46694,46696,46698,46700,46702,46704,46706,46708,46710,46712,46714],{"class":149,"line":8246},[147,46691,38371],{"class":157},[147,46693,31148],{"class":5490},[147,46695,445],{"class":397},[147,46697,471],{"class":448},[147,46699,777],{"class":157},[147,46701,31203],{"class":5490},[147,46703,445],{"class":397},[147,46705,477],{"class":448},[147,46707,777],{"class":157},[147,46709,31157],{"class":5490},[147,46711,445],{"class":397},[147,46713,616],{"class":448},[147,46715,407],{"class":157},[147,46717,46718],{"class":149,"line":8251},[147,46719,38400],{"class":157},[147,46721,46722,46724,46726,46728],{"class":149,"line":8257},[147,46723,31119],{"class":448},[147,46725,42378],{"class":157},[147,46727,445],{"class":397},[147,46729,38283],{"class":157},[147,46731,46732,46734,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756],{"class":149,"line":8284},[147,46733,38288],{"class":157},[147,46735,31130],{"class":5490},[147,46737,445],{"class":397},[147,46739,602],{"class":448},[147,46741,777],{"class":157},[147,46743,31139],{"class":5490},[147,46745,445],{"class":397},[147,46747,602],{"class":448},[147,46749,777],{"class":157},[147,46751,31148],{"class":5490},[147,46753,445],{"class":397},[147,46755,616],{"class":448},[147,46757,38321],{"class":157},[147,46759,46760],{"class":149,"line":8289},[147,46761,38326],{"class":157},[147,46763,46764,46766,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796],{"class":149,"line":8295},[147,46765,38288],{"class":157},[147,46767,31130],{"class":5490},[147,46769,445],{"class":397},[147,46771,602],{"class":448},[147,46773,777],{"class":157},[147,46775,31139],{"class":5490},[147,46777,445],{"class":397},[147,46779,42433],{"class":448},[147,46781,777],{"class":157},[147,46783,31148],{"class":5490},[147,46785,445],{"class":397},[147,46787,471],{"class":448},[147,46789,777],{"class":157},[147,46791,31157],{"class":5490},[147,46793,445],{"class":397},[147,46795,616],{"class":448},[147,46797,38321],{"class":157},[147,46799,46800],{"class":149,"line":8307},[147,46801,38326],{"class":157},[147,46803,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828],{"class":149,"line":8319},[147,46805,38371],{"class":157},[147,46807,31148],{"class":5490},[147,46809,445],{"class":397},[147,46811,471],{"class":448},[147,46813,777],{"class":157},[147,46815,31203],{"class":5490},[147,46817,445],{"class":397},[147,46819,477],{"class":448},[147,46821,777],{"class":157},[147,46823,31157],{"class":5490},[147,46825,445],{"class":397},[147,46827,616],{"class":448},[147,46829,407],{"class":157},[147,46831,46832],{"class":149,"line":8331},[147,46833,38400],{"class":157},[147,46835,46836,46838,46840,46842],{"class":149,"line":9990},[147,46837,31119],{"class":448},[147,46839,42494],{"class":157},[147,46841,445],{"class":397},[147,46843,38283],{"class":157},[147,46845,46846,46848,46850,46852,46854,46856,46858,46860,46862,46864,46866,46868,46870,46872,46874],{"class":149,"line":10015},[147,46847,42503],{"class":157},[147,46849,42433],{"class":448},[147,46851,777],{"class":157},[147,46853,602],{"class":448},[147,46855,42512],{"class":157},[147,46857,608],{"class":448},[147,46859,777],{"class":157},[147,46861,32344],{"class":448},[147,46863,42521],{"class":157},[147,46865,1000],{"class":448},[147,46867,777],{"class":157},[147,46869,596],{"class":448},[147,46871,42530],{"class":157},[147,46873,596],{"class":448},[147,46875,38321],{"class":157},[147,46877,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902,46904,46906],{"class":149,"line":10038},[147,46879,42503],{"class":157},[147,46881,35144],{"class":448},[147,46883,777],{"class":157},[147,46885,32344],{"class":448},[147,46887,42512],{"class":157},[147,46889,32344],{"class":448},[147,46891,777],{"class":157},[147,46893,42433],{"class":448},[147,46895,42521],{"class":157},[147,46897,596],{"class":448},[147,46899,777],{"class":157},[147,46901,608],{"class":448},[147,46903,42530],{"class":157},[147,46905,602],{"class":448},[147,46907,38321],{"class":157},[147,46909,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934],{"class":149,"line":10062},[147,46911,38371],{"class":157},[147,46913,31148],{"class":5490},[147,46915,445],{"class":397},[147,46917,471],{"class":448},[147,46919,777],{"class":157},[147,46921,31203],{"class":5490},[147,46923,445],{"class":397},[147,46925,477],{"class":448},[147,46927,777],{"class":157},[147,46929,31157],{"class":5490},[147,46931,445],{"class":397},[147,46933,616],{"class":448},[147,46935,407],{"class":157},[147,46937,46938],{"class":149,"line":10067},[147,46939,38400],{"class":157},[147,46941,46942,46944,46946,46948],{"class":149,"line":10072},[147,46943,31119],{"class":448},[147,46945,42605],{"class":157},[147,46947,445],{"class":397},[147,46949,38283],{"class":157},[147,46951,46952,46954,46956,46958,46960,46962,46964,46966,46968,46970,46972,46974,46976,46978,46980],{"class":149,"line":10077},[147,46953,42503],{"class":157},[147,46955,42616],{"class":448},[147,46957,777],{"class":157},[147,46959,42433],{"class":448},[147,46961,42512],{"class":157},[147,46963,608],{"class":448},[147,46965,777],{"class":157},[147,46967,42629],{"class":448},[147,46969,42521],{"class":157},[147,46971,1000],{"class":448},[147,46973,777],{"class":157},[147,46975,1006],{"class":448},[147,46977,42530],{"class":157},[147,46979,602],{"class":448},[147,46981,38321],{"class":157},[147,46983,46984,46986,46988,46990,46992,46994,46996,46998,47000,47002,47004,47006,47008,47010,47012],{"class":149,"line":10086},[147,46985,42503],{"class":157},[147,46987,38731],{"class":448},[147,46989,777],{"class":157},[147,46991,21321],{"class":448},[147,46993,42512],{"class":157},[147,46995,1017],{"class":448},[147,46997,777],{"class":157},[147,46999,31775],{"class":448},[147,47001,42521],{"class":157},[147,47003,1199],{"class":448},[147,47005,777],{"class":157},[147,47007,602],{"class":448},[147,47009,42530],{"class":157},[147,47011,602],{"class":448},[147,47013,38321],{"class":157},[147,47015,47016,47018,47020,47022,47024,47026,47028,47030,47032,47034,47036,47038,47040,47042,47044],{"class":149,"line":10091},[147,47017,42503],{"class":157},[147,47019,38731],{"class":448},[147,47021,777],{"class":157},[147,47023,32344],{"class":448},[147,47025,42512],{"class":157},[147,47027,32344],{"class":448},[147,47029,777],{"class":157},[147,47031,35144],{"class":448},[147,47033,42521],{"class":157},[147,47035,1199],{"class":448},[147,47037,777],{"class":157},[147,47039,602],{"class":448},[147,47041,42530],{"class":157},[147,47043,602],{"class":448},[147,47045,38321],{"class":157},[147,47047,47048,47050,47052,47054,47056,47058,47060,47062,47064,47066,47068,47070,47072,47074,47076],{"class":149,"line":10097},[147,47049,42503],{"class":157},[147,47051,38731],{"class":448},[147,47053,777],{"class":157},[147,47055,1017],{"class":448},[147,47057,42512],{"class":157},[147,47059,32344],{"class":448},[147,47061,777],{"class":157},[147,47063,42726],{"class":448},[147,47065,42521],{"class":157},[147,47067,596],{"class":448},[147,47069,777],{"class":157},[147,47071,602],{"class":448},[147,47073,42530],{"class":157},[147,47075,602],{"class":448},[147,47077,38321],{"class":157},[147,47079,47080,47082,47084,47086,47088,47090,47092,47094,47096,47098,47100,47102,47104,47106,47108],{"class":149,"line":10118},[147,47081,42503],{"class":157},[147,47083,42747],{"class":448},[147,47085,777],{"class":157},[147,47087,35144],{"class":448},[147,47089,42512],{"class":157},[147,47091,21321],{"class":448},[147,47093,777],{"class":157},[147,47095,42760],{"class":448},[147,47097,42521],{"class":157},[147,47099,596],{"class":448},[147,47101,777],{"class":157},[147,47103,32344],{"class":448},[147,47105,42530],{"class":157},[147,47107,32344],{"class":448},[147,47109,38321],{"class":157},[147,47111,47112,47114,47116,47118,47120,47122,47124,47126,47128,47130,47132,47134,47136],{"class":149,"line":10124},[147,47113,38371],{"class":157},[147,47115,31148],{"class":5490},[147,47117,445],{"class":397},[147,47119,471],{"class":448},[147,47121,777],{"class":157},[147,47123,31203],{"class":5490},[147,47125,445],{"class":397},[147,47127,477],{"class":448},[147,47129,777],{"class":157},[147,47131,31157],{"class":5490},[147,47133,445],{"class":397},[147,47135,616],{"class":448},[147,47137,407],{"class":157},[147,47139,47140],{"class":149,"line":10138},[147,47141,38400],{"class":157},[147,47143,47144,47146,47148,47150],{"class":149,"line":10144},[147,47145,31119],{"class":448},[147,47147,42813],{"class":157},[147,47149,445],{"class":397},[147,47151,38283],{"class":157},[147,47153,47154,47156,47158,47160,47162,47164,47166,47168,47170,47172,47174,47176,47178,47180,47182],{"class":149,"line":10171},[147,47155,42503],{"class":157},[147,47157,42824],{"class":448},[147,47159,777],{"class":157},[147,47161,35144],{"class":448},[147,47163,42512],{"class":157},[147,47165,21321],{"class":448},[147,47167,777],{"class":157},[147,47169,42760],{"class":448},[147,47171,42521],{"class":157},[147,47173,596],{"class":448},[147,47175,777],{"class":157},[147,47177,32344],{"class":448},[147,47179,42530],{"class":157},[147,47181,32344],{"class":448},[147,47183,38321],{"class":157},[147,47185,47186,47188,47190,47192,47194,47196,47198,47200,47202,47204,47206,47208,47210,47212,47214],{"class":149,"line":10180},[147,47187,42503],{"class":157},[147,47189,42824],{"class":448},[147,47191,777],{"class":157},[147,47193,35214],{"class":448},[147,47195,42512],{"class":157},[147,47197,42433],{"class":448},[147,47199,777],{"class":157},[147,47201,35214],{"class":448},[147,47203,42521],{"class":157},[147,47205,1006],{"class":448},[147,47207,777],{"class":157},[147,47209,32344],{"class":448},[147,47211,42530],{"class":157},[147,47213,32344],{"class":448},[147,47215,38321],{"class":157},[147,47217,47218,47220,47222,47224,47226],{"class":149,"line":10186},[147,47219,42887],{"class":157},[147,47221,616],{"class":448},[147,47223,777],{"class":157},[147,47225,616],{"class":448},[147,47227,42896],{"class":157},[147,47229,47230],{"class":149,"line":10194},[147,47231,39064],{"class":157},[147,47233,47234,47236,47238,47240,47242],{"class":149,"line":10199},[147,47235,39069],{"class":157},[147,47237,42907],{"class":448},[147,47239,777],{"class":157},[147,47241,477],{"class":448},[147,47243,407],{"class":157},[147,47245,47246],{"class":149,"line":16877},[147,47247,38400],{"class":157},[147,47249,47250],{"class":149,"line":16883},[147,47251,42922],{"class":458},[147,47253,47254,47256,47258,47260,47262],{"class":149,"line":16906},[147,47255,3677],{"class":397},[147,47257,39142],{"class":157},[147,47259,26317],{"class":397},[147,47261,39147],{"class":448},[147,47263,39150],{"class":157},[147,47265,47266,47268,47270],{"class":149,"line":16912},[147,47267,4916],{"class":397},[147,47269,39162],{"class":448},[147,47271,39165],{"class":157},[147,47273,47274,47276,47278,47280,47282,47284,47286,47288,47290],{"class":149,"line":16935},[147,47275,39175],{"class":157},[147,47277,42949],{"class":5490},[147,47279,445],{"class":397},[147,47281,42954],{"class":504},[147,47283,777],{"class":157},[147,47285,39178],{"class":5490},[147,47287,445],{"class":397},[147,47289,39183],{"class":504},[147,47291,407],{"class":157},[147,47293,47294],{"class":149,"line":16949},[147,47295,42969],{"class":458},[147,47297,47298],{"class":149,"line":16969},[147,47299,42974],{"class":458},[147,47301,47302],{"class":149,"line":16975},[147,47303,42979],{"class":458},[147,47305,47306],{"class":149,"line":16986},[147,47307,42984],{"class":458},[147,47309,47310],{"class":149,"line":17009},[147,47311,42989],{"class":458},[147,47313,47314],{"class":149,"line":17031},[147,47315,42994],{"class":458},[147,47317,47318,47320,47322,47324,47326,47328],{"class":149,"line":17036},[147,47319,39195],{"class":397},[147,47321,39198],{"class":157},[147,47323,39201],{"class":397},[147,47325,39204],{"class":397},[147,47327,39207],{"class":448},[147,47329,4013],{"class":157},[147,47331,47332,47334,47336],{"class":149,"line":17042},[147,47333,39219],{"class":157},[147,47335,590],{"class":448},[147,47337,407],{"class":157},[147,47339,47340,47342,47344],{"class":149,"line":17056},[147,47341,43021],{"class":397},[147,47343,39162],{"class":448},[147,47345,39238],{"class":157},[147,47347,47348,47350,47352,47354,47356],{"class":149,"line":17069},[147,47349,43030],{"class":157},[147,47351,590],{"class":448},[147,47353,777],{"class":157},[147,47355,39260],{"class":448},[147,47357,407],{"class":157},[147,47359,47360,47362,47364,47366,47368,47370],{"class":149,"line":17074},[147,47361,43043],{"class":397},[147,47363,39198],{"class":157},[147,47365,39201],{"class":397},[147,47367,39204],{"class":397},[147,47369,39207],{"class":448},[147,47371,4013],{"class":157},[147,47373,47374,47376,47378],{"class":149,"line":17088},[147,47375,43058],{"class":157},[147,47377,590],{"class":448},[147,47379,407],{"class":157},[147,47381,47382],{"class":149,"line":17093},[147,47383,35439],{"class":458},[147,47385,47386,47388,47390],{"class":149,"line":17099},[147,47387,31075],{"class":397},[147,47389,31367],{"class":2237},[147,47391,31370],{"class":157},[147,47393,47394,47396,47398,47400],{"class":149,"line":17104},[147,47395,31375],{"class":157},[147,47397,445],{"class":397},[147,47399,31097],{"class":448},[147,47401,43085],{"class":157},[147,47403,47404,47406,47408,47410],{"class":149,"line":17118},[147,47405,31375],{"class":157},[147,47407,445],{"class":397},[147,47409,31097],{"class":448},[147,47411,43096],{"class":157},[147,47413,47414,47416,47418,47420],{"class":149,"line":17123},[147,47415,31375],{"class":157},[147,47417,445],{"class":397},[147,47419,31097],{"class":448},[147,47421,43107],{"class":157},[147,47423,47424,47426,47428,47430],{"class":149,"line":17128},[147,47425,31375],{"class":157},[147,47427,445],{"class":397},[147,47429,31097],{"class":448},[147,47431,43118],{"class":157},[147,47433,47434,47436,47438,47440],{"class":149,"line":17142},[147,47435,31375],{"class":157},[147,47437,445],{"class":397},[147,47439,31097],{"class":448},[147,47441,43129],{"class":157},[147,47443,47444,47446],{"class":149,"line":17154},[147,47445,15025],{"class":397},[147,47447,31483],{"class":157},[147,47449,47450],{"class":149,"line":17159},[147,47451,2674],{"emptyLinePlaceholder":324},[147,47453,47454],{"class":149,"line":17172},[147,47455,43144],{"class":458},[147,47457,47458,47460,47462,47464,47466],{"class":149,"line":17177},[147,47459,1805],{"class":397},[147,47461,31494],{"class":448},[147,47463,3223],{"class":397},[147,47465,31499],{"class":504},[147,47467,4013],{"class":157},[147,47469,47470,47472,47474,47476,47478,47480,47482,47484,47486],{"class":149,"line":17182},[147,47471,31511],{"class":157},[147,47473,445],{"class":397},[147,47475,30725],{"class":157},[147,47477,31518],{"class":504},[147,47479,1978],{"class":397},[147,47481,31523],{"class":157},[147,47483,1975],{"class":397},[147,47485,30750],{"class":504},[147,47487,407],{"class":157},[147,47489,47490,47492,47494],{"class":149,"line":17187},[147,47491,31563],{"class":157},[147,47493,445],{"class":397},[147,47495,43185],{"class":157},[147,47497,47498,47500,47502,47504,47506,47508,47510,47512],{"class":149,"line":17200},[147,47499,31573],{"class":448},[147,47501,31576],{"class":157},[147,47503,616],{"class":448},[147,47505,777],{"class":157},[147,47507,31775],{"class":448},[147,47509,777],{"class":157},[147,47511,31775],{"class":448},[147,47513,31589],{"class":157},[22271,47515,47517],{"id":47516},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,47519,47520],{},"计算图片的均值与方差，用于训练中归一化处理操作",[138,47522,47524],{"className":30652,"code":47523,"language":30654,"meta":143,"style":143},"# 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",[51,47525,47526,47531,47544,47549,47555,47560,47570,47574,47579,47589,47593,47598,47608,47625,47629,47634,47646,47658,47689,47698,47708,47718,47722,47727,47742,47746,47751,47756,47761,47771,47776,47801,47805,47810,47825,47829,47842,47846,47851,47856,47861,47866,47871,47881,47891,47914,47922,47930,47938,47942,47954,47958,47963,47967,47971,47978,47998,48022,48029,48043,48048,48053,48057,48071,48075,48087],{"__ignoreMap":143},[147,47527,47528],{"class":149,"line":150},[147,47529,47530],{"class":458},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[147,47532,47533,47535,47538,47541],{"class":149,"line":312},[147,47534,31011],{"class":397},[147,47536,47537],{"class":448}," PIL",[147,47539,47540],{"class":397}," import",[147,47542,47543],{"class":157}," Image\n",[147,47545,47546],{"class":149,"line":1454},[147,47547,47548],{"class":458},"# os 用来处理文件夹和文件路径\n",[147,47550,47551,47553],{"class":149,"line":1469},[147,47552,30666],{"class":397},[147,47554,45579],{"class":157},[147,47556,47557],{"class":149,"line":1475},[147,47558,47559],{"class":458},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[147,47561,47562,47564,47566,47568],{"class":149,"line":1489},[147,47563,30666],{"class":397},[147,47565,31654],{"class":157},[147,47567,31657],{"class":397},[147,47569,31660],{"class":157},[147,47571,47572],{"class":149,"line":1495},[147,47573,2674],{"emptyLinePlaceholder":324},[147,47575,47576],{"class":149,"line":1586},[147,47577,47578],{"class":458},"# 文件夹路径，包含所有图片文件\n",[147,47580,47581,47584,47586],{"class":149,"line":1592},[147,47582,47583],{"class":157},"folder_path ",[147,47585,445],{"class":397},[147,47587,47588],{"class":504}," 'data_cat_dog'\n",[147,47590,47591],{"class":149,"line":1604},[147,47592,2674],{"emptyLinePlaceholder":324},[147,47594,47595],{"class":149,"line":1886},[147,47596,47597],{"class":458},"# 初始化累积变量\n",[147,47599,47600,47603,47605],{"class":149,"line":1891},[147,47601,47602],{"class":157},"total_pixels ",[147,47604,445],{"class":397},[147,47606,47607],{"class":448}," 0\n",[147,47609,47610,47613,47615,47618,47620,47622],{"class":149,"line":1897},[147,47611,47612],{"class":157},"sum_normalized_pixel_values ",[147,47614,445],{"class":397},[147,47616,47617],{"class":157}," np.zeros(",[147,47619,471],{"class":448},[147,47621,46082],{"class":157},[147,47623,47624],{"class":458},"# 如果是RGB图像，需要三个通道的均值和方差\n",[147,47626,47627],{"class":149,"line":1902},[147,47628,2674],{"emptyLinePlaceholder":324},[147,47630,47631],{"class":149,"line":1916},[147,47632,47633],{"class":458},"# 遍历文件夹中的图片文件\n",[147,47635,47636,47638,47641,47643],{"class":149,"line":1921},[147,47637,3299],{"class":397},[147,47639,47640],{"class":157}," root, dirs, files ",[147,47642,26317],{"class":397},[147,47644,47645],{"class":157}," os.walk(folder_path):\n",[147,47647,47648,47650,47653,47655],{"class":149,"line":1927},[147,47649,3475],{"class":397},[147,47651,47652],{"class":157}," filename ",[147,47654,26317],{"class":397},[147,47656,47657],{"class":157}," files:\n",[147,47659,47660,47662,47665,47668,47670,47673,47675,47678,47680,47683,47686],{"class":149,"line":1948},[147,47661,2771],{"class":397},[147,47663,47664],{"class":157}," filename.endswith((",[147,47666,47667],{"class":504},"'.jpg'",[147,47669,12709],{"class":157},[147,47671,47672],{"class":504},"'.jpeg'",[147,47674,12709],{"class":157},[147,47676,47677],{"class":504},"'.png'",[147,47679,12709],{"class":157},[147,47681,47682],{"class":504},"'.bmp'",[147,47684,47685],{"class":157},")):  ",[147,47687,47688],{"class":458},"# 可根据实际情况添加其他格式\n",[147,47690,47691,47693,47695],{"class":149,"line":1953},[147,47692,45947],{"class":157},[147,47694,445],{"class":397},[147,47696,47697],{"class":157}," os.path.join(root, filename)\n",[147,47699,47700,47703,47705],{"class":149,"line":1967},[147,47701,47702],{"class":157},"            image ",[147,47704,445],{"class":397},[147,47706,47707],{"class":157}," Image.open(image_path)\n",[147,47709,47710,47713,47715],{"class":149,"line":1972},[147,47711,47712],{"class":157},"            image_array ",[147,47714,445],{"class":397},[147,47716,47717],{"class":157}," np.array(image)\n",[147,47719,47720],{"class":149,"line":2001},[147,47721,2674],{"emptyLinePlaceholder":324},[147,47723,47724],{"class":149,"line":2006},[147,47725,47726],{"class":458},"            # 归一化像素值到0-1之间\n",[147,47728,47729,47732,47734,47737,47739],{"class":149,"line":2023},[147,47730,47731],{"class":157},"            normalized_image_array ",[147,47733,445],{"class":397},[147,47735,47736],{"class":157}," image_array ",[147,47738,983],{"class":397},[147,47740,47741],{"class":448}," 255.0\n",[147,47743,47744],{"class":149,"line":2028},[147,47745,2674],{"emptyLinePlaceholder":324},[147,47747,47748],{"class":149,"line":2033},[147,47749,47750],{"class":458},"            # print(image_path)\n",[147,47752,47753],{"class":149,"line":2038},[147,47754,47755],{"class":458},"            # print(normalized_image_array.shape)\n",[147,47757,47758],{"class":149,"line":2052},[147,47759,47760],{"class":458},"            # 累积归一化后的像素值和像素数量\n",[147,47762,47763,47766,47768],{"class":149,"line":2057},[147,47764,47765],{"class":157},"            total_pixels ",[147,47767,9751],{"class":397},[147,47769,47770],{"class":157}," normalized_image_array.size\n",[147,47772,47773],{"class":149,"line":2851},[147,47774,47775],{"class":458},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[147,47777,47778,47781,47783,47786,47789,47791,47793,47795,47797,47799],{"class":149,"line":2865},[147,47779,47780],{"class":157},"            sum_normalized_pixel_values ",[147,47782,9751],{"class":397},[147,47784,47785],{"class":157}," np.sum(normalized_image_array, ",[147,47787,47788],{"class":5490},"axis",[147,47790,445],{"class":397},[147,47792,401],{"class":157},[147,47794,590],{"class":448},[147,47796,12709],{"class":157},[147,47798,616],{"class":448},[147,47800,30771],{"class":157},[147,47802,47803],{"class":149,"line":2873},[147,47804,2674],{"emptyLinePlaceholder":324},[147,47806,47807],{"class":149,"line":2878},[147,47808,47809],{"class":458},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[147,47811,47812,47815,47817,47820,47822],{"class":149,"line":2884},[147,47813,47814],{"class":157},"mean ",[147,47816,445],{"class":397},[147,47818,47819],{"class":157}," sum_normalized_pixel_values ",[147,47821,983],{"class":397},[147,47823,47824],{"class":157}," total_pixels\n",[147,47826,47827],{"class":149,"line":2890},[147,47828,2674],{"emptyLinePlaceholder":324},[147,47830,47831,47834,47836,47838,47840],{"class":149,"line":2895},[147,47832,47833],{"class":157},"sum_squared_diff ",[147,47835,445],{"class":397},[147,47837,47617],{"class":157},[147,47839,471],{"class":448},[147,47841,407],{"class":157},[147,47843,47844],{"class":149,"line":8222},[147,47845,2674],{"emptyLinePlaceholder":324},[147,47847,47848],{"class":149,"line":8246},[147,47849,47850],{"class":458},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[147,47852,47853],{"class":149,"line":8251},[147,47854,47855],{"class":458},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[147,47857,47858],{"class":149,"line":8257},[147,47859,47860],{"class":458},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[147,47862,47863],{"class":149,"line":8284},[147,47864,47865],{"class":458},"# Image.open(image_path)：打开图片\n",[147,47867,47868],{"class":149,"line":8289},[147,47869,47870],{"class":458},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[147,47872,47873,47875,47877,47879],{"class":149,"line":8295},[147,47874,3299],{"class":397},[147,47876,47640],{"class":157},[147,47878,26317],{"class":397},[147,47880,47645],{"class":157},[147,47882,47883,47885,47887,47889],{"class":149,"line":8307},[147,47884,3475],{"class":397},[147,47886,47652],{"class":157},[147,47888,26317],{"class":397},[147,47890,47657],{"class":157},[147,47892,47893,47895,47897,47899,47901,47903,47905,47907,47909,47911],{"class":149,"line":8319},[147,47894,2771],{"class":397},[147,47896,47664],{"class":157},[147,47898,47667],{"class":504},[147,47900,12709],{"class":157},[147,47902,47672],{"class":504},[147,47904,12709],{"class":157},[147,47906,47677],{"class":504},[147,47908,12709],{"class":157},[147,47910,47682],{"class":504},[147,47912,47913],{"class":157},")):\n",[147,47915,47916,47918,47920],{"class":149,"line":8331},[147,47917,45947],{"class":157},[147,47919,445],{"class":397},[147,47921,47697],{"class":157},[147,47923,47924,47926,47928],{"class":149,"line":9990},[147,47925,47702],{"class":157},[147,47927,445],{"class":397},[147,47929,47707],{"class":157},[147,47931,47932,47934,47936],{"class":149,"line":10015},[147,47933,47712],{"class":157},[147,47935,445],{"class":397},[147,47937,47717],{"class":157},[147,47939,47940],{"class":149,"line":10038},[147,47941,47726],{"class":458},[147,47943,47944,47946,47948,47950,47952],{"class":149,"line":10062},[147,47945,47731],{"class":157},[147,47947,445],{"class":397},[147,47949,47736],{"class":157},[147,47951,983],{"class":397},[147,47953,47741],{"class":448},[147,47955,47956],{"class":149,"line":10067},[147,47957,47755],{"class":458},[147,47959,47960],{"class":149,"line":10072},[147,47961,47962],{"class":458},"            # print(mean.shape)\n",[147,47964,47965],{"class":149,"line":10077},[147,47966,47750],{"class":458},[147,47968,47969],{"class":149,"line":10086},[147,47970,2674],{"emptyLinePlaceholder":324},[147,47972,47973,47976],{"class":149,"line":10091},[147,47974,47975],{"class":397},"            try",[147,47977,4013],{"class":157},[147,47979,47980,47983,47985,47988,47990,47993,47995],{"class":149,"line":10097},[147,47981,47982],{"class":157},"                diff ",[147,47984,445],{"class":397},[147,47986,47987],{"class":157}," (normalized_image_array ",[147,47989,931],{"class":397},[147,47991,47992],{"class":157}," mean) ",[147,47994,10935],{"class":397},[147,47996,47997],{"class":448}," 2\n",[147,47999,48000,48003,48005,48008,48010,48012,48014,48016,48018,48020],{"class":149,"line":10118},[147,48001,48002],{"class":157},"                sum_squared_diff ",[147,48004,9751],{"class":397},[147,48006,48007],{"class":157}," np.sum(diff, ",[147,48009,47788],{"class":5490},[147,48011,445],{"class":397},[147,48013,401],{"class":157},[147,48015,590],{"class":448},[147,48017,12709],{"class":157},[147,48019,616],{"class":448},[147,48021,30771],{"class":157},[147,48023,48024,48027],{"class":149,"line":10124},[147,48025,48026],{"class":397},"            except",[147,48028,4013],{"class":157},[147,48030,48031,48034,48036,48038,48041],{"class":149,"line":10138},[147,48032,48033],{"class":448},"                print",[147,48035,401],{"class":157},[147,48037,452],{"class":397},[147,48039,48040],{"class":504},"\"捕获到自定义异常\"",[147,48042,407],{"class":157},[147,48044,48045],{"class":149,"line":10144},[147,48046,48047],{"class":458},"            # diff = (normalized_image_array - mean) ** 2\n",[147,48049,48050],{"class":149,"line":10171},[147,48051,48052],{"class":458},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[147,48054,48055],{"class":149,"line":10180},[147,48056,2674],{"emptyLinePlaceholder":324},[147,48058,48059,48062,48064,48067,48069],{"class":149,"line":10186},[147,48060,48061],{"class":157},"variance ",[147,48063,445],{"class":397},[147,48065,48066],{"class":157}," sum_squared_diff ",[147,48068,983],{"class":397},[147,48070,47824],{"class":157},[147,48072,48073],{"class":149,"line":10194},[147,48074,2674],{"emptyLinePlaceholder":324},[147,48076,48077,48079,48081,48084],{"class":149,"line":10199},[147,48078,30689],{"class":448},[147,48080,401],{"class":157},[147,48082,48083],{"class":504},"\"Mean:\"",[147,48085,48086],{"class":157},", mean)\n",[147,48088,48089,48091,48093,48096],{"class":149,"line":16877},[147,48090,30689],{"class":448},[147,48092,401],{"class":157},[147,48094,48095],{"class":504},"\"Variance:\"",[147,48097,48098],{"class":157},", variance)\n",[138,48100,48102],{"className":30652,"code":48101,"language":30654,"meta":143,"style":143},"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",[51,48103,48104,48110,48116,48126,48132,48142,48156,48166,48176,48186,48190,48200,48210,48214,48218,48226,48231,48236,48255,48259,48264,48269,48274,48279,48320,48325,48335,48340,48353,48358,48363,48368,48373,48378,48382,48387,48392,48414,48418,48450,48464,48474,48484,48488,48498,48512,48522,48532,48542,48548,48552,48556,48560,48564,48568,48576,48596,48600,48604,48608,48612,48628,48632,48636,48644,48648,48652,48660,48664,48668,48672,48680,48684,48688,48692,48700,48704,48712,48716,48724,48728,48736,48740,48748,48752,48756,48764,48768,48772,48784,48808,48822,48826,48830,48834,48842,48846,48854,48858,48866,48870,48878,48882,48890,48894,48902,48906,48918,48922,48930,48934,48942,48946,48950,48954,48958,48966,48970,48986,48990,48998,49002,49006,49010,49014,49018,49022,49026,49042,49046,49058,49062,49074,49078,49090,49094,49102,49106,49114,49118,49122,49126,49132,49136,49144,49148,49164,49168,49176,49180,49196,49208,49212,49224,49228,49232,49240,49244,49248,49256,49260,49268,49272,49280,49284,49288,49330,49372,49376,49380,49396,49400,49416,49420,49424,49432,49436,49440,49452,49490,49494,49498,49506,49510,49524,49534,49540,49546,49552,49558,49562,49566,49572,49576,49580,49588,49592,49610,49614,49618,49622,49638,49642,49646,49650,49654,49658,49678,49698,49702,49706,49710,49718,49726,49730,49746,49766,49786,49790,49795,49804,49813,49818,49823,49828,49841,49846,49855,49864,49881],{"__ignoreMap":143},[147,48105,48106,48108],{"class":149,"line":150},[147,48107,30666],{"class":397},[147,48109,32096],{"class":157},[147,48111,48112,48114],{"class":149,"line":312},[147,48113,30666],{"class":397},[147,48115,32103],{"class":157},[147,48117,48118,48120,48122,48124],{"class":149,"line":1454},[147,48119,30666],{"class":397},[147,48121,32114],{"class":157},[147,48123,31657],{"class":397},[147,48125,32119],{"class":157},[147,48127,48128,48130],{"class":149,"line":1469},[147,48129,30666],{"class":397},[147,48131,30669],{"class":157},[147,48133,48134,48136,48138,48140],{"class":149,"line":1475},[147,48135,31011],{"class":397},[147,48137,31689],{"class":157},[147,48139,30666],{"class":397},[147,48141,32136],{"class":157},[147,48143,48144,48146,48148,48150,48153],{"class":149,"line":1489},[147,48145,31011],{"class":397},[147,48147,31642],{"class":157},[147,48149,30666],{"class":397},[147,48151,48152],{"class":157}," ImageFolder ",[147,48154,48155],{"class":458},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[147,48157,48158,48160,48162,48164],{"class":149,"line":1495},[147,48159,31011],{"class":397},[147,48161,31672],{"class":157},[147,48163,30666],{"class":397},[147,48165,31677],{"class":157},[147,48167,48168,48170,48172,48174],{"class":149,"line":1586},[147,48169,30666],{"class":397},[147,48171,31689],{"class":157},[147,48173,31657],{"class":397},[147,48175,31694],{"class":157},[147,48177,48178,48180,48182,48184],{"class":149,"line":1592},[147,48179,30666],{"class":397},[147,48181,31706],{"class":157},[147,48183,31657],{"class":397},[147,48185,31711],{"class":157},[147,48187,48188],{"class":149,"line":1604},[147,48189,32181],{"class":458},[147,48191,48192,48194,48196,48198],{"class":149,"line":1886},[147,48193,31011],{"class":397},[147,48195,32188],{"class":157},[147,48197,30666],{"class":397},[147,48199,43305],{"class":157},[147,48201,48202,48204,48206,48208],{"class":149,"line":1891},[147,48203,31011],{"class":397},[147,48205,31014],{"class":157},[147,48207,30666],{"class":397},[147,48209,31019],{"class":157},[147,48211,48212],{"class":149,"line":1897},[147,48213,2674],{"emptyLinePlaceholder":324},[147,48215,48216],{"class":149,"line":1902},[147,48217,32216],{"class":458},[147,48219,48220,48222,48224],{"class":149,"line":1916},[147,48221,32221],{"class":397},[147,48223,32224],{"class":2237},[147,48225,32227],{"class":157},[147,48227,48228],{"class":149,"line":1921},[147,48229,48230],{"class":458},"    # 导入自己的数据集，并进行数据处理\n",[147,48232,48233],{"class":149,"line":1927},[147,48234,48235],{"class":458},"    # 定义数据集的路径\n",[147,48237,48238,48241,48243,48245,48247,48249,48253],{"class":149,"line":1948},[147,48239,48240],{"class":448},"    ROOT_PATH",[147,48242,445],{"class":397},[147,48244,1069],{"class":397},[147,48246,650],{"class":504},[147,48248,957],{"class":448},[147,48250,48252],{"class":48251},"sA_wV","\u002Fdata\u002Ftrain",[147,48254,25407],{"class":504},[147,48256,48257],{"class":149,"line":1953},[147,48258,2674],{"emptyLinePlaceholder":324},[147,48260,48261],{"class":149,"line":1967},[147,48262,48263],{"class":458},"    # 定义归一化方法\n",[147,48265,48266],{"class":149,"line":1972},[147,48267,48268],{"class":458},"    # 这里需要先计算一下数据集的均值和方差\n",[147,48270,48271],{"class":149,"line":2001},[147,48272,48273],{"class":458},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[147,48275,48276],{"class":149,"line":2006},[147,48277,48278],{"class":458},"    # 第一个参数是均值，第二个参数是方差\n",[147,48280,48281,48284,48286,48289,48292,48294,48297,48299,48302,48305,48308,48310,48313,48315,48318],{"class":149,"line":2023},[147,48282,48283],{"class":157},"    normalize",[147,48285,445],{"class":397},[147,48287,48288],{"class":157},"transforms.Normalize([",[147,48290,48291],{"class":448},"0.162",[147,48293,777],{"class":157},[147,48295,48296],{"class":448},"0.151",[147,48298,777],{"class":157},[147,48300,48301],{"class":448},"0.138",[147,48303,48304],{"class":157},"],[",[147,48306,48307],{"class":448},"0.058",[147,48309,777],{"class":157},[147,48311,48312],{"class":448},"0.052",[147,48314,777],{"class":157},[147,48316,48317],{"class":448},"0.048",[147,48319,4931],{"class":157},[147,48321,48322],{"class":149,"line":2028},[147,48323,48324],{"class":458},"    # 定义数据集处理方法变量\n",[147,48326,48327,48330,48332],{"class":149,"line":2033},[147,48328,48329],{"class":157},"    train_transform",[147,48331,445],{"class":397},[147,48333,48334],{"class":157},"transforms.Compose([\n",[147,48336,48337],{"class":149,"line":2038},[147,48338,48339],{"class":458},"        # 调整图像大小为224*224\n",[147,48341,48342,48345,48347,48349,48351],{"class":149,"line":2052},[147,48343,48344],{"class":157},"        transforms.Resize((",[147,48346,31775],{"class":448},[147,48348,777],{"class":157},[147,48350,31775],{"class":448},[147,48352,42896],{"class":157},[147,48354,48355],{"class":149,"line":2057},[147,48356,48357],{"class":458},"        # 将图像转换为张量\n",[147,48359,48360],{"class":149,"line":2851},[147,48361,48362],{"class":157},"        transforms.ToTensor(),\n",[147,48364,48365],{"class":149,"line":2865},[147,48366,48367],{"class":157},"        normalize])\n",[147,48369,48370],{"class":149,"line":2873},[147,48371,48372],{"class":458},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[147,48374,48375],{"class":149,"line":2878},[147,48376,48377],{"class":458},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[147,48379,48380],{"class":149,"line":2884},[147,48381,2674],{"emptyLinePlaceholder":324},[147,48383,48384],{"class":149,"line":2890},[147,48385,48386],{"class":458},"    # 加载数据集\n",[147,48388,48389],{"class":149,"line":2895},[147,48390,48391],{"class":458},"    # 传入数据集路径与处理方法\n",[147,48393,48394,48396,48398,48401,48404,48406,48409,48411],{"class":149,"line":8222},[147,48395,32232],{"class":157},[147,48397,445],{"class":397},[147,48399,48400],{"class":157},"ImageFolder(",[147,48402,48403],{"class":448},"ROOT_PATH",[147,48405,777],{"class":157},[147,48407,48408],{"class":5490},"transform",[147,48410,445],{"class":397},[147,48412,48413],{"class":157},"train_transform)\n",[147,48415,48416],{"class":149,"line":8246},[147,48417,2674],{"emptyLinePlaceholder":324},[147,48419,48420,48422,48424,48426,48428,48430,48432,48434,48436,48438,48440,48442,48444,48446,48448],{"class":149,"line":8251},[147,48421,32284],{"class":157},[147,48423,445],{"class":397},[147,48425,32289],{"class":157},[147,48427,32292],{"class":448},[147,48429,401],{"class":157},[147,48431,32297],{"class":448},[147,48433,854],{"class":397},[147,48435,7632],{"class":448},[147,48437,32304],{"class":157},[147,48439,32292],{"class":448},[147,48441,401],{"class":157},[147,48443,32311],{"class":448},[147,48445,854],{"class":397},[147,48447,7632],{"class":448},[147,48449,32318],{"class":157},[147,48451,48452,48454,48456,48458,48460,48462],{"class":149,"line":8257},[147,48453,32323],{"class":157},[147,48455,445],{"class":397},[147,48457,32328],{"class":157},[147,48459,31811],{"class":5490},[147,48461,445],{"class":397},[147,48463,31816],{"class":157},[147,48465,48466,48468,48470,48472],{"class":149,"line":8284},[147,48467,32339],{"class":5490},[147,48469,445],{"class":397},[147,48471,596],{"class":448},[147,48473,31740],{"class":157},[147,48475,48476,48478,48480,48482],{"class":149,"line":8289},[147,48477,32351],{"class":5490},[147,48479,445],{"class":397},[147,48481,31750],{"class":448},[147,48483,31740],{"class":157},[147,48485,48486],{"class":149,"line":8295},[147,48487,32362],{"class":458},[147,48489,48490,48492,48494,48496],{"class":149,"line":8307},[147,48491,32367],{"class":5490},[147,48493,445],{"class":397},[147,48495,794],{"class":448},[147,48497,407],{"class":157},[147,48499,48500,48502,48504,48506,48508,48510],{"class":149,"line":8319},[147,48501,32378],{"class":157},[147,48503,445],{"class":397},[147,48505,31808],{"class":157},[147,48507,31811],{"class":5490},[147,48509,445],{"class":397},[147,48511,32389],{"class":157},[147,48513,48514,48516,48518,48520],{"class":149,"line":8331},[147,48515,32394],{"class":5490},[147,48517,445],{"class":397},[147,48519,596],{"class":448},[147,48521,31740],{"class":157},[147,48523,48524,48526,48528,48530],{"class":149,"line":9990},[147,48525,32405],{"class":5490},[147,48527,445],{"class":397},[147,48529,31750],{"class":448},[147,48531,31740],{"class":157},[147,48533,48534,48536,48538,48540],{"class":149,"line":10015},[147,48535,32416],{"class":5490},[147,48537,445],{"class":397},[147,48539,794],{"class":448},[147,48541,407],{"class":157},[147,48543,48544,48546],{"class":149,"line":10038},[147,48545,4364],{"class":397},[147,48547,32429],{"class":157},[147,48549,48550],{"class":149,"line":10062},[147,48551,2674],{"emptyLinePlaceholder":324},[147,48553,48554],{"class":149,"line":10067},[147,48555,32438],{"class":458},[147,48557,48558],{"class":149,"line":10072},[147,48559,32443],{"class":458},[147,48561,48562],{"class":149,"line":10077},[147,48563,2674],{"emptyLinePlaceholder":324},[147,48565,48566],{"class":149,"line":10086},[147,48567,32452],{"class":458},[147,48569,48570,48572,48574],{"class":149,"line":10091},[147,48571,32221],{"class":397},[147,48573,32459],{"class":2237},[147,48575,32462],{"class":157},[147,48577,48578,48580,48582,48584,48586,48588,48590,48592,48594],{"class":149,"line":10097},[147,48579,31511],{"class":157},[147,48581,445],{"class":397},[147,48583,30725],{"class":157},[147,48585,31518],{"class":504},[147,48587,1978],{"class":397},[147,48589,31523],{"class":157},[147,48591,1975],{"class":397},[147,48593,32481],{"class":504},[147,48595,407],{"class":157},[147,48597,48598],{"class":149,"line":10118},[147,48599,2674],{"emptyLinePlaceholder":324},[147,48601,48602],{"class":149,"line":10124},[147,48603,32496],{"class":458},[147,48605,48606],{"class":149,"line":10138},[147,48607,32501],{"class":458},[147,48609,48610],{"class":149,"line":10144},[147,48611,32506],{"class":458},[147,48613,48614,48616,48618,48620,48622,48624,48626],{"class":149,"line":10171},[147,48615,32511],{"class":157},[147,48617,445],{"class":397},[147,48619,32516],{"class":157},[147,48621,32519],{"class":5490},[147,48623,445],{"class":397},[147,48625,32524],{"class":448},[147,48627,407],{"class":157},[147,48629,48630],{"class":149,"line":10180},[147,48631,2674],{"emptyLinePlaceholder":324},[147,48633,48634],{"class":149,"line":10186},[147,48635,32535],{"class":458},[147,48637,48638,48640,48642],{"class":149,"line":10194},[147,48639,32540],{"class":157},[147,48641,445],{"class":397},[147,48643,32545],{"class":157},[147,48645,48646],{"class":149,"line":10199},[147,48647,2674],{"emptyLinePlaceholder":324},[147,48649,48650],{"class":149,"line":16877},[147,48651,32554],{"class":458},[147,48653,48654,48656,48658],{"class":149,"line":16883},[147,48655,31563],{"class":157},[147,48657,445],{"class":397},[147,48659,32563],{"class":157},[147,48661,48662],{"class":149,"line":16906},[147,48663,32568],{"class":458},[147,48665,48666],{"class":149,"line":16912},[147,48667,32573],{"class":458},[147,48669,48670],{"class":149,"line":16935},[147,48671,32578],{"class":458},[147,48673,48674,48676,48678],{"class":149,"line":16949},[147,48675,32583],{"class":157},[147,48677,445],{"class":397},[147,48679,32588],{"class":157},[147,48681,48682],{"class":149,"line":16969},[147,48683,2674],{"emptyLinePlaceholder":324},[147,48685,48686],{"class":149,"line":16975},[147,48687,32601],{"class":458},[147,48689,48690],{"class":149,"line":16986},[147,48691,32606],{"class":458},[147,48693,48694,48696,48698],{"class":149,"line":17009},[147,48695,32611],{"class":157},[147,48697,445],{"class":397},[147,48699,32616],{"class":448},[147,48701,48702],{"class":149,"line":17031},[147,48703,32621],{"class":458},[147,48705,48706,48708,48710],{"class":149,"line":17036},[147,48707,32626],{"class":157},[147,48709,445],{"class":397},[147,48711,32631],{"class":157},[147,48713,48714],{"class":149,"line":17042},[147,48715,32636],{"class":458},[147,48717,48718,48720,48722],{"class":149,"line":17056},[147,48719,32641],{"class":157},[147,48721,445],{"class":397},[147,48723,32631],{"class":157},[147,48725,48726],{"class":149,"line":17069},[147,48727,32650],{"class":458},[147,48729,48730,48732,48734],{"class":149,"line":17074},[147,48731,32655],{"class":157},[147,48733,445],{"class":397},[147,48735,32631],{"class":157},[147,48737,48738],{"class":149,"line":17088},[147,48739,32664],{"class":458},[147,48741,48742,48744,48746],{"class":149,"line":17093},[147,48743,32669],{"class":157},[147,48745,445],{"class":397},[147,48747,32631],{"class":157},[147,48749,48750],{"class":149,"line":17099},[147,48751,2674],{"emptyLinePlaceholder":324},[147,48753,48754],{"class":149,"line":17104},[147,48755,32682],{"class":458},[147,48757,48758,48760,48762],{"class":149,"line":17118},[147,48759,32687],{"class":157},[147,48761,445],{"class":397},[147,48763,32692],{"class":157},[147,48765,48766],{"class":149,"line":17123},[147,48767,2674],{"emptyLinePlaceholder":324},[147,48769,48770],{"class":149,"line":17128},[147,48771,32705],{"class":458},[147,48773,48774,48776,48778,48780,48782],{"class":149,"line":17142},[147,48775,3475],{"class":397},[147,48777,32712],{"class":157},[147,48779,26317],{"class":397},[147,48781,32717],{"class":448},[147,48783,32720],{"class":157},[147,48785,48786,48788,48790,48792,48794,48796,48798,48800,48802,48804,48806],{"class":149,"line":17154},[147,48787,32725],{"class":448},[147,48789,401],{"class":157},[147,48791,32730],{"class":504},[147,48793,32733],{"class":448},[147,48795,983],{"class":504},[147,48797,32733],{"class":448},[147,48799,650],{"class":504},[147,48801,32742],{"class":157},[147,48803,931],{"class":397},[147,48805,616],{"class":448},[147,48807,30771],{"class":157},[147,48809,48810,48812,48814,48816,48818,48820],{"class":149,"line":17159},[147,48811,32725],{"class":448},[147,48813,401],{"class":157},[147,48815,32757],{"class":504},[147,48817,854],{"class":397},[147,48819,845],{"class":448},[147,48821,407],{"class":157},[147,48823,48824],{"class":149,"line":17172},[147,48825,2674],{"emptyLinePlaceholder":324},[147,48827,48828],{"class":149,"line":17177},[147,48829,32772],{"class":458},[147,48831,48832],{"class":149,"line":17182},[147,48833,32777],{"class":458},[147,48835,48836,48838,48840],{"class":149,"line":17187},[147,48837,32782],{"class":157},[147,48839,445],{"class":397},[147,48841,32616],{"class":448},[147,48843,48844],{"class":149,"line":17200},[147,48845,32791],{"class":458},[147,48847,48848,48850,48852],{"class":149,"line":17205},[147,48849,32796],{"class":157},[147,48851,445],{"class":397},[147,48853,3359],{"class":448},[147,48855,48856],{"class":149,"line":32907},[147,48857,32805],{"class":458},[147,48859,48860,48862,48864],{"class":149,"line":32913},[147,48861,32810],{"class":157},[147,48863,445],{"class":397},[147,48865,32616],{"class":448},[147,48867,48868],{"class":149,"line":32919},[147,48869,32819],{"class":458},[147,48871,48872,48874,48876],{"class":149,"line":32925},[147,48873,32824],{"class":157},[147,48875,445],{"class":397},[147,48877,3359],{"class":448},[147,48879,48880],{"class":149,"line":32931},[147,48881,32833],{"class":458},[147,48883,48884,48886,48888],{"class":149,"line":32942},[147,48885,32838],{"class":157},[147,48887,445],{"class":397},[147,48889,3359],{"class":448},[147,48891,48892],{"class":149,"line":32948},[147,48893,32847],{"class":458},[147,48895,48896,48898,48900],{"class":149,"line":32968},[147,48897,32852],{"class":157},[147,48899,445],{"class":397},[147,48901,3359],{"class":448},[147,48903,48904],{"class":149,"line":32974},[147,48905,32861],{"class":458},[147,48907,48908,48910,48912,48914,48916],{"class":149,"line":32985},[147,48909,3677],{"class":397},[147,48911,31875],{"class":157},[147,48913,26317],{"class":397},[147,48915,31880],{"class":448},[147,48917,32874],{"class":157},[147,48919,48920],{"class":149,"line":32991},[147,48921,32879],{"class":458},[147,48923,48924,48926,48928],{"class":149,"line":32997},[147,48925,32884],{"class":157},[147,48927,445],{"class":397},[147,48929,32889],{"class":157},[147,48931,48932],{"class":149,"line":33003},[147,48933,32894],{"class":458},[147,48935,48936,48938,48940],{"class":149,"line":33009},[147,48937,32899],{"class":157},[147,48939,445],{"class":397},[147,48941,32904],{"class":157},[147,48943,48944],{"class":149,"line":33015},[147,48945,32910],{"class":458},[147,48947,48948],{"class":149,"line":33021},[147,48949,32916],{"class":157},[147,48951,48952],{"class":149,"line":33027},[147,48953,32922],{"class":458},[147,48955,48956],{"class":149,"line":33047},[147,48957,32928],{"class":458},[147,48959,48960,48962,48964],{"class":149,"line":33053},[147,48961,32934],{"class":157},[147,48963,445],{"class":397},[147,48965,32939],{"class":157},[147,48967,48968],{"class":149,"line":33069},[147,48969,32945],{"class":458},[147,48971,48972,48974,48976,48978,48980,48982,48984],{"class":149,"line":33075},[147,48973,32951],{"class":157},[147,48975,445],{"class":397},[147,48977,32956],{"class":157},[147,48979,32959],{"class":5490},[147,48981,445],{"class":397},[147,48983,616],{"class":448},[147,48985,407],{"class":157},[147,48987,48988],{"class":149,"line":33089},[147,48989,32971],{"class":458},[147,48991,48992,48994,48996],{"class":149,"line":33095},[147,48993,32977],{"class":157},[147,48995,445],{"class":397},[147,48997,32982],{"class":157},[147,48999,49000],{"class":149,"line":33110},[147,49001,32988],{"class":458},[147,49003,49004],{"class":149,"line":33116},[147,49005,32994],{"class":157},[147,49007,49008],{"class":149,"line":33125},[147,49009,33000],{"class":458},[147,49011,49012],{"class":149,"line":33131},[147,49013,33006],{"class":157},[147,49015,49016],{"class":149,"line":33140},[147,49017,33012],{"class":458},[147,49019,49020],{"class":149,"line":33146},[147,49021,33018],{"class":157},[147,49023,49024],{"class":149,"line":33152},[147,49025,33024],{"class":458},[147,49027,49028,49030,49032,49034,49036,49038,49040],{"class":149,"line":33161},[147,49029,33030],{"class":157},[147,49031,9751],{"class":397},[147,49033,33035],{"class":157},[147,49035,854],{"class":397},[147,49037,33040],{"class":157},[147,49039,590],{"class":448},[147,49041,407],{"class":157},[147,49043,49044],{"class":149,"line":33167},[147,49045,33050],{"class":458},[147,49047,49048,49050,49052,49054,49056],{"class":149,"line":33178},[147,49049,33056],{"class":157},[147,49051,9751],{"class":397},[147,49053,33061],{"class":157},[147,49055,3223],{"class":397},[147,49057,33066],{"class":157},[147,49059,49060],{"class":149,"line":33184},[147,49061,33072],{"class":458},[147,49063,49064,49066,49068,49070,49072],{"class":149,"line":33203},[147,49065,33078],{"class":157},[147,49067,9751],{"class":397},[147,49069,33040],{"class":157},[147,49071,590],{"class":448},[147,49073,407],{"class":157},[147,49075,49076],{"class":149,"line":33209},[147,49077,33092],{"class":458},[147,49079,49080,49082,49084,49086,49088],{"class":149,"line":33220},[147,49081,3677],{"class":397},[147,49083,33100],{"class":157},[147,49085,26317],{"class":397},[147,49087,31880],{"class":448},[147,49089,33107],{"class":157},[147,49091,49092],{"class":149,"line":33226},[147,49093,33113],{"class":458},[147,49095,49096,49098,49100],{"class":149,"line":33246},[147,49097,32884],{"class":157},[147,49099,445],{"class":397},[147,49101,32889],{"class":157},[147,49103,49104],{"class":149,"line":33262},[147,49105,33128],{"class":458},[147,49107,49108,49110,49112],{"class":149,"line":33268},[147,49109,32899],{"class":157},[147,49111,445],{"class":397},[147,49113,32904],{"class":157},[147,49115,49116],{"class":149,"line":33282},[147,49117,33143],{"class":458},[147,49119,49120],{"class":149,"line":33288},[147,49121,33149],{"class":157},[147,49123,49124],{"class":149,"line":33294},[147,49125,36630],{"class":458},[147,49127,49128,49130],{"class":149,"line":33305},[147,49129,33155],{"class":397},[147,49131,33158],{"class":157},[147,49133,49134],{"class":149,"line":33311},[147,49135,33164],{"class":458},[147,49137,49138,49140,49142],{"class":149,"line":33317},[147,49139,36645],{"class":157},[147,49141,445],{"class":397},[147,49143,32939],{"class":157},[147,49145,49146],{"class":149,"line":33327},[147,49147,33181],{"class":458},[147,49149,49150,49152,49154,49156,49158,49160,49162],{"class":149,"line":33333},[147,49151,36658],{"class":157},[147,49153,445],{"class":397},[147,49155,32956],{"class":157},[147,49157,32959],{"class":5490},[147,49159,445],{"class":397},[147,49161,616],{"class":448},[147,49163,407],{"class":157},[147,49165,49166],{"class":149,"line":33344},[147,49167,33206],{"class":458},[147,49169,49170,49172,49174],{"class":149,"line":33350},[147,49171,36679],{"class":157},[147,49173,445],{"class":397},[147,49175,32982],{"class":157},[147,49177,49178],{"class":149,"line":33360},[147,49179,33223],{"class":458},[147,49181,49182,49184,49186,49188,49190,49192,49194],{"class":149,"line":33365},[147,49183,36692],{"class":157},[147,49185,9751],{"class":397},[147,49187,36697],{"class":157},[147,49189,854],{"class":397},[147,49191,33040],{"class":157},[147,49193,590],{"class":448},[147,49195,407],{"class":157},[147,49197,49198,49200,49202,49204,49206],{"class":149,"line":33371},[147,49199,36710],{"class":157},[147,49201,9751],{"class":397},[147,49203,33061],{"class":157},[147,49205,3223],{"class":397},[147,49207,33066],{"class":157},[147,49209,49210],{"class":149,"line":33420},[147,49211,36723],{"class":458},[147,49213,49214,49216,49218,49220,49222],{"class":149,"line":33467},[147,49215,36728],{"class":157},[147,49217,9751],{"class":397},[147,49219,33040],{"class":157},[147,49221,590],{"class":448},[147,49223,407],{"class":157},[147,49225,49226],{"class":149,"line":33472},[147,49227,33285],{"class":458},[147,49229,49230],{"class":149,"line":33478},[147,49231,33291],{"class":458},[147,49233,49234,49236,49238],{"class":149,"line":33497},[147,49235,33297],{"class":157},[147,49237,983],{"class":397},[147,49239,33302],{"class":157},[147,49241,49242],{"class":149,"line":33503},[147,49243,33308],{"class":458},[147,49245,49246],{"class":149,"line":33523},[147,49247,33314],{"class":458},[147,49249,49250,49252,49254],{"class":149,"line":33529},[147,49251,33320],{"class":157},[147,49253,983],{"class":397},[147,49255,33302],{"class":157},[147,49257,49258],{"class":149,"line":33535},[147,49259,33330],{"class":458},[147,49261,49262,49264,49266],{"class":149,"line":33545},[147,49263,33336],{"class":157},[147,49265,983],{"class":397},[147,49267,33341],{"class":157},[147,49269,49270],{"class":149,"line":33550},[147,49271,33347],{"class":458},[147,49273,49274,49276,49278],{"class":149,"line":33556},[147,49275,33353],{"class":157},[147,49277,983],{"class":397},[147,49279,33341],{"class":157},[147,49281,49282],{"class":149,"line":33572},[147,49283,2674],{"emptyLinePlaceholder":324},[147,49285,49286],{"class":149,"line":33617},[147,49287,33368],{"class":458},[147,49289,49290,49292,49294,49296,49298,49300,49302,49304,49306,49308,49310,49312,49314,49316,49318,49320,49322,49324,49326,49328],{"class":149,"line":33623},[147,49291,32725],{"class":448},[147,49293,401],{"class":157},[147,49295,3866],{"class":504},[147,49297,32733],{"class":448},[147,49299,33382],{"class":504},[147,49301,1295],{"class":448},[147,49303,33387],{"class":397},[147,49305,1345],{"class":448},[147,49307,33392],{"class":504},[147,49309,1295],{"class":448},[147,49311,33387],{"class":397},[147,49313,1345],{"class":448},[147,49315,3866],{"class":504},[147,49317,33403],{"class":157},[147,49319,931],{"class":397},[147,49321,616],{"class":448},[147,49323,33410],{"class":157},[147,49325,931],{"class":397},[147,49327,616],{"class":448},[147,49329,33417],{"class":157},[147,49331,49332,49334,49336,49338,49340,49342,49344,49346,49348,49350,49352,49354,49356,49358,49360,49362,49364,49366,49368,49370],{"class":149,"line":33629},[147,49333,32725],{"class":448},[147,49335,401],{"class":157},[147,49337,3866],{"class":504},[147,49339,32733],{"class":448},[147,49341,33431],{"class":504},[147,49343,1295],{"class":448},[147,49345,33387],{"class":397},[147,49347,1345],{"class":448},[147,49349,33440],{"class":504},[147,49351,1295],{"class":448},[147,49353,33387],{"class":397},[147,49355,1345],{"class":448},[147,49357,3866],{"class":504},[147,49359,33451],{"class":157},[147,49361,931],{"class":397},[147,49363,616],{"class":448},[147,49365,33458],{"class":157},[147,49367,931],{"class":397},[147,49369,616],{"class":448},[147,49371,33417],{"class":157},[147,49373,49374],{"class":149,"line":33635},[147,49375,2674],{"emptyLinePlaceholder":324},[147,49377,49378],{"class":149,"line":33646},[147,49379,33475],{"class":458},[147,49381,49382,49384,49386,49388,49390,49392,49394],{"class":149,"line":33652},[147,49383,2771],{"class":397},[147,49385,33483],{"class":157},[147,49387,931],{"class":397},[147,49389,616],{"class":448},[147,49391,1339],{"class":157},[147,49393,1359],{"class":397},[147,49395,33494],{"class":157},[147,49397,49398],{"class":149,"line":33658},[147,49399,33500],{"class":458},[147,49401,49402,49404,49406,49408,49410,49412,49414],{"class":149,"line":33664},[147,49403,33506],{"class":157},[147,49405,439],{"class":448},[147,49407,445],{"class":397},[147,49409,33513],{"class":157},[147,49411,931],{"class":397},[147,49413,616],{"class":448},[147,49415,33520],{"class":157},[147,49417,49418],{"class":149,"line":33682},[147,49419,33526],{"class":458},[147,49421,49422],{"class":149,"line":33696},[147,49423,33532],{"class":458},[147,49425,49426,49428,49430],{"class":149,"line":33705},[147,49427,33538],{"class":157},[147,49429,445],{"class":397},[147,49431,32588],{"class":157},[147,49433,49434],{"class":149,"line":33714},[147,49435,2674],{"emptyLinePlaceholder":324},[147,49437,49438],{"class":149,"line":33723},[147,49439,33553],{"class":458},[147,49441,49442,49444,49446,49448,49450],{"class":149,"line":33732},[147,49443,33559],{"class":157},[147,49445,445],{"class":397},[147,49447,33564],{"class":157},[147,49449,931],{"class":397},[147,49451,33569],{"class":157},[147,49453,49454,49456,49458,49460,49462,49464,49466,49468,49470,49472,49474,49476,49478,49480,49482,49484,49486,49488],{"class":149,"line":33738},[147,49455,32725],{"class":448},[147,49457,401],{"class":157},[147,49459,33579],{"class":504},[147,49461,1295],{"class":448},[147,49463,33584],{"class":397},[147,49465,1345],{"class":448},[147,49467,943],{"class":504},[147,49469,1295],{"class":448},[147,49471,33584],{"class":397},[147,49473,1345],{"class":448},[147,49475,33597],{"class":504},[147,49477,33600],{"class":157},[147,49479,33603],{"class":397},[147,49481,1306],{"class":448},[147,49483,33608],{"class":157},[147,49485,727],{"class":397},[147,49487,1306],{"class":448},[147,49489,30771],{"class":157},[147,49491,49492],{"class":149,"line":33744},[147,49493,37007],{"class":458},[147,49495,49496],{"class":149,"line":33752},[147,49497,37012],{"class":458},[147,49499,49500,49502,49504],{"class":149,"line":33757},[147,49501,37017],{"class":157},[147,49503,33641],{"class":504},[147,49505,407],{"class":157},[147,49507,49508],{"class":149,"line":33763},[147,49509,33661],{"class":458},[147,49511,49512,49514,49516,49518,49520,49522],{"class":149,"line":33774},[147,49513,33667],{"class":157},[147,49515,445],{"class":397},[147,49517,33672],{"class":157},[147,49519,33675],{"class":5490},[147,49521,445],{"class":397},[147,49523,1820],{"class":157},[147,49525,49526,49528,49530,49532],{"class":149,"line":33780},[147,49527,33685],{"class":504},[147,49529,1258],{"class":157},[147,49531,33690],{"class":448},[147,49533,33693],{"class":157},[147,49535,49536,49538],{"class":149,"line":33800},[147,49537,33699],{"class":504},[147,49539,33702],{"class":157},[147,49541,49542,49544],{"class":149,"line":33806},[147,49543,33708],{"class":504},[147,49545,33711],{"class":157},[147,49547,49548,49550],{"class":149,"line":33812},[147,49549,33717],{"class":504},[147,49551,33720],{"class":157},[147,49553,49554,49556],{"class":149,"line":33818},[147,49555,33726],{"class":504},[147,49557,33729],{"class":157},[147,49559,49560],{"class":149,"line":33835},[147,49561,33735],{"class":157},[147,49563,49564],{"class":149,"line":33841},[147,49565,33741],{"class":458},[147,49567,49568,49570],{"class":149,"line":33847},[147,49569,4364],{"class":397},[147,49571,33749],{"class":157},[147,49573,49574],{"class":149,"line":33853},[147,49575,2674],{"emptyLinePlaceholder":324},[147,49577,49578],{"class":149,"line":33859},[147,49579,33760],{"class":458},[147,49581,49582,49584,49586],{"class":149,"line":33865},[147,49583,32221],{"class":397},[147,49585,33768],{"class":2237},[147,49587,33771],{"class":157},[147,49589,49590],{"class":149,"line":33892},[147,49591,33777],{"class":458},[147,49593,49594,49596,49598,49600,49602,49604,49606,49608],{"class":149,"line":33916},[147,49595,33783],{"class":157},[147,49597,31967],{"class":5490},[147,49599,445],{"class":397},[147,49601,401],{"class":157},[147,49603,897],{"class":448},[147,49605,777],{"class":157},[147,49607,692],{"class":448},[147,49609,30771],{"class":157},[147,49611,49612],{"class":149,"line":33922},[147,49613,33803],{"class":458},[147,49615,49616],{"class":149,"line":33928},[147,49617,33809],{"class":458},[147,49619,49620],{"class":149,"line":33934},[147,49621,33815],{"class":458},[147,49623,49624,49626,49628,49630,49632,49634,49636],{"class":149,"line":33945},[147,49625,32001],{"class":157},[147,49627,616],{"class":448},[147,49629,777],{"class":157},[147,49631,477],{"class":448},[147,49633,777],{"class":157},[147,49635,616],{"class":448},[147,49637,407],{"class":157},[147,49639,49640],{"class":149,"line":33956},[147,49641,33838],{"class":458},[147,49643,49644],{"class":149,"line":33962},[147,49645,33844],{"class":458},[147,49647,49648],{"class":149,"line":33979},[147,49649,33850],{"class":458},[147,49651,49652],{"class":149,"line":34002},[147,49653,33856],{"class":458},[147,49655,49656],{"class":149,"line":34025},[147,49657,33862],{"class":458},[147,49659,49660,49662,49664,49666,49668,49670,49672,49674,49676],{"class":149,"line":34031},[147,49661,33868],{"class":157},[147,49663,33871],{"class":504},[147,49665,33874],{"class":157},[147,49667,33877],{"class":504},[147,49669,777],{"class":157},[147,49671,33882],{"class":5490},[147,49673,445],{"class":397},[147,49675,33887],{"class":504},[147,49677,407],{"class":157},[147,49679,49680,49682,49684,49686,49688,49690,49692,49694,49696],{"class":149,"line":34036},[147,49681,33868],{"class":157},[147,49683,33871],{"class":504},[147,49685,33899],{"class":157},[147,49687,33902],{"class":504},[147,49689,777],{"class":157},[147,49691,33882],{"class":5490},[147,49693,445],{"class":397},[147,49695,33911],{"class":504},[147,49697,407],{"class":157},[147,49699,49700],{"class":149,"line":34045},[147,49701,33919],{"class":458},[147,49703,49704],{"class":149,"line":34055},[147,49705,33925],{"class":157},[147,49707,49708],{"class":149,"line":34061},[147,49709,33931],{"class":458},[147,49711,49712,49714,49716],{"class":149,"line":34066},[147,49713,33937],{"class":157},[147,49715,33940],{"class":504},[147,49717,407],{"class":157},[147,49719,49720,49722,49724],{"class":149,"line":34072},[147,49721,33948],{"class":157},[147,49723,33951],{"class":504},[147,49725,407],{"class":157},[147,49727,49728],{"class":149,"line":34085},[147,49729,33959],{"class":458},[147,49731,49732,49734,49736,49738,49740,49742,49744],{"class":149,"line":34091},[147,49733,32001],{"class":157},[147,49735,616],{"class":448},[147,49737,777],{"class":157},[147,49739,477],{"class":448},[147,49741,777],{"class":157},[147,49743,477],{"class":448},[147,49745,407],{"class":157},[147,49747,49748,49750,49752,49754,49756,49758,49760,49762,49764],{"class":149,"line":34102},[147,49749,33868],{"class":157},[147,49751,33871],{"class":504},[147,49753,33986],{"class":157},[147,49755,33877],{"class":504},[147,49757,777],{"class":157},[147,49759,33882],{"class":5490},[147,49761,445],{"class":397},[147,49763,33997],{"class":504},[147,49765,407],{"class":157},[147,49767,49768,49770,49772,49774,49776,49778,49780,49782,49784],{"class":149,"line":34113},[147,49769,33868],{"class":157},[147,49771,33871],{"class":504},[147,49773,34009],{"class":157},[147,49775,33902],{"class":504},[147,49777,777],{"class":157},[147,49779,33882],{"class":5490},[147,49781,445],{"class":397},[147,49783,34020],{"class":504},[147,49785,407],{"class":157},[147,49787,49788],{"class":149,"line":34132},[147,49789,34028],{"class":458},[147,49791,49793],{"class":149,"line":49792},219,[147,49794,33925],{"class":157},[147,49796,49798,49800,49802],{"class":149,"line":49797},220,[147,49799,33937],{"class":157},[147,49801,33871],{"class":504},[147,49803,407],{"class":157},[147,49805,49807,49809,49811],{"class":149,"line":49806},221,[147,49808,33948],{"class":157},[147,49810,34050],{"class":504},[147,49812,407],{"class":157},[147,49814,49816],{"class":149,"line":49815},222,[147,49817,34058],{"class":157},[147,49819,49821],{"class":149,"line":49820},223,[147,49822,2674],{"emptyLinePlaceholder":324},[147,49824,49826],{"class":149,"line":49825},224,[147,49827,34069],{"class":458},[147,49829,49831,49833,49835,49837,49839],{"class":149,"line":49830},225,[147,49832,1805],{"class":397},[147,49834,31494],{"class":448},[147,49836,3223],{"class":397},[147,49838,31499],{"class":504},[147,49840,4013],{"class":157},[147,49842,49844],{"class":149,"line":49843},226,[147,49845,34088],{"class":458},[147,49847,49849,49851,49853],{"class":149,"line":49848},227,[147,49850,44820],{"class":157},[147,49852,445],{"class":397},[147,49854,44825],{"class":157},[147,49856,49858,49860,49862],{"class":149,"line":49857},228,[147,49859,34105],{"class":157},[147,49861,445],{"class":397},[147,49863,34110],{"class":157},[147,49865,49867,49869,49871,49873,49875,49877,49879],{"class":149,"line":49866},229,[147,49868,33667],{"class":157},[147,49870,445],{"class":397},[147,49872,44842],{"class":157},[147,49874,34123],{"class":5490},[147,49876,445],{"class":397},[147,49878,1306],{"class":448},[147,49880,407],{"class":157},[147,49882,49884],{"class":149,"line":49883},230,[147,49885,34135],{"class":157},[22271,49887,49889],{"id":49888},"_242测试代码","2.4.2.测试代码",[19,49891,49892],{},"使用测试集进行测试与推理",[138,49894,49896],{"className":30652,"code":49895,"language":30654,"meta":143,"style":143},"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",[51,49897,49898,49904,49914,49924,49935,49945,49949,49953,49961,49966,49970,49987,49991,49995,49999,50003,50007,50039,50043,50051,50055,50067,50071,50075,50079,50083,50087,50091,50095,50099,50117,50131,50135,50145,50155,50165,50171,50175,50179,50187,50191,50207,50215,50219,50223,50231,50239,50243,50247,50251,50255,50261,50265,50275,50283,50291,50295,50299,50303,50311,50315,50331,50335,50339,50343,50355,50359,50371,50375,50379,50391,50395,50405,50409,50413,50425,50429,50437,50441,50445,50453,50457,50465,50469,50473,50477,50481,50485,50501,50509,50513,50517,50535,50541,50545,50555,50563,50571,50575,50579,50583,50587,50595,50599,50615,50619,50627,50635],{"__ignoreMap":143},[147,49899,49900,49902],{"class":149,"line":150},[147,49901,30666],{"class":397},[147,49903,30669],{"class":157},[147,49905,49906,49908,49910,49912],{"class":149,"line":312},[147,49907,30666],{"class":397},[147,49909,31689],{"class":157},[147,49911,31657],{"class":397},[147,49913,31694],{"class":157},[147,49915,49916,49918,49920,49922],{"class":149,"line":1454},[147,49917,31011],{"class":397},[147,49919,31672],{"class":157},[147,49921,30666],{"class":397},[147,49923,31677],{"class":157},[147,49925,49926,49928,49930,49932],{"class":149,"line":1469},[147,49927,31011],{"class":397},[147,49929,31642],{"class":157},[147,49931,30666],{"class":397},[147,49933,49934],{"class":157}," ImageFolder\n",[147,49936,49937,49939,49941,49943],{"class":149,"line":1475},[147,49938,31011],{"class":397},[147,49940,32188],{"class":157},[147,49942,30666],{"class":397},[147,49944,44914],{"class":157},[147,49946,49947],{"class":149,"line":1489},[147,49948,2674],{"emptyLinePlaceholder":324},[147,49950,49951],{"class":149,"line":1495},[147,49952,34225],{"class":458},[147,49954,49955,49957,49959],{"class":149,"line":1586},[147,49956,32221],{"class":397},[147,49958,34232],{"class":2237},[147,49960,32227],{"class":157},[147,49962,49963],{"class":149,"line":1592},[147,49964,49965],{"class":458},"   # 导入自己的数据集，并进行数据处理\n",[147,49967,49968],{"class":149,"line":1604},[147,49969,48235],{"class":458},[147,49971,49972,49974,49976,49978,49980,49982,49985],{"class":149,"line":1886},[147,49973,48240],{"class":448},[147,49975,445],{"class":397},[147,49977,1069],{"class":397},[147,49979,650],{"class":504},[147,49981,957],{"class":448},[147,49983,49984],{"class":48251},"\u002Fdata\u002Ftest",[147,49986,25407],{"class":504},[147,49988,49989],{"class":149,"line":1891},[147,49990,2674],{"emptyLinePlaceholder":324},[147,49992,49993],{"class":149,"line":1897},[147,49994,48263],{"class":458},[147,49996,49997],{"class":149,"line":1902},[147,49998,48268],{"class":458},[147,50000,50001],{"class":149,"line":1916},[147,50002,48273],{"class":458},[147,50004,50005],{"class":149,"line":1921},[147,50006,48278],{"class":458},[147,50008,50009,50011,50013,50015,50017,50019,50021,50023,50025,50027,50029,50031,50033,50035,50037],{"class":149,"line":1927},[147,50010,48283],{"class":157},[147,50012,445],{"class":397},[147,50014,48288],{"class":157},[147,50016,48291],{"class":448},[147,50018,777],{"class":157},[147,50020,48296],{"class":448},[147,50022,777],{"class":157},[147,50024,48301],{"class":448},[147,50026,48304],{"class":157},[147,50028,48307],{"class":448},[147,50030,777],{"class":157},[147,50032,48312],{"class":448},[147,50034,777],{"class":157},[147,50036,48317],{"class":448},[147,50038,4931],{"class":157},[147,50040,50041],{"class":149,"line":1948},[147,50042,48324],{"class":458},[147,50044,50045,50047,50049],{"class":149,"line":1953},[147,50046,48329],{"class":157},[147,50048,445],{"class":397},[147,50050,48334],{"class":157},[147,50052,50053],{"class":149,"line":1967},[147,50054,48339],{"class":458},[147,50056,50057,50059,50061,50063,50065],{"class":149,"line":1972},[147,50058,48344],{"class":157},[147,50060,31775],{"class":448},[147,50062,777],{"class":157},[147,50064,31775],{"class":448},[147,50066,42896],{"class":157},[147,50068,50069],{"class":149,"line":2001},[147,50070,48357],{"class":458},[147,50072,50073],{"class":149,"line":2006},[147,50074,48362],{"class":157},[147,50076,50077],{"class":149,"line":2023},[147,50078,48367],{"class":157},[147,50080,50081],{"class":149,"line":2028},[147,50082,48372],{"class":458},[147,50084,50085],{"class":149,"line":2033},[147,50086,48377],{"class":458},[147,50088,50089],{"class":149,"line":2038},[147,50090,2674],{"emptyLinePlaceholder":324},[147,50092,50093],{"class":149,"line":2052},[147,50094,48386],{"class":458},[147,50096,50097],{"class":149,"line":2057},[147,50098,48391],{"class":458},[147,50100,50101,50103,50105,50107,50109,50111,50113,50115],{"class":149,"line":2851},[147,50102,34239],{"class":157},[147,50104,445],{"class":397},[147,50106,48400],{"class":157},[147,50108,48403],{"class":448},[147,50110,777],{"class":157},[147,50112,48408],{"class":5490},[147,50114,445],{"class":397},[147,50116,48413],{"class":157},[147,50118,50119,50121,50123,50125,50127,50129],{"class":149,"line":2865},[147,50120,34296],{"class":157},[147,50122,445],{"class":397},[147,50124,31808],{"class":157},[147,50126,31811],{"class":5490},[147,50128,445],{"class":397},[147,50130,34307],{"class":157},[147,50132,50133],{"class":149,"line":2873},[147,50134,34312],{"class":458},[147,50136,50137,50139,50141,50143],{"class":149,"line":2878},[147,50138,34317],{"class":5490},[147,50140,445],{"class":397},[147,50142,616],{"class":448},[147,50144,31740],{"class":157},[147,50146,50147,50149,50151,50153],{"class":149,"line":2884},[147,50148,34328],{"class":5490},[147,50150,445],{"class":397},[147,50152,31750],{"class":448},[147,50154,31740],{"class":157},[147,50156,50157,50159,50161,50163],{"class":149,"line":2890},[147,50158,34339],{"class":5490},[147,50160,445],{"class":397},[147,50162,590],{"class":448},[147,50164,407],{"class":157},[147,50166,50167,50169],{"class":149,"line":2895},[147,50168,4364],{"class":397},[147,50170,34352],{"class":157},[147,50172,50173],{"class":149,"line":8222},[147,50174,2674],{"emptyLinePlaceholder":324},[147,50176,50177],{"class":149,"line":8246},[147,50178,34361],{"class":458},[147,50180,50181,50183,50185],{"class":149,"line":8251},[147,50182,32221],{"class":397},[147,50184,34368],{"class":2237},[147,50186,34371],{"class":157},[147,50188,50189],{"class":149,"line":8257},[147,50190,34376],{"class":458},[147,50192,50193,50195,50197,50199,50201,50203,50205],{"class":149,"line":8284},[147,50194,31511],{"class":157},[147,50196,445],{"class":397},[147,50198,31518],{"class":504},[147,50200,1978],{"class":397},[147,50202,31523],{"class":157},[147,50204,1975],{"class":397},[147,50206,34393],{"class":504},[147,50208,50209,50211,50213],{"class":149,"line":8289},[147,50210,31563],{"class":157},[147,50212,445],{"class":397},[147,50214,32563],{"class":157},[147,50216,50217],{"class":149,"line":8295},[147,50218,2674],{"emptyLinePlaceholder":324},[147,50220,50221],{"class":149,"line":8307},[147,50222,34410],{"class":458},[147,50224,50225,50227,50229],{"class":149,"line":8319},[147,50226,34415],{"class":157},[147,50228,445],{"class":397},[147,50230,32616],{"class":448},[147,50232,50233,50235,50237],{"class":149,"line":8331},[147,50234,34424],{"class":157},[147,50236,445],{"class":397},[147,50238,3359],{"class":448},[147,50240,50241],{"class":149,"line":9990},[147,50242,2674],{"emptyLinePlaceholder":324},[147,50244,50245],{"class":149,"line":10015},[147,50246,34437],{"class":458},[147,50248,50249],{"class":149,"line":10038},[147,50250,34442],{"class":458},[147,50252,50253],{"class":149,"line":10062},[147,50254,34447],{"class":458},[147,50256,50257,50259],{"class":149,"line":10067},[147,50258,34452],{"class":397},[147,50260,33158],{"class":157},[147,50262,50263],{"class":149,"line":10072},[147,50264,34459],{"class":458},[147,50266,50267,50269,50271,50273],{"class":149,"line":10077},[147,50268,3677],{"class":397},[147,50270,34466],{"class":157},[147,50272,26317],{"class":397},[147,50274,34471],{"class":157},[147,50276,50277,50279,50281],{"class":149,"line":10086},[147,50278,34476],{"class":157},[147,50280,445],{"class":397},[147,50282,34481],{"class":157},[147,50284,50285,50287,50289],{"class":149,"line":10091},[147,50286,34486],{"class":157},[147,50288,445],{"class":397},[147,50290,34491],{"class":157},[147,50292,50293],{"class":149,"line":10097},[147,50294,34496],{"class":458},[147,50296,50297],{"class":149,"line":10118},[147,50298,33149],{"class":157},[147,50300,50301],{"class":149,"line":10124},[147,50302,34505],{"class":458},[147,50304,50305,50307,50309],{"class":149,"line":10138},[147,50306,32934],{"class":157},[147,50308,445],{"class":397},[147,50310,34514],{"class":157},[147,50312,50313],{"class":149,"line":10144},[147,50314,34519],{"class":458},[147,50316,50317,50319,50321,50323,50325,50327,50329],{"class":149,"line":10171},[147,50318,32951],{"class":157},[147,50320,445],{"class":397},[147,50322,32956],{"class":157},[147,50324,32959],{"class":5490},[147,50326,445],{"class":397},[147,50328,616],{"class":448},[147,50330,407],{"class":157},[147,50332,50333],{"class":149,"line":10180},[147,50334,34540],{"class":458},[147,50336,50337],{"class":149,"line":10186},[147,50338,34545],{"class":458},[147,50340,50341],{"class":149,"line":10194},[147,50342,34550],{"class":458},[147,50344,50345,50347,50349,50351,50353],{"class":149,"line":10199},[147,50346,34555],{"class":157},[147,50348,9751],{"class":397},[147,50350,33061],{"class":157},[147,50352,3223],{"class":397},[147,50354,34564],{"class":157},[147,50356,50357],{"class":149,"line":16877},[147,50358,34569],{"class":458},[147,50360,50361,50363,50365,50367,50369],{"class":149,"line":16883},[147,50362,34574],{"class":157},[147,50364,9751],{"class":397},[147,50366,34579],{"class":157},[147,50368,590],{"class":448},[147,50370,407],{"class":157},[147,50372,50373],{"class":149,"line":16906},[147,50374,2674],{"emptyLinePlaceholder":324},[147,50376,50377],{"class":149,"line":16912},[147,50378,34592],{"class":458},[147,50380,50381,50383,50385,50387,50389],{"class":149,"line":16935},[147,50382,34597],{"class":157},[147,50384,445],{"class":397},[147,50386,34602],{"class":157},[147,50388,983],{"class":397},[147,50390,34607],{"class":157},[147,50392,50393],{"class":149,"line":16949},[147,50394,34612],{"class":458},[147,50396,50397,50399,50401,50403],{"class":149,"line":16969},[147,50398,32725],{"class":448},[147,50400,401],{"class":157},[147,50402,34621],{"class":504},[147,50404,34624],{"class":157},[147,50406,50407],{"class":149,"line":16975},[147,50408,2674],{"emptyLinePlaceholder":324},[147,50410,50411],{"class":149,"line":16986},[147,50412,34633],{"class":458},[147,50414,50415,50417,50419,50421,50423],{"class":149,"line":17009},[147,50416,1805],{"class":397},[147,50418,31494],{"class":448},[147,50420,3223],{"class":397},[147,50422,31499],{"class":504},[147,50424,4013],{"class":157},[147,50426,50427],{"class":149,"line":17031},[147,50428,34650],{"class":458},[147,50430,50431,50433,50435],{"class":149,"line":17036},[147,50432,31563],{"class":157},[147,50434,445],{"class":397},[147,50436,44825],{"class":157},[147,50438,50439],{"class":149,"line":17042},[147,50440,34663],{"class":458},[147,50442,50443],{"class":149,"line":17056},[147,50444,34668],{"class":458},[147,50446,50447,50449,50451],{"class":149,"line":17069},[147,50448,34673],{"class":157},[147,50450,34676],{"class":504},[147,50452,30771],{"class":157},[147,50454,50455],{"class":149,"line":17074},[147,50456,34683],{"class":458},[147,50458,50459,50461,50463],{"class":149,"line":17088},[147,50460,34296],{"class":157},[147,50462,445],{"class":397},[147,50464,34692],{"class":157},[147,50466,50467],{"class":149,"line":17093},[147,50468,34697],{"class":458},[147,50470,50471],{"class":149,"line":17099},[147,50472,34702],{"class":157},[147,50474,50475],{"class":149,"line":17104},[147,50476,2674],{"emptyLinePlaceholder":324},[147,50478,50479],{"class":149,"line":17118},[147,50480,34711],{"class":458},[147,50482,50483],{"class":149,"line":17123},[147,50484,34716],{"class":458},[147,50486,50487,50489,50491,50493,50495,50497,50499],{"class":149,"line":17128},[147,50488,31511],{"class":157},[147,50490,445],{"class":397},[147,50492,31518],{"class":504},[147,50494,1978],{"class":397},[147,50496,31523],{"class":157},[147,50498,1975],{"class":397},[147,50500,34393],{"class":504},[147,50502,50503,50505,50507],{"class":149,"line":17142},[147,50504,31563],{"class":157},[147,50506,445],{"class":397},[147,50508,32563],{"class":157},[147,50510,50511],{"class":149,"line":17154},[147,50512,34745],{"class":458},[147,50514,50515],{"class":149,"line":17159},[147,50516,34750],{"class":458},[147,50518,50519,50521,50523,50525,50528,50530,50533],{"class":149,"line":17172},[147,50520,34755],{"class":157},[147,50522,445],{"class":397},[147,50524,1289],{"class":157},[147,50526,50527],{"class":504},"'猫'",[147,50529,777],{"class":157},[147,50531,50532],{"class":504},"'狗'",[147,50534,33520],{"class":157},[147,50536,50537,50539],{"class":149,"line":17177},[147,50538,34452],{"class":397},[147,50540,33158],{"class":157},[147,50542,50543],{"class":149,"line":17182},[147,50544,34820],{"class":458},[147,50546,50547,50549,50551,50553],{"class":149,"line":17187},[147,50548,3677],{"class":397},[147,50550,34827],{"class":157},[147,50552,26317],{"class":397},[147,50554,34471],{"class":157},[147,50556,50557,50559,50561],{"class":149,"line":17200},[147,50558,32884],{"class":157},[147,50560,445],{"class":397},[147,50562,32889],{"class":157},[147,50564,50565,50567,50569],{"class":149,"line":17205},[147,50566,32899],{"class":157},[147,50568,445],{"class":397},[147,50570,32904],{"class":157},[147,50572,50573],{"class":149,"line":32907},[147,50574,2674],{"emptyLinePlaceholder":324},[147,50576,50577],{"class":149,"line":32913},[147,50578,34856],{"class":458},[147,50580,50581],{"class":149,"line":32919},[147,50582,33149],{"class":157},[147,50584,50585],{"class":149,"line":32925},[147,50586,34865],{"class":458},[147,50588,50589,50591,50593],{"class":149,"line":32931},[147,50590,32934],{"class":157},[147,50592,445],{"class":397},[147,50594,32939],{"class":157},[147,50596,50597],{"class":149,"line":32942},[147,50598,34878],{"class":458},[147,50600,50601,50603,50605,50607,50609,50611,50613],{"class":149,"line":32948},[147,50602,32951],{"class":157},[147,50604,445],{"class":397},[147,50606,32956],{"class":157},[147,50608,32959],{"class":5490},[147,50610,445],{"class":397},[147,50612,616],{"class":448},[147,50614,407],{"class":157},[147,50616,50617],{"class":149,"line":32968},[147,50618,34899],{"class":458},[147,50620,50621,50623,50625],{"class":149,"line":32974},[147,50622,34904],{"class":157},[147,50624,445],{"class":397},[147,50626,34909],{"class":157},[147,50628,50629,50631,50633],{"class":149,"line":32985},[147,50630,34914],{"class":157},[147,50632,445],{"class":397},[147,50634,34919],{"class":157},[147,50636,50637,50639,50641,50643,50645,50647,50649,50651],{"class":149,"line":32991},[147,50638,34924],{"class":448},[147,50640,401],{"class":157},[147,50642,34929],{"class":504},[147,50644,34932],{"class":157},[147,50646,34935],{"class":504},[147,50648,777],{"class":157},[147,50650,34940],{"class":504},[147,50652,34943],{"class":157},[308,50654,50655],{},"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":143,"searchDepth":312,"depth":312,"links":50657},[50658,50659,50660,50661],{"id":30865,"depth":1454,"text":30866},{"id":38113,"depth":1454,"text":38114},{"id":41546,"depth":1454,"text":41547},{"id":45555,"depth":1454,"text":45556},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30857,"description":321},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50668,"title":50669,"body":50670,"description":321,"extension":322,"meta":50677,"navigation":324,"path":50678,"seo":50679,"stem":50680,"__hash__":50681},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50671,"toc":50675},[50672],[10,50673,50669],{"id":50674},"_3yolo模型学习",{"title":143,"searchDepth":312,"depth":312,"links":50676},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50669,"description":321},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50683,"title":50684,"body":50685,"description":50692,"extension":322,"meta":50693,"navigation":324,"path":50695,"seo":50696,"stem":50697,"__hash__":50698},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50686,"toc":50690},[50687],[19,50688,50689],{},"yolo模型还未补充",{"title":143,"searchDepth":312,"depth":312,"links":50691},[],"深度学习学习",{"category":50694},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50684,"description":50692},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50700,"title":50701,"body":50702,"description":321,"extension":322,"meta":50727,"navigation":324,"path":50728,"seo":50729,"stem":50730,"__hash__":50731},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50703,"toc":50725},[50704,50707,50710,50715,50722],[10,50705,50701],{"id":50706},"_1工具",[19,50708,50709],{},"提示错误插件：有问题会提前报错",[19,50711,50712],{},[29,50713],{"alt":143,"src":50714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,50716,50717],{},[637,50718,50721],{"href":50719,"rel":50720},"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",[24138],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,50723,50724],{},"alt键加上下箭头可以实现语句的移动",{"title":143,"searchDepth":312,"depth":312,"links":50726},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50701,"description":321},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50733,"title":50734,"body":50735,"description":321,"extension":322,"meta":53598,"navigation":324,"path":53599,"seo":53600,"stem":53601,"__hash__":53602},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50736,"toc":53549},[50737,50740,50744,50748,50753,50756,50761,50765,50772,50777,50784,50789,50796,50801,50805,50810,50813,50817,50822,50826,50831,50834,50837,50840,50843,50846,50849,50852,50855,50860,50865,50870,50874,50877,50880,50884,50889,50892,50900,50905,50922,50930,50935,50940,50945,50950,50955,50958,50963,50968,50972,50981,50986,50991,50995,51000,51003,51007,51012,51020,51025,51030,51033,51038,51043,51048,51051,51054,51057,51062,51067,51070,51075,51078,51083,51086,51089,51092,51097,51100,51103,51118,51123,51128,51133,51136,51139,51142,51156,51159,51164,51169,51172,51175,51178,51181,51184,51187,51190,51194,51198,51203,51207,51210,51215,51220,51223,51228,51231,51235,51240,51243,51246,51249,51252,51255,51258,51261,51264,51267,51271,51276,51281,51286,51289,51292,51296,51301,51304,51308,51311,51314,51319,51322,51325,51329,51333,51336,51341,51346,51349,51378,51383,51388,51393,51398,51402,51407,51411,51416,51419,51423,51427,51432,51436,51441,51446,51450,51455,51458,51460,51463,51468,51472,51477,51481,51485,51490,51495,51500,51505,51509,51514,51519,51524,51527,51530,51535,51538,51543,51548,51553,51558,51562,52368,52372,52715,52720,52723,52726,52729,52732,52735,52738,52741,52744,52746,52749,52751,52754,52758,52763,52766,52769,52772,52776,52781,52786,52806,52809,52813,52818,52823,52840,52844,52873,52877,52899,52901,52940,52948,52954,52958,52961,52964,52969,52974,52977,52980,52983,52988,52993,52996,52999,53002,53005,53008,53011,53014,53017,53020,53023,53026,53028,53031,53034,53037,53040,53043,53046,53049,53052,53056,53061,53064,53069,53072,53075,53078,53081,53084,53087,53090,53092,53095,53098,53101,53104,53107,53110,53114,53117,53126,53129,53134,53137,53142,53145,53148,53151,53154,53157,53160,53163,53167,53171,53174,53177,53182,53187,53192,53196,53201,53206,53209,53212,53215,53218,53221,53226,53229,53234,53236,53241,53244,53248,53253,53256,53259,53264,53268,53271,53276,53279,53282,53311,53316,53319,53322,53325,53328,53331,53335,53338,53424,53428,53431,53436,53441,53448,53451,53454,53457,53460,53463,53468,53473,53476,53479,53482,53485,53488,53491,53494,53497,53500,53502,53505,53509,53514,53519,53524,53527,53532,53537,53540,53543,53546],[10,50738,50734],{"id":50739},"_2基础语法",[14,50741,50743],{"id":50742},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[367,50745,50747],{"id":50746},"_211-js组成","2.1.1 js组成",[350,50749,50750],{},[353,50751,50752],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,50754,50755],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[350,50757,50758],{"start":312},[353,50759,50760],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[367,50762,50764],{"id":50763},"_212-js书写位置","2.1.2 js书写位置",[350,50766,50767],{},[353,50768,50769],{},[234,50770,50771],{},"内部 JavaScript",[19,50773,50774],{},[29,50775],{"alt":143,"src":50776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[350,50778,50779],{"start":312},[353,50780,50781],{},[234,50782,50783],{},"外部 JavaScript",[19,50785,50786],{},[29,50787],{"alt":143,"src":50788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[350,50790,50791],{"start":1454},[353,50792,50793],{},[234,50794,50795],{},"内联 JavaScript",[19,50797,50798],{},[29,50799],{"alt":143,"src":50800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[367,50802,50804],{"id":50803},"_213-javascript注释","2.1.3 JavaScript注释",[19,50806,50807],{},[29,50808],{"alt":143,"src":50809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,50811,50812],{},"alt+shift+a一定要记住！",[367,50814,50816],{"id":50815},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,50818,50819],{},[29,50820],{"alt":143,"src":50821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[367,50823,50825],{"id":50824},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[350,50827,50828],{},[353,50829,50830],{},"输出语法：",[19,50832,50833],{},"①document.write('要出的内容')",[19,50835,50836],{},"向body内输出内容；",[19,50838,50839],{},"如果输出的内容写的是标签，也会被解析cheng",[19,50841,50842],{},"②alert('要出的内容')",[19,50844,50845],{},"页面弹出警告对话框",[19,50847,50848],{},"③console.log('控制台打印')",[19,50850,50851],{},"控制台输出语法，程序员调试使用",[19,50853,50854],{},"输入log就行，自动生成：",[19,50856,50857],{},[29,50858],{"alt":143,"src":50859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[350,50861,50862],{"start":312},[353,50863,50864],{},"输入语法：",[19,50866,50867],{},[29,50868],{"alt":143,"src":50869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[367,50871,50873],{"id":50872},"_2116-字面量","21.1.6 字面量",[19,50875,50876],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,50878,50879],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,50881,50883],{"id":50882},"_22-变量","2.2 变量",[350,50885,50886],{},[353,50887,50888],{},"变量声明",[19,50890,50891],{},"let 变量名",[1406,50893,50894,50897],{},[353,50895,50896],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[353,50898,50899],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[350,50901,50902],{"start":312},[353,50903,50904],{},"变量赋值",[138,50906,50910],{"className":50907,"code":50908,"language":50909,"meta":143,"style":143},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[51,50911,50912,50917],{"__ignoreMap":143},[147,50913,50914],{"class":149,"line":150},[147,50915,50916],{"class":157},"let age\n",[147,50918,50919],{"class":149,"line":312},[147,50920,50921],{"class":157},"age=18\n",[350,50923,50924,50927],{"start":1454},[353,50925,50926],{},"连这些（变量的初始化）：let age=18",[353,50928,50929],{},"更新变量",[19,50931,50932],{},[29,50933],{"alt":143,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[350,50936,50937],{"start":1475},[353,50938,50939],{},"声明多个变量",[19,50941,50942],{},[29,50943],{"alt":143,"src":50944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[350,50946,50947],{"start":1489},[353,50948,50949],{},"变量命名规则与规范",[19,50951,50952],{},[29,50953],{"alt":143,"src":50954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,50956,50957],{},"遵守小驼峰！",[350,50959,50960],{"start":1495},[353,50961,50962],{},"变量拓展-let和var的区别",[19,50964,50965],{},[29,50966],{"alt":143,"src":50967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,50969,50971],{"id":50970},"_23-数组","2.3 数组",[138,50973,50975],{"className":50907,"code":50974,"language":50909,"meta":143,"style":143},"let arr = []\n",[51,50976,50977],{"__ignoreMap":143},[147,50978,50979],{"class":149,"line":150},[147,50980,50974],{"class":157},[19,50982,50983],{},[29,50984],{"alt":143,"src":50985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,50987,50988],{},[29,50989],{"alt":143,"src":50990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,50992,50994],{"id":50993},"_24-常量","2.4 常量",[19,50996,50997],{},[29,50998],{"alt":143,"src":50999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,51001,51002],{},"const — 类似于 let ，但是变量的值无法被修改",[14,51004,51006],{"id":51005},"_25-数据类型","2.5 数据类型",[19,51008,51009],{},[29,51010],{"alt":143,"src":51011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[350,51013,51014,51017],{},[353,51015,51016],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[353,51018,51019],{},"算数运算符：",[19,51021,51022],{},[29,51023],{"alt":143,"src":51024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[350,51026,51027],{"start":1454},[353,51028,51029],{},"数字类型（Number）",[19,51031,51032],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,51034,51035],{},[29,51036],{"alt":143,"src":51037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[350,51039,51040],{"start":1469},[353,51041,51042],{},"字符串类型（string）",[19,51044,51045],{},[29,51046],{"alt":143,"src":51047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,51049,51050],{},"反引号也是可以使用的",[19,51052,51053],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,51055,51056],{},"例如：document.write(\"我今年\"+age+\"岁\")",[350,51058,51059],{"start":1475},[353,51060,51061],{},"模板字符串",[19,51063,51064],{},[29,51065],{"alt":143,"src":51066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,51068,51069],{},"类似于python的字符串格式化",[350,51071,51072],{"start":1489},[353,51073,51074],{},"布尔类型",[19,51076,51077],{},"true 和 false",[350,51079,51080],{"start":1495},[353,51081,51082],{},"未定义类型（underfined）",[19,51084,51085],{},"表示没有赋值",[19,51087,51088],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,51090,51091],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[350,51093,51094],{"start":1586},[353,51095,51096],{},"null（空类型）",[19,51098,51099],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,51101,51102],{},"赋值了，但是内容为空",[138,51104,51106],{"className":50907,"code":51105,"language":50909,"meta":143,"style":143},"typeof null\n输出的是'object'，是一个对象数据类型\n",[51,51107,51108,51113],{"__ignoreMap":143},[147,51109,51110],{"class":149,"line":150},[147,51111,51112],{"class":157},"typeof null\n",[147,51114,51115],{"class":149,"line":312},[147,51116,51117],{"class":157},"输出的是'object'，是一个对象数据类型\n",[350,51119,51120],{"start":1592},[353,51121,51122],{},"控制台检测数据类型",[19,51124,51125],{},[29,51126],{"alt":143,"src":51127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[350,51129,51130],{"start":1604},[353,51131,51132],{},"类型转换",[19,51134,51135],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,51137,51138],{},"转换方式：隐式转换和显示转换",[19,51140,51141],{},"①隐式转换",[1406,51143,51144,51147,51150,51153],{},[353,51145,51146],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[353,51148,51149],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[353,51151,51152],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[353,51154,51155],{},"任何数据和字符串相加结果都是字符串",[19,51157,51158],{},"②显示转换",[19,51160,51161],{},[29,51162],{"alt":143,"src":51163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,51165,51166],{},[29,51167],{"alt":143,"src":51168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,51170,51171],{},"在输入的时候要用好隐式转换，简单写起来",[19,51173,51174],{},"let num = +prompt(’请输入数字：‘)",[19,51176,51177],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,51179,51180],{},"console.log(parseInt('12.333px'))",[19,51182,51183],{},"输出为：12",[19,51185,51186],{},"console.log(parseInt('a'a'a12.333px'))",[19,51188,51189],{},"输出：NaN",[14,51191,51193],{"id":51192},"_26-运算符","2.6 运算符",[367,51195,51197],{"id":51196},"_261-赋值运算符","2.6.1 赋值运算符",[19,51199,51200],{},[29,51201],{"alt":143,"src":51202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[367,51204,51206],{"id":51205},"_262-一元运算符","2.6.2 一元运算符",[19,51208,51209],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,51211,51212],{},[29,51213],{"alt":143,"src":51214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,51216,51217],{},[29,51218],{"alt":143,"src":51219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,51221,51222],{},"两者的区别：",[19,51224,51225],{},[29,51226],{"alt":143,"src":51227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,51229,51230],{},"前置先自加；后置后加，代码执行完之后再加",[367,51232,51234],{"id":51233},"_263-比较运算符","2.6.3 比较运算符",[19,51236,51237],{},[29,51238],{"alt":143,"src":51239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,51241,51242],{},"比较运算符也有隐式转换",[19,51244,51245],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,51247,51248],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,51250,51251],{},"要使用三等，开发的时候",[19,51253,51254],{},"NaN不等于任何人，包括它自己",[19,51256,51257],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,51259,51260],{},"7\u002F10=0.7",[19,51262,51263],{},"最后：0.5+0.2=0.7",[19,51265,51266],{},"字符串比较，比较的是字符对应的ASCII码",[367,51268,51270],{"id":51269},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,51272,51273],{},[29,51274],{"alt":143,"src":51275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,51277,51278],{},[29,51279],{"alt":143,"src":51280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,51282,51283],{},[29,51284],{"alt":143,"src":51285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,51287,51288],{},"上述题目选D",[19,51290,51291],{},"与真2假1；或真1假2",[367,51293,51295],{"id":51294},"_265-运算符优先级","2.6.5 运算符优先级",[19,51297,51298],{},[29,51299],{"alt":143,"src":51300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,51302,51303],{},"先算逻辑与，后算逻辑或",[14,51305,51307],{"id":51306},"_27-语句","2.7 语句",[19,51309,51310],{},"表达式：是可以被求值的代码，会有结果给我们",[19,51312,51313],{},"语句：语句是可以被执行的代码，例如prompt()",[19,51315,51316],{},[29,51317],{"alt":143,"src":51318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,51320,51321],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,51323,51324],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[367,51326,51328],{"id":51327},"_271-分支语句","2.7.1 分支语句",[22271,51330,51332],{"id":51331},"_2711-if分支语句","2.7.1.1 if分支语句",[19,51334,51335],{},"if语句单行简单的话，可以不写{}，写在一行就行",[350,51337,51338],{},[353,51339,51340],{},"单分支语句",[19,51342,51343],{},[29,51344],{"alt":143,"src":51345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,51347,51348],{},"除了0，所有数字都为真",[138,51350,51352],{"className":50907,"code":51351,"language":50909,"meta":143,"style":143},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[51,51353,51354,51359,51364,51369,51373],{"__ignoreMap":143},[147,51355,51356],{"class":149,"line":150},[147,51357,51358],{"class":157},"if（0) {\n",[147,51360,51361],{"class":149,"line":312},[147,51362,51363],{"class":157},"    let a=1\n",[147,51365,51366],{"class":149,"line":1454},[147,51367,51368],{"class":157},"    alert(typeof a)\n",[147,51370,51371],{"class":149,"line":1469},[147,51372,1839],{"class":157},[147,51374,51375],{"class":149,"line":1475},[147,51376,51377],{"class":157},"不输出，括号为假\n",[350,51379,51380],{"start":312},[353,51381,51382],{},"双分支语句",[19,51384,51385],{},[29,51386],{"alt":143,"src":51387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[350,51389,51390],{"start":1454},[353,51391,51392],{},"多分支语句",[19,51394,51395],{},[29,51396],{"alt":143,"src":51397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22271,51399,51401],{"id":51400},"_2712-三元运算符","2.7.1.2 三元运算符",[19,51403,51404],{},[29,51405],{"alt":143,"src":51406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22271,51408,51410],{"id":51409},"_2713-switch语句","2.7.1.3 switch语句",[19,51412,51413],{},[29,51414],{"alt":143,"src":51415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,51417,51418],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[367,51420,51422],{"id":51421},"_272-循环语句","2.7.2 循环语句",[22271,51424,51426],{"id":51425},"_2721-断点演示","2.7.2.1 断点演示",[19,51428,51429],{},[29,51430],{"alt":143,"src":51431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22271,51433,51435],{"id":51434},"_2722-while循环","2.7.2.2 while循环",[19,51437,51438],{},[29,51439],{"alt":143,"src":51440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,51442,51443],{},[29,51444],{"alt":143,"src":51445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22271,51447,51449],{"id":51448},"_2723-for循环","2.7.2.3 for循环",[19,51451,51452],{},[29,51453],{"alt":143,"src":51454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,51456,51457],{},"for(;;) {",[19,51459,1345],{},[19,51461,51462],{},"表示无限循环",[19,51464,51465],{},[29,51466],{"alt":143,"src":51467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22271,51469,51471],{"id":51470},"_2724-循环的退出","2.7.2.4 循环的退出",[19,51473,51474],{},[29,51475],{"alt":143,"src":51476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,51478,51480],{"id":51479},"_28-数组","2.8 数组",[367,51482,51484],{"id":51483},"_281-基础认识","2.8.1 基础认识",[19,51486,51487],{},[29,51488],{"alt":143,"src":51489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,51491,51492],{},[29,51493],{"alt":143,"src":51494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,51496,51497],{},[29,51498],{"alt":143,"src":51499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,51501,51502],{},[29,51503],{"alt":143,"src":51504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[367,51506,51508],{"id":51507},"_282-操作数组","2.8.2 操作数组",[19,51510,51511],{},[29,51512],{"alt":143,"src":51513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[350,51515,51516],{},[353,51517,51518],{},"添加元素",[19,51520,51521],{},[29,51522],{"alt":143,"src":51523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,51525,51526],{},"console.log(arr.push('green'))",[19,51528,51529],{},"输出结果：为新数组的长度",[19,51531,51532],{},[29,51533],{"alt":143,"src":51534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,51536,51537],{},"push用的非常多，一定要记住",[350,51539,51540],{},[353,51541,51542],{},"删除元素",[19,51544,51545],{},[29,51546],{"alt":143,"src":51547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,51549,51550],{},[29,51551],{"alt":143,"src":51552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,51554,51555],{},[29,51556],{"alt":143,"src":51557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[367,51559,51561],{"id":51560},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[138,51563,51565],{"className":50907,"code":51564,"language":50909,"meta":143,"style":143},"\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",[51,51566,51567,51581,51597,51601,51610,51628,51652,51674,51688,51696,51703,51715,51726,51730,51734,51741,51753,51768,51781,51800,51817,51832,51844,51856,51868,51872,51876,51887,51897,51909,51921,51933,51944,51948,51952,51964,51968,51982,51986,51990,52001,52015,52027,52041,52045,52054,52063,52067,52076,52080,52089,52094,52099,52112,52140,52145,52150,52175,52180,52184,52189,52194,52209,52213,52218,52248,52260,52276,52292,52306,52311,52318,52322,52327,52340,52348,52356,52360],{"__ignoreMap":143},[147,51568,51569,51572,51575,51578],{"class":149,"line":150},[147,51570,51571],{"class":157},"\u003C!",[147,51573,51574],{"class":153},"DOCTYPE",[147,51576,51577],{"class":2237}," html",[147,51579,51580],{"class":157},">\n",[147,51582,51583,51585,51587,51590,51592,51595],{"class":149,"line":312},[147,51584,1309],{"class":157},[147,51586,50909],{"class":153},[147,51588,51589],{"class":2237}," lang",[147,51591,445],{"class":157},[147,51593,51594],{"class":504},"\"en\"",[147,51596,51580],{"class":157},[147,51598,51599],{"class":149,"line":1454},[147,51600,2674],{"emptyLinePlaceholder":324},[147,51602,51603,51605,51608],{"class":149,"line":1469},[147,51604,1309],{"class":157},[147,51606,51607],{"class":153},"head",[147,51609,51580],{"class":157},[147,51611,51612,51615,51618,51621,51623,51626],{"class":149,"line":1475},[147,51613,51614],{"class":157},"    \u003C",[147,51616,51617],{"class":153},"meta",[147,51619,51620],{"class":2237}," charset",[147,51622,445],{"class":157},[147,51624,51625],{"class":504},"\"UTF-8\"",[147,51627,51580],{"class":157},[147,51629,51630,51632,51634,51637,51639,51642,51645,51647,51650],{"class":149,"line":1489},[147,51631,51614],{"class":157},[147,51633,51617],{"class":153},[147,51635,51636],{"class":2237}," http-equiv",[147,51638,445],{"class":157},[147,51640,51641],{"class":504},"\"X-UA-Compatible\"",[147,51643,51644],{"class":2237}," content",[147,51646,445],{"class":157},[147,51648,51649],{"class":504},"\"IE=edge\"",[147,51651,51580],{"class":157},[147,51653,51654,51656,51658,51660,51662,51665,51667,51669,51672],{"class":149,"line":1495},[147,51655,51614],{"class":157},[147,51657,51617],{"class":153},[147,51659,15193],{"class":2237},[147,51661,445],{"class":157},[147,51663,51664],{"class":504},"\"viewport\"",[147,51666,51644],{"class":2237},[147,51668,445],{"class":157},[147,51670,51671],{"class":504},"\"width=device-width, initial-scale=1.0\"",[147,51673,51580],{"class":157},[147,51675,51676,51678,51681,51684,51686],{"class":149,"line":1586},[147,51677,51614],{"class":157},[147,51679,51680],{"class":153},"title",[147,51682,51683],{"class":157},">Document\u003C\u002F",[147,51685,51680],{"class":153},[147,51687,51580],{"class":157},[147,51689,51690,51692,51694],{"class":149,"line":1592},[147,51691,51614],{"class":157},[147,51693,308],{"class":153},[147,51695,51580],{"class":157},[147,51697,51698,51701],{"class":149,"line":1604},[147,51699,51700],{"class":153},"        *",[147,51702,15845],{"class":157},[147,51704,51705,51708,51711,51713],{"class":149,"line":1886},[147,51706,51707],{"class":448},"            margin",[147,51709,51710],{"class":157},": ",[147,51712,590],{"class":448},[147,51714,1565],{"class":157},[147,51716,51717,51720,51722,51724],{"class":149,"line":1891},[147,51718,51719],{"class":448},"            padding",[147,51721,51710],{"class":157},[147,51723,590],{"class":448},[147,51725,1565],{"class":157},[147,51727,51728],{"class":149,"line":1897},[147,51729,2803],{"class":157},[147,51731,51732],{"class":149,"line":1902},[147,51733,2674],{"emptyLinePlaceholder":324},[147,51735,51736,51739],{"class":149,"line":1916},[147,51737,51738],{"class":2237},"        .box",[147,51740,15845],{"class":157},[147,51742,51743,51746,51748,51751],{"class":149,"line":1921},[147,51744,51745],{"class":448},"            display",[147,51747,51710],{"class":157},[147,51749,51750],{"class":448},"flex",[147,51752,1565],{"class":157},[147,51754,51755,51758,51760,51763,51766],{"class":149,"line":1927},[147,51756,51757],{"class":448},"            width",[147,51759,51710],{"class":157},[147,51761,51762],{"class":448},"700",[147,51764,51765],{"class":397},"px",[147,51767,1565],{"class":157},[147,51769,51770,51773,51775,51777,51779],{"class":149,"line":1948},[147,51771,51772],{"class":448},"            height",[147,51774,51710],{"class":157},[147,51776,4247],{"class":448},[147,51778,51765],{"class":397},[147,51780,1565],{"class":157},[147,51782,51783,51786,51788,51790,51792,51795,51798],{"class":149,"line":1953},[147,51784,51785],{"class":448},"            border-left",[147,51787,51710],{"class":157},[147,51789,616],{"class":448},[147,51791,51765],{"class":397},[147,51793,51794],{"class":448}," solid",[147,51796,51797],{"class":448}," pink",[147,51799,1565],{"class":157},[147,51801,51802,51805,51807,51809,51811,51813,51815],{"class":149,"line":1967},[147,51803,51804],{"class":448},"            border-bottom",[147,51806,51710],{"class":157},[147,51808,616],{"class":448},[147,51810,51765],{"class":397},[147,51812,51794],{"class":448},[147,51814,51797],{"class":448},[147,51816,1565],{"class":157},[147,51818,51819,51821,51823,51825,51827,51830],{"class":149,"line":1972},[147,51820,51707],{"class":448},[147,51822,51710],{"class":157},[147,51824,1055],{"class":448},[147,51826,51765],{"class":397},[147,51828,51829],{"class":448}," auto",[147,51831,1565],{"class":157},[147,51833,51834,51837,51839,51842],{"class":149,"line":2001},[147,51835,51836],{"class":448},"            justify-content",[147,51838,51710],{"class":157},[147,51840,51841],{"class":448},"space-around",[147,51843,1565],{"class":157},[147,51845,51846,51849,51851,51854],{"class":149,"line":2006},[147,51847,51848],{"class":448},"            align-items",[147,51850,51710],{"class":157},[147,51852,51853],{"class":448},"flex-end",[147,51855,1565],{"class":157},[147,51857,51858,51861,51863,51866],{"class":149,"line":2023},[147,51859,51860],{"class":448},"            text-align",[147,51862,51710],{"class":157},[147,51864,51865],{"class":448},"center",[147,51867,1565],{"class":157},[147,51869,51870],{"class":149,"line":2028},[147,51871,2803],{"class":157},[147,51873,51874],{"class":149,"line":2033},[147,51875,2674],{"emptyLinePlaceholder":324},[147,51877,51878,51880,51882,51885],{"class":149,"line":2038},[147,51879,51738],{"class":2237},[147,51881,1359],{"class":397},[147,51883,51884],{"class":153},"div",[147,51886,15845],{"class":157},[147,51888,51889,51891,51893,51895],{"class":149,"line":2052},[147,51890,51745],{"class":448},[147,51892,51710],{"class":157},[147,51894,51750],{"class":448},[147,51896,1565],{"class":157},[147,51898,51899,51901,51903,51905,51907],{"class":149,"line":2057},[147,51900,51757],{"class":448},[147,51902,51710],{"class":157},[147,51904,1055],{"class":448},[147,51906,51765],{"class":397},[147,51908,1565],{"class":157},[147,51910,51911,51914,51916,51919],{"class":149,"line":2851},[147,51912,51913],{"class":448},"            background-color",[147,51915,51710],{"class":157},[147,51917,51918],{"class":448},"pink",[147,51920,1565],{"class":157},[147,51922,51923,51926,51928,51931],{"class":149,"line":2865},[147,51924,51925],{"class":448},"            flex-direction",[147,51927,51710],{"class":157},[147,51929,51930],{"class":448},"column",[147,51932,1565],{"class":157},[147,51934,51935,51937,51939,51942],{"class":149,"line":2873},[147,51936,51836],{"class":448},[147,51938,51710],{"class":157},[147,51940,51941],{"class":448},"space-between",[147,51943,1565],{"class":157},[147,51945,51946],{"class":149,"line":2878},[147,51947,2803],{"class":157},[147,51949,51950],{"class":149,"line":2884},[147,51951,2674],{"emptyLinePlaceholder":324},[147,51953,51954,51956,51959,51962],{"class":149,"line":2890},[147,51955,51738],{"class":2237},[147,51957,51958],{"class":153}," div",[147,51960,51961],{"class":153}," span",[147,51963,15845],{"class":157},[147,51965,51966],{"class":149,"line":2895},[147,51967,2674],{"emptyLinePlaceholder":324},[147,51969,51970,51973,51975,51978,51980],{"class":149,"line":8222},[147,51971,51972],{"class":448},"            margin-top",[147,51974,51710],{"class":157},[147,51976,51977],{"class":448},"-20",[147,51979,51765],{"class":397},[147,51981,1565],{"class":157},[147,51983,51984],{"class":149,"line":8246},[147,51985,2803],{"class":157},[147,51987,51988],{"class":149,"line":8251},[147,51989,2674],{"emptyLinePlaceholder":324},[147,51991,51992,51994,51996,51999],{"class":149,"line":8257},[147,51993,51738],{"class":2237},[147,51995,51958],{"class":153},[147,51997,51998],{"class":153}," h4",[147,52000,15845],{"class":157},[147,52002,52003,52006,52008,52011,52013],{"class":149,"line":8284},[147,52004,52005],{"class":448},"            margin-bottom",[147,52007,51710],{"class":157},[147,52009,52010],{"class":448},"-35",[147,52012,51765],{"class":397},[147,52014,1565],{"class":157},[147,52016,52017,52019,52021,52023,52025],{"class":149,"line":8289},[147,52018,51757],{"class":448},[147,52020,51710],{"class":157},[147,52022,755],{"class":448},[147,52024,51765],{"class":397},[147,52026,1565],{"class":157},[147,52028,52029,52032,52034,52037,52039],{"class":149,"line":8295},[147,52030,52031],{"class":448},"            margin-left",[147,52033,51710],{"class":157},[147,52035,52036],{"class":448},"-10",[147,52038,51765],{"class":397},[147,52040,1565],{"class":157},[147,52042,52043],{"class":149,"line":8307},[147,52044,2803],{"class":157},[147,52046,52047,52050,52052],{"class":149,"line":8319},[147,52048,52049],{"class":157},"    \u003C\u002F",[147,52051,308],{"class":153},[147,52053,51580],{"class":157},[147,52055,52056,52059,52061],{"class":149,"line":8331},[147,52057,52058],{"class":157},"\u003C\u002F",[147,52060,51607],{"class":153},[147,52062,51580],{"class":157},[147,52064,52065],{"class":149,"line":9990},[147,52066,2674],{"emptyLinePlaceholder":324},[147,52068,52069,52071,52074],{"class":149,"line":10015},[147,52070,1309],{"class":157},[147,52072,52073],{"class":153},"body",[147,52075,51580],{"class":157},[147,52077,52078],{"class":149,"line":10038},[147,52079,2674],{"emptyLinePlaceholder":324},[147,52081,52082,52084,52087],{"class":149,"line":10062},[147,52083,51614],{"class":157},[147,52085,52086],{"class":153},"script",[147,52088,51580],{"class":157},[147,52090,52091],{"class":149,"line":10067},[147,52092,52093],{"class":458},"        \u002F\u002F 1. 四次弹框效果\n",[147,52095,52096],{"class":149,"line":10072},[147,52097,52098],{"class":458},"        \u002F\u002F 声明一个新的数组\n",[147,52100,52101,52104,52107,52109],{"class":149,"line":10077},[147,52102,52103],{"class":397},"        let",[147,52105,52106],{"class":157}," arr ",[147,52108,445],{"class":397},[147,52110,52111],{"class":157}," []\n",[147,52113,52114,52116,52118,52121,52123,52125,52127,52129,52131,52134,52136,52138],{"class":149,"line":10086},[147,52115,3677],{"class":397},[147,52117,1932],{"class":157},[147,52119,52120],{"class":397},"let",[147,52122,9712],{"class":157},[147,52124,445],{"class":397},[147,52126,25392],{"class":448},[147,52128,9719],{"class":157},[147,52130,1862],{"class":397},[147,52132,52133],{"class":448}," 4",[147,52135,3488],{"class":157},[147,52137,2566],{"class":397},[147,52139,12716],{"class":157},[147,52141,52142],{"class":149,"line":10091},[147,52143,52144],{"class":458},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[147,52146,52147],{"class":149,"line":10097},[147,52148,52149],{"class":458},"            \u002F\u002F arr.push(num)\n",[147,52151,52152,52155,52158,52160,52163,52165,52168,52170,52173],{"class":149,"line":10118},[147,52153,52154],{"class":157},"            arr.",[147,52156,52157],{"class":2237},"push",[147,52159,401],{"class":157},[147,52161,52162],{"class":2237},"prompt",[147,52164,401],{"class":157},[147,52166,52167],{"class":504},"`请输入第${",[147,52169,840],{"class":157},[147,52171,52172],{"class":504},"}季度的数据:`",[147,52174,30771],{"class":157},[147,52176,52177],{"class":149,"line":10124},[147,52178,52179],{"class":458},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[147,52181,52182],{"class":149,"line":10138},[147,52183,2803],{"class":157},[147,52185,52186],{"class":149,"line":10144},[147,52187,52188],{"class":458},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[147,52190,52191],{"class":149,"line":10171},[147,52192,52193],{"class":458},"        \u002F\u002F 盒子开头\n",[147,52195,52196,52199,52202,52204,52207],{"class":149,"line":10180},[147,52197,52198],{"class":157},"        document.",[147,52200,52201],{"class":2237},"write",[147,52203,401],{"class":157},[147,52205,52206],{"class":504},"` \u003Cdiv class=\"box\">`",[147,52208,407],{"class":157},[147,52210,52211],{"class":149,"line":10186},[147,52212,2674],{"emptyLinePlaceholder":324},[147,52214,52215],{"class":149,"line":10194},[147,52216,52217],{"class":458},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[147,52219,52220,52222,52224,52226,52228,52230,52232,52234,52236,52239,52242,52244,52246],{"class":149,"line":10199},[147,52221,3677],{"class":397},[147,52223,1932],{"class":157},[147,52225,52120],{"class":397},[147,52227,9712],{"class":157},[147,52229,445],{"class":397},[147,52231,4367],{"class":448},[147,52233,9719],{"class":157},[147,52235,1309],{"class":397},[147,52237,52238],{"class":157}," arr.",[147,52240,52241],{"class":448},"length",[147,52243,3488],{"class":157},[147,52245,2566],{"class":397},[147,52247,12716],{"class":157},[147,52249,52250,52253,52255,52257],{"class":149,"line":16877},[147,52251,52252],{"class":157},"            document.",[147,52254,52201],{"class":2237},[147,52256,401],{"class":157},[147,52258,52259],{"class":504},"`\n",[147,52261,52262,52265,52267,52269,52271,52273],{"class":149,"line":16883},[147,52263,52264],{"class":504},"              \u003Cdiv style=\"height: ${",[147,52266,4154],{"class":157},[147,52268,1289],{"class":504},[147,52270,840],{"class":157},[147,52272,1339],{"class":504},[147,52274,52275],{"class":504},"}px;\">\n",[147,52277,52278,52281,52283,52285,52287,52289],{"class":149,"line":16906},[147,52279,52280],{"class":504},"                \u003Cspan>${",[147,52282,4154],{"class":157},[147,52284,1289],{"class":504},[147,52286,840],{"class":157},[147,52288,1339],{"class":504},[147,52290,52291],{"class":504},"}\u003C\u002Fspan>\n",[147,52293,52294,52297,52299,52301,52303],{"class":149,"line":16912},[147,52295,52296],{"class":504},"                \u003Ch4>第${",[147,52298,840],{"class":157},[147,52300,45840],{"class":397},[147,52302,25392],{"class":448},[147,52304,52305],{"class":504},"}季度\u003C\u002Fh4>\n",[147,52307,52308],{"class":149,"line":16935},[147,52309,52310],{"class":504},"              \u003C\u002Fdiv>          \n",[147,52312,52313,52316],{"class":149,"line":16949},[147,52314,52315],{"class":504},"            `",[147,52317,407],{"class":157},[147,52319,52320],{"class":149,"line":16969},[147,52321,2803],{"class":157},[147,52323,52324],{"class":149,"line":16975},[147,52325,52326],{"class":458},"        \u002F\u002F 盒子结尾\n",[147,52328,52329,52331,52333,52335,52338],{"class":149,"line":16986},[147,52330,52198],{"class":157},[147,52332,52201],{"class":2237},[147,52334,401],{"class":157},[147,52336,52337],{"class":504},"` \u003C\u002Fdiv>`",[147,52339,407],{"class":157},[147,52341,52342,52344,52346],{"class":149,"line":17009},[147,52343,52049],{"class":157},[147,52345,52086],{"class":153},[147,52347,51580],{"class":157},[147,52349,52350,52352,52354],{"class":149,"line":17031},[147,52351,52058],{"class":157},[147,52353,52073],{"class":153},[147,52355,51580],{"class":157},[147,52357,52358],{"class":149,"line":17036},[147,52359,2674],{"emptyLinePlaceholder":324},[147,52361,52362,52364,52366],{"class":149,"line":17042},[147,52363,52058],{"class":157},[147,52365,50909],{"class":153},[147,52367,51580],{"class":157},[367,52369,52371],{"id":52370},"_284-冒泡排序","2.8.4 冒泡排序",[138,52373,52375],{"className":50907,"code":52374,"language":50909,"meta":143,"style":143},"\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",[51,52376,52377,52387,52401,52405,52413,52428,52448,52460,52468,52472,52480,52488,52520,52553,52590,52595,52614,52619,52632,52647,52663,52667,52672,52676,52686,52695,52703,52707],{"__ignoreMap":143},[147,52378,52379,52381,52383,52385],{"class":149,"line":150},[147,52380,51571],{"class":157},[147,52382,51574],{"class":153},[147,52384,51577],{"class":2237},[147,52386,51580],{"class":157},[147,52388,52389,52391,52393,52395,52397,52399],{"class":149,"line":312},[147,52390,1309],{"class":157},[147,52392,50909],{"class":153},[147,52394,51589],{"class":2237},[147,52396,445],{"class":157},[147,52398,51594],{"class":504},[147,52400,51580],{"class":157},[147,52402,52403],{"class":149,"line":1454},[147,52404,2674],{"emptyLinePlaceholder":324},[147,52406,52407,52409,52411],{"class":149,"line":1469},[147,52408,1309],{"class":157},[147,52410,51607],{"class":153},[147,52412,51580],{"class":157},[147,52414,52415,52418,52420,52422,52424,52426],{"class":149,"line":1475},[147,52416,52417],{"class":157},"  \u003C",[147,52419,51617],{"class":153},[147,52421,51620],{"class":2237},[147,52423,445],{"class":157},[147,52425,51625],{"class":504},[147,52427,51580],{"class":157},[147,52429,52430,52432,52434,52436,52438,52440,52442,52444,52446],{"class":149,"line":1489},[147,52431,52417],{"class":157},[147,52433,51617],{"class":153},[147,52435,15193],{"class":2237},[147,52437,445],{"class":157},[147,52439,51664],{"class":504},[147,52441,51644],{"class":2237},[147,52443,445],{"class":157},[147,52445,51671],{"class":504},[147,52447,51580],{"class":157},[147,52449,52450,52452,52454,52456,52458],{"class":149,"line":1495},[147,52451,52417],{"class":157},[147,52453,51680],{"class":153},[147,52455,51683],{"class":157},[147,52457,51680],{"class":153},[147,52459,51580],{"class":157},[147,52461,52462,52464,52466],{"class":149,"line":1586},[147,52463,52058],{"class":157},[147,52465,51607],{"class":153},[147,52467,51580],{"class":157},[147,52469,52470],{"class":149,"line":1592},[147,52471,2674],{"emptyLinePlaceholder":324},[147,52473,52474,52476,52478],{"class":149,"line":1604},[147,52475,1309],{"class":157},[147,52477,52073],{"class":153},[147,52479,51580],{"class":157},[147,52481,52482,52484,52486],{"class":149,"line":1886},[147,52483,52417],{"class":157},[147,52485,52086],{"class":153},[147,52487,51580],{"class":157},[147,52489,52490,52493,52495,52497,52500,52502,52504,52506,52508,52510,52512,52514,52516,52518],{"class":149,"line":1891},[147,52491,52492],{"class":397},"    let",[147,52494,52106],{"class":157},[147,52496,445],{"class":397},[147,52498,52499],{"class":157}," [",[147,52501,718],{"class":448},[147,52503,12709],{"class":157},[147,52505,692],{"class":448},[147,52507,12709],{"class":157},[147,52509,471],{"class":448},[147,52511,12709],{"class":157},[147,52513,477],{"class":448},[147,52515,12709],{"class":157},[147,52517,616],{"class":448},[147,52519,33520],{"class":157},[147,52521,52522,52524,52526,52528,52530,52532,52534,52536,52538,52540,52542,52545,52547,52549,52551],{"class":149,"line":1897},[147,52523,3475],{"class":397},[147,52525,1932],{"class":157},[147,52527,52120],{"class":397},[147,52529,9712],{"class":157},[147,52531,445],{"class":397},[147,52533,4367],{"class":448},[147,52535,9719],{"class":157},[147,52537,1309],{"class":397},[147,52539,52238],{"class":157},[147,52541,52241],{"class":448},[147,52543,52544],{"class":397}," -",[147,52546,25392],{"class":448},[147,52548,3488],{"class":157},[147,52550,2566],{"class":397},[147,52552,12716],{"class":157},[147,52554,52555,52558,52560,52562,52564,52566,52568,52570,52572,52574,52576,52578,52580,52582,52584,52586,52588],{"class":149,"line":1902},[147,52556,52557],{"class":397},"      for",[147,52559,1932],{"class":157},[147,52561,52120],{"class":397},[147,52563,9774],{"class":157},[147,52565,445],{"class":397},[147,52567,4367],{"class":448},[147,52569,9781],{"class":157},[147,52571,1309],{"class":397},[147,52573,52238],{"class":157},[147,52575,52241],{"class":448},[147,52577,52544],{"class":397},[147,52579,9712],{"class":157},[147,52581,931],{"class":397},[147,52583,25392],{"class":448},[147,52585,9788],{"class":157},[147,52587,2566],{"class":397},[147,52589,12716],{"class":157},[147,52591,52592],{"class":149,"line":1916},[147,52593,52594],{"class":458},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[147,52596,52597,52599,52602,52604,52607,52609,52611],{"class":149,"line":1921},[147,52598,2771],{"class":397},[147,52600,52601],{"class":157}," (arr[j] ",[147,52603,1359],{"class":397},[147,52605,52606],{"class":157}," arr[j ",[147,52608,880],{"class":397},[147,52610,25392],{"class":448},[147,52612,52613],{"class":157},"]) {\n",[147,52615,52616],{"class":149,"line":1927},[147,52617,52618],{"class":458},"          \u002F\u002F 交换两个变量\n",[147,52620,52621,52624,52627,52629],{"class":149,"line":1948},[147,52622,52623],{"class":397},"          let",[147,52625,52626],{"class":157}," tmp ",[147,52628,445],{"class":397},[147,52630,52631],{"class":157}," arr[j]\n",[147,52633,52634,52637,52639,52641,52643,52645],{"class":149,"line":1953},[147,52635,52636],{"class":157},"          arr[j] ",[147,52638,445],{"class":397},[147,52640,52606],{"class":157},[147,52642,880],{"class":397},[147,52644,25392],{"class":448},[147,52646,33520],{"class":157},[147,52648,52649,52652,52654,52656,52658,52660],{"class":149,"line":1967},[147,52650,52651],{"class":157},"          arr[j ",[147,52653,880],{"class":397},[147,52655,25392],{"class":448},[147,52657,4717],{"class":157},[147,52659,445],{"class":397},[147,52661,52662],{"class":157}," tmp\n",[147,52664,52665],{"class":149,"line":1972},[147,52666,2803],{"class":157},[147,52668,52669],{"class":149,"line":2001},[147,52670,52671],{"class":157},"      }\n",[147,52673,52674],{"class":149,"line":2006},[147,52675,2461],{"class":157},[147,52677,52678,52681,52683],{"class":149,"line":2023},[147,52679,52680],{"class":157},"    document.",[147,52682,52201],{"class":2237},[147,52684,52685],{"class":157},"(arr)\n",[147,52687,52688,52691,52693],{"class":149,"line":2028},[147,52689,52690],{"class":157},"  \u003C\u002F",[147,52692,52086],{"class":153},[147,52694,51580],{"class":157},[147,52696,52697,52699,52701],{"class":149,"line":2033},[147,52698,52058],{"class":157},[147,52700,52073],{"class":153},[147,52702,51580],{"class":157},[147,52704,52705],{"class":149,"line":2038},[147,52706,2674],{"emptyLinePlaceholder":324},[147,52708,52709,52711,52713],{"class":149,"line":2052},[147,52710,52058],{"class":157},[147,52712,50909],{"class":153},[147,52714,51580],{"class":157},[19,52716,52717],{},[29,52718],{"alt":143,"src":52719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,52721,52722],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,52724,52725],{},"let arr = [4, 2, 5, 1, 3]",[19,52727,52728],{},"\u002F\u002F 1.升序排列写法",[19,52730,52731],{},"arr.sort(function (a, b) {",[19,52733,52734],{},"return a - b",[19,52736,52737],{},"})",[19,52739,52740],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,52742,52743],{},"\u002F\u002F 降序排列写法",[19,52745,52731],{},[19,52747,52748],{},"return b - a",[19,52750,52737],{},[19,52752,52753],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,52755,52757],{"id":52756},"_29-函数","2.9 函数",[19,52759,52760],{},[29,52761],{"alt":143,"src":52762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,52764,52765],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,52767,52768],{},"函数的声明用function",[19,52770,52771],{},"函数里边可以嵌套函数",[367,52773,52775],{"id":52774},"_291-函数传参","2.9.1 函数传参",[19,52777,52778],{},[29,52779],{"alt":143,"src":52780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,52782,52783],{},[29,52784],{"alt":143,"src":52785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1406,52787,52788,52791,52794,52797,52800,52803],{},[353,52789,52790],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[353,52792,52793],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[353,52795,52796],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[353,52798,52799],{},"开发中尽量保持形参和实参个数一致",[353,52801,52802],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[353,52804,52805],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,52807,52808],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[367,52810,52812],{"id":52811},"_292-函数的返回值","2.9.2 函数的返回值",[19,52814,52815],{},[29,52816],{"alt":143,"src":52817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,52819,52820],{},[29,52821],{"alt":143,"src":52822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1406,52824,52825,52828,52831,52834,52837],{},[353,52826,52827],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[353,52829,52830],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[353,52832,52833],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[353,52835,52836],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[353,52838,52839],{},"断点调试:进入函数内部看执行过程F11",[367,52841,52843],{"id":52842},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[138,52845,52847],{"className":50907,"code":52846,"language":50909,"meta":143,"style":143},"    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",[51,52848,52849,52854,52859,52863,52868],{"__ignoreMap":143},[147,52850,52851],{"class":149,"line":150},[147,52852,52853],{"class":157},"    function fn(a, b) {\n",[147,52855,52856],{"class":149,"line":312},[147,52857,52858],{"class":157},"      console.log(a + b);\n",[147,52860,52861],{"class":149,"line":1454},[147,52862,2461],{"class":157},[147,52864,52865],{"class":149,"line":1469},[147,52866,52867],{"class":157},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[147,52869,52870],{"class":149,"line":1475},[147,52871,52872],{"class":157},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[367,52874,52876],{"id":52875},"_294-作用域","2.9.4 作用域",[1406,52878,52879,52885,52890,52893,52896],{},[353,52880,52881,52882],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[234,52883,52884],{},"作用域",[353,52886,52887],{},[234,52888,52889],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[353,52891,52892],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[353,52894,52895],{},"函数内部可以直接所使用全局变量",[353,52897,52898],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,52900,14906],{},[138,52902,52904],{"className":50907,"code":52903,"language":50909,"meta":143,"style":143},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[51,52905,52906,52911,52916,52920,52925,52930,52935],{"__ignoreMap":143},[147,52907,52908],{"class":149,"line":150},[147,52909,52910],{"class":157},"    function fun() {\n",[147,52912,52913],{"class":149,"line":312},[147,52914,52915],{"class":157},"      num = 10\n",[147,52917,52918],{"class":149,"line":1454},[147,52919,2461],{"class":157},[147,52921,52922],{"class":149,"line":1469},[147,52923,52924],{"class":157},"    fun()\n",[147,52926,52927],{"class":149,"line":1475},[147,52928,52929],{"class":157},"    console.log(num)\n",[147,52931,52932],{"class":149,"line":1489},[147,52933,52934],{"class":157},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[147,52936,52937],{"class":149,"line":1495},[147,52938,52939],{"class":157},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1406,52941,52942,52945],{},[353,52943,52944],{},"函数内部的形参可以看做是局部变量",[353,52946,52947],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,52949,52950,52951],{},"变量访问原则： ",[234,52952,52953],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[367,52955,52957],{"id":52956},"_295-匿名函数","2.9.5 匿名函数",[19,52959,52960],{},"函数可以分为具名函数和匿名函数",[19,52962,52963],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[350,52965,52966],{},[353,52967,52968],{},"函数表达式",[19,52970,52971],{},[29,52972],{"alt":143,"src":52973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,52975,52976],{},"里边也可以写参数",[19,52978,52979],{},"具名函数调用位置可以随意调整；",[19,52981,52982],{},"匿名函数函数表达式形式只能在声明后才可以使用",[350,52984,52985],{"start":312},[353,52986,52987],{},"立即执行函数",[19,52989,52990],{},[29,52991],{"alt":143,"src":52992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,52994,52995],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,52997,52998],{},"写法：两个小括号，然后在第一个小括号中写function",[19,53000,53001],{},"(function () {})();",[19,53003,53004],{},"不要落下最后的;",[19,53006,53007],{},"立即执行函数必须要加;",[19,53009,53010],{},"分号写前写后都没问题",[19,53012,53013],{},"写前：",[19,53015,53016],{},"(function() {})()",[19,53018,53019],{},";(function () {})();",[19,53021,53022],{},"写后:",[19,53024,53025],{},"(function() {})();",[19,53027,53001],{},[19,53029,53030],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,53032,53033],{},"还有一种写法：",[19,53035,53036],{},"(function(){}());",[19,53038,53039],{},"或者:",[19,53041,53042],{},"!function(){}();",[19,53044,53045],{},"立即执行函数有时候也是可以加名字的：",[19,53047,53048],{},"(function flexible(window,document) {}(window,document));",[19,53050,53051],{},"省一些调用方法",[367,53053,53055],{"id":53054},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,53057,53058],{},[29,53059],{"alt":143,"src":53060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,53062,53063],{},"这样就不用非得给x,y初始化了",[19,53065,53066],{},[29,53067],{"alt":143,"src":53068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,53070,53071],{},"代码执行时先看左边",[19,53073,53074],{},"例如：console.log(false && 3+5)",[19,53076,53077],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,53079,53080],{},"&&都是真时，就返回最后一个真值",[19,53082,53083],{},"console.log(11 && 22)",[19,53085,53086],{},"输出22",[19,53088,53089],{},"逻辑与：遇真则真",[19,53091,14906],{},[19,53093,53094],{},"let age=1",[19,53096,53097],{},"console.log(11 || age++)",[19,53099,53100],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,53102,53103],{},"console.log(11 || 22)",[19,53105,53106],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,53108,53109],{},"||如果都是假的话，就取最后一个假的值了",[367,53111,53113],{"id":53112},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,53115,53116],{},"显示转换：",[19,53118,53119,53122,53123],{},[234,53120,53121],{},"记忆","： ",[234,53124,53125],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,53127,53128],{},"空字符串为假，其他字符串全为真",[19,53130,53131],{},[29,53132],{"alt":143,"src":53133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,53135,53136],{},"隐式转换：",[19,53138,53139],{},[29,53140],{"alt":143,"src":53141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,53143,53144],{},"隐式转换:",[19,53146,53147],{},"null+3=3",[19,53149,53150],{},"undefined+3=NaN",[19,53152,53153],{},"null==undefined 输出true,他两个都当0看",[19,53155,53156],{},"null===undefined 输出false",[19,53158,53159],{},"undefined做任何操作都是NaN",[19,53161,53162],{},"NaN不等于NaN，NaN表示计算错误",[14,53164,53166],{"id":53165},"_210-对象","2.10 对象",[367,53168,53170],{"id":53169},"_2101-对象的介绍","2.10.1 对象的介绍",[19,53172,53173],{},"对象也是一种数据类型，里边的数据是无序的",[19,53175,53176],{},"对象由属性和方法组成",[19,53178,53179],{},[29,53180],{"alt":143,"src":53181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,53183,53184],{},[29,53185],{"alt":143,"src":53186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,53188,53189],{},[29,53190],{"alt":143,"src":53191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[367,53193,53195],{"id":53194},"_2102-对象属性","2.10.2 对象属性",[19,53197,53198],{},[29,53199],{"alt":143,"src":53200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[350,53202,53203],{},[353,53204,53205],{},"查询对象",[19,53207,53208],{},"对象名.属性 goods.uname",[19,53210,53211],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,53213,53214],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,53216,53217],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,53219,53220],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[350,53222,53223],{"start":312},[353,53224,53225],{},"重新赋值",[19,53227,53228],{},"对象名.属性=新值",[350,53230,53231],{"start":1454},[353,53232,53233],{},"增加新数据",[19,53235,53228],{},[350,53237,53238],{"start":1469},[353,53239,53240],{},"删除对象中的属性",[19,53242,53243],{},"delete 对象名.属性",[367,53245,53247],{"id":53246},"_2103-对象方法","2.10.3 对象方法",[19,53249,53250],{},[29,53251],{"alt":143,"src":53252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,53254,53255],{},"后边跟的是匿名函数",[19,53257,53258],{},"对象外面的叫函数；对象内部的叫方法",[19,53260,53261],{},[29,53262],{"alt":143,"src":53263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[367,53265,53267],{"id":53266},"_2104-遍历对象","2.10.4 遍历对象",[19,53269,53270],{},"理解为加括号的python字典遍历",[19,53272,53273],{},[29,53274],{"alt":143,"src":53275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,53277,53278],{},"k是字符串类型",[19,53280,53281],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[138,53283,53285],{"className":50907,"code":53284,"language":50909,"meta":143,"style":143},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[51,53286,53287,53292,53297,53302,53307],{"__ignoreMap":143},[147,53288,53289],{"class":149,"line":150},[147,53290,53291],{"class":157},"   let arr = [1, 2, 3]\n",[147,53293,53294],{"class":149,"line":312},[147,53295,53296],{"class":157},"    for (let k in arr) {\n",[147,53298,53299],{"class":149,"line":1454},[147,53300,53301],{"class":157},"      console.log(k)\n",[147,53303,53304],{"class":149,"line":1469},[147,53305,53306],{"class":157},"      console.log(arr[k])\n",[147,53308,53309],{"class":149,"line":1475},[147,53310,2461],{"class":157},[19,53312,53313],{},[29,53314],{"alt":143,"src":53315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,53317,53318],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,53320,53321],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,53323,53324],{},"for in 得到的k是属性名",[52086,53326,53327],{},"\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,53329,53330],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[367,53332,53334],{"id":53333},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,53336,53337],{},"数组中放对象信息",[138,53339,53343],{"className":53340,"code":53341,"language":53342,"meta":143,"style":143},"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",[51,53344,53345,53353,53358,53363,53368,53373,53378,53383,53388,53393,53398,53403,53408,53412,53416],{"__ignoreMap":143},[147,53346,53347,53349,53351],{"class":149,"line":150},[147,53348,1309],{"class":157},[147,53350,52086],{"class":153},[147,53352,51580],{"class":157},[147,53354,53355],{"class":149,"line":312},[147,53356,53357],{"class":157},"    let students = [\n",[147,53359,53360],{"class":149,"line":1454},[147,53361,53362],{"class":157},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[147,53364,53365],{"class":149,"line":1469},[147,53366,53367],{"class":157},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[147,53369,53370],{"class":149,"line":1475},[147,53371,53372],{"class":157},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[147,53374,53375],{"class":149,"line":1489},[147,53376,53377],{"class":157},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[147,53379,53380],{"class":149,"line":1495},[147,53381,53382],{"class":157},"    ]\n",[147,53384,53385],{"class":149,"line":1586},[147,53386,53387],{"class":157},"    for (let i = 0; i \u003C students.length; i++) {\n",[147,53389,53390],{"class":149,"line":1592},[147,53391,53392],{"class":157},"      for (let k in students[i]) {\n",[147,53394,53395],{"class":149,"line":1604},[147,53396,53397],{"class":157},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[147,53399,53400],{"class":149,"line":1886},[147,53401,53402],{"class":157},"        \u002F\u002F输出每个人的名字：\n",[147,53404,53405],{"class":149,"line":1891},[147,53406,53407],{"class":157},"        \u002F\u002Fconsole.log(students[i].name)\n",[147,53409,53410],{"class":149,"line":1897},[147,53411,52671],{"class":157},[147,53413,53414],{"class":149,"line":1902},[147,53415,2461],{"class":157},[147,53417,53418,53420,53422],{"class":149,"line":1916},[147,53419,52690],{"class":157},[147,53421,52086],{"class":153},[147,53423,51580],{"class":157},[367,53425,53427],{"id":53426},"_2106-内置对象","2.10.6 内置对象",[19,53429,53430],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[350,53432,53433],{},[353,53434,53435],{},"数学对象Math",[19,53437,53438],{},[29,53439],{"alt":143,"src":53440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,53442,53443],{},[637,53444,53447],{"href":53445,"rel":53446},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[24138],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,53449,53450],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,53452,53453],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,53455,53456],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,53458,53459],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,53461,53462],{},"null属于对象数据类型",[350,53464,53465],{"start":312},[353,53466,53467],{},"生成任意范围随机数",[19,53469,53470],{},[29,53471],{"alt":143,"src":53472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,53474,53475],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,53477,53478],{},"乘以几就取不到几",[19,53480,53481],{},"取数组中的随机元素：",[19,53483,53484],{},"let arr = ['red', 'green', 'blue']",[19,53486,53487],{},"let random = Math.floor(Math.random() * arr.length)",[19,53489,53490],{},"console.log(arr[random])",[19,53492,53493],{},"这个函数得到的是全闭区间",[19,53495,53496],{},"function getRandom(N, M) {",[19,53498,53499],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,53501,1345],{},[19,53503,53504],{},"console.log(getRandom(4, 8))",[367,53506,53508],{"id":53507},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,53510,53511],{},[29,53512],{"alt":143,"src":53513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,53515,53516],{},[29,53517],{"alt":143,"src":53518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,53520,53521],{},[29,53522],{"alt":143,"src":53523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,53525,53526],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,53528,53529],{},[29,53530],{"alt":143,"src":53531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,53533,53534],{},[29,53535],{"alt":143,"src":53536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,53538,53539],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,53541,53542],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,53544,53545],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[308,53547,53548],{},"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":143,"searchDepth":312,"depth":312,"links":53550},[53551,53559,53560,53561,53562,53563,53570,53574,53580,53589],{"id":50742,"depth":312,"text":50743,"children":53552},[53553,53554,53555,53556,53557,53558],{"id":50746,"depth":1454,"text":50747},{"id":50763,"depth":1454,"text":50764},{"id":50803,"depth":1454,"text":50804},{"id":50815,"depth":1454,"text":50816},{"id":50824,"depth":1454,"text":50825},{"id":50872,"depth":1454,"text":50873},{"id":50882,"depth":312,"text":50883},{"id":50970,"depth":312,"text":50971},{"id":50993,"depth":312,"text":50994},{"id":51005,"depth":312,"text":51006},{"id":51192,"depth":312,"text":51193,"children":53564},[53565,53566,53567,53568,53569],{"id":51196,"depth":1454,"text":51197},{"id":51205,"depth":1454,"text":51206},{"id":51233,"depth":1454,"text":51234},{"id":51269,"depth":1454,"text":51270},{"id":51294,"depth":1454,"text":51295},{"id":51306,"depth":312,"text":51307,"children":53571},[53572,53573],{"id":51327,"depth":1454,"text":51328},{"id":51421,"depth":1454,"text":51422},{"id":51479,"depth":312,"text":51480,"children":53575},[53576,53577,53578,53579],{"id":51483,"depth":1454,"text":51484},{"id":51507,"depth":1454,"text":51508},{"id":51560,"depth":1454,"text":51561},{"id":52370,"depth":1454,"text":52371},{"id":52756,"depth":312,"text":52757,"children":53581},[53582,53583,53584,53585,53586,53587,53588],{"id":52774,"depth":1454,"text":52775},{"id":52811,"depth":1454,"text":52812},{"id":52842,"depth":1454,"text":52843},{"id":52875,"depth":1454,"text":52876},{"id":52956,"depth":1454,"text":52957},{"id":53054,"depth":1454,"text":53055},{"id":53112,"depth":1454,"text":53113},{"id":53165,"depth":312,"text":53166,"children":53590},[53591,53592,53593,53594,53595,53596,53597],{"id":53169,"depth":1454,"text":53170},{"id":53194,"depth":1454,"text":53195},{"id":53246,"depth":1454,"text":53247},{"id":53266,"depth":1454,"text":53267},{"id":53333,"depth":1454,"text":53334},{"id":53426,"depth":1454,"text":53427},{"id":53507,"depth":1454,"text":53508},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50734,"description":321},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53604,"title":53605,"body":53606,"description":321,"extension":322,"meta":76946,"navigation":324,"path":76947,"seo":76948,"stem":76949,"__hash__":76950},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53607,"toc":76886},[53608,53611,53614,53617,53622,53625,53628,53631,53635,53639,53645,53650,53658,53665,53668,53672,53677,53682,53687,53690,53693,53704,53707,53711,53714,53717,53722,53727,53732,53735,53738,53830,53833,53838,53841,53846,53849,53852,53857,53860,53865,53869,53872,53886,53890,53895,53898,53901,53905,53910,53913,53917,53921,53926,53930,53935,53938,53941,53944,53947,53950,53953,53958,53963,53991,53994,53997,54000,54005,54008,54011,54014,54017,54021,54050,54054,54059,54064,54067,54070,54073,54078,54193,54198,54203,54364,54369,54372,54376,54381,54386,54389,54392,54395,54398,54401,54404,54407,54410,54413,54416,54419,54422,54425,54428,54430,54433,54436,54439,54444,54448,54845,54848,54854,54858,54863,56145,56150,56153,56156,56159,56164,57360,57364,57370,57375,57378,57383,57388,57392,57396,57401,57404,57409,57412,57415,57419,58327,58330,58334,58555,58558,58561,58564,58790,58793,59017,59020,59024,59029,59032,59035,59263,59266,59299,59302,59306,59311,59315,59318,59321,59324,59327,59330,59333,59336,59341,60621,60625,60628,61721,61725,61728,61731,61734,61737,61741,61744,61747,61749,61757,63238,63242,63245,63248,63251,63460,63463,63467,63471,63476,63481,63484,63487,63492,63496,63501,63504,63613,63617,63622,63627,63630,63633,63637,63642,63647,63652,63655,63658,63669,63672,63677,63682,63685,63688,63761,63765,63770,63773,63775,63786,63790,63795,65121,65124,65127,65130,65132,65135,65138,65141,65144,65147,65150,65153,65156,65159,65162,65165,65168,65170,65172,65175,65179,66273,66276,66279,66295,66309,66312,66317,66323,66328,66332,66336,66341,66345,66350,66792,66797,66800,66804,66809,66812,66815,66819,66824,66828,66833,66838,66842,66847,66852,66855,66860,66865,66869,66874,66879,66983,66986,66990,66995,67361,67364,67367,67370,67373,67376,67379,67382,67385,68681,68685,68690,68695,68698,68701,68704,68707,68709,68714,68719,68722,68726,68731,68736,68741,68744,68747,68750,68753,68756,68761,68764,68768,68773,68778,68782,68787,68790,68795,68798,68801,68804,68807,68810,68815,68818,68821,68824,68827,68831,68836,68839,68843,68848,68851,68854,68858,68887,68890,68894,68898,68903,68907,68912,68915,68918,68921,68924,68927,68930,68933,68936,68939,68942,68945,68948,68951,68954,68958,68963,68968,68971,68975,68979,68984,68987,68991,68994,68997,69002,69007,69012,69017,69022,69025,69028,69033,69038,69042,69047,69050,69055,69058,69061,69064,69067,69072,69075,69084,69088,69093,69096,69099,69103,69106,69111,69115,69118,69124,69130,69134,69160,69163,70724,70727,71223,71226,71231,71236,71241,71245,71250,71255,71260,71264,71269,71272,71275,71278,71281,71285,71288,71293,71296,71301,71305,71310,71313,71318,71323,71328,71331,71334,71339,71344,71347,71350,71354,71357,71362,71365,71370,71373,71378,71383,71388,71391,71396,71461,71464,71475,71479,71484,71656,71660,71665,71668,71671,71674,71678,71689,71693,71696,71701,71706,71709,71712,71715,71718,71721,71723,71726,71729,71732,71737,71740,71745,71748,71752,71755,71758,71772,71776,71779,71834,71839,71842,71845,71850,71853,71857,71862,71992,71996,72001,72006,72087,72092,72096,72099,72104,72109,72115,72118,72121,72124,72128,72133,72136,72147,72151,72168,75215,75219,75222,75225,75228,75249,75253,75256,75264,75267,75272,75275,75278,75283,75288,75292,75313,75317,75322,75325,75328,75331,75334,75338,75343,75346,75350,75355,75358,75363,75366,75371,75374,75379,76582,76586,76591,76594,76599,76883],[10,53609,53605],{"id":53610},"_3web-apis",[19,53612,53613],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,53615,53616],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,53618,53619],{},[29,53620],{"alt":143,"src":53621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,53623,53624],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,53626,53627],{},"建议数组和对象使用 const 来声明",[19,53629,53630],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,53632,53634],{"id":53633},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[367,53636,53638],{"id":53637},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,53640,53641,53644],{},[51,53642,53643],{},"document"," = HTML 文件解析后的对象化表示；",[19,53646,53647,53649],{},[51,53648,53643],{}," ≠ HTML 文件本身",[19,53651,53652,53657],{},[234,53653,53654],{},[51,53655,53656],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,53659,53660,53664],{},[234,53661,53662],{},[51,53663,53643],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,53666,53667],{},"document实际上为window.document的简写",[367,53669,53671],{"id":53670},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,53673,53674],{},[29,53675],{"alt":143,"src":53676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,53678,53679],{},[29,53680],{"alt":143,"src":53681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,53683,53684],{},[29,53685],{"alt":143,"src":53686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,53688,53689],{},"console.dir()",[19,53691,53692],{},"dir用来打印对象",[1406,53694,53695,53698,53701],{},[353,53696,53697],{},"任何一个标签，都是一个对象",[353,53699,53700],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[353,53702,53703],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,53705,53706],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[367,53708,53710],{"id":53709},"_312-获取dom对象","3.1.2 获取DoM对象",[19,53712,53713],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,53715,53716],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,53718,53719],{},[234,53720,53721],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[350,53723,53724],{},[353,53725,53726],{},"利用CSS选择器来获取标签元素",[19,53728,53729],{},[29,53730],{"alt":143,"src":53731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,53733,53734],{},"里边的选择器必须必须加引号！！！",[19,53736,53737],{},"只选择第一个元素",[138,53739,53741],{"className":53340,"code":53740,"language":53342,"meta":143,"style":143},"\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",[51,53742,53743,53751,53772,53791,53799,53804,53809,53814,53822],{"__ignoreMap":143},[147,53744,53745,53747,53749],{"class":149,"line":150},[147,53746,1309],{"class":157},[147,53748,52073],{"class":153},[147,53750,51580],{"class":157},[147,53752,53753,53755,53757,53760,53762,53765,53768,53770],{"class":149,"line":312},[147,53754,52417],{"class":157},[147,53756,51884],{"class":153},[147,53758,53759],{"class":2237}," class",[147,53761,445],{"class":157},[147,53763,53764],{"class":504},"\"box\"",[147,53766,53767],{"class":157},">123\u003C\u002F",[147,53769,51884],{"class":153},[147,53771,51580],{"class":157},[147,53773,53774,53776,53778,53780,53782,53784,53787,53789],{"class":149,"line":1454},[147,53775,52417],{"class":157},[147,53777,51884],{"class":153},[147,53779,53759],{"class":2237},[147,53781,445],{"class":157},[147,53783,53764],{"class":504},[147,53785,53786],{"class":157},">456\u003C\u002F",[147,53788,51884],{"class":153},[147,53790,51580],{"class":157},[147,53792,53793,53795,53797],{"class":149,"line":1469},[147,53794,52417],{"class":157},[147,53796,52086],{"class":153},[147,53798,51580],{"class":157},[147,53800,53801],{"class":149,"line":1475},[147,53802,53803],{"class":157},"    \u002F\u002F 1.获取匹配的第一个元素\n",[147,53805,53806],{"class":149,"line":1489},[147,53807,53808],{"class":157},"    const box = document.querySelector('div')\n",[147,53810,53811],{"class":149,"line":1495},[147,53812,53813],{"class":157},"    console.dir(box)\n",[147,53815,53816,53818,53820],{"class":149,"line":1586},[147,53817,52690],{"class":157},[147,53819,52086],{"class":153},[147,53821,51580],{"class":157},[147,53823,53824,53826,53828],{"class":149,"line":1592},[147,53825,52058],{"class":157},[147,53827,52073],{"class":153},[147,53829,51580],{"class":157},[19,53831,53832],{},"只选123，不选456",[19,53834,53835],{},[29,53836],{"alt":143,"src":53837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,53839,53840],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,53842,53843],{},[29,53844],{"alt":143,"src":53845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,53847,53848],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,53850,53851],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[350,53853,53854],{"start":312},[353,53855,53856],{},"其他方法来获取标签元素",[19,53858,53859],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,53861,53862],{},[29,53863],{"alt":143,"src":53864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[367,53866,53868],{"id":53867},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,53870,53871],{},"设置修改DOM元素内容有两种方式：",[1406,53873,53874,53877,53880,53883],{},[353,53875,53876],{},"元素.innerText=''",[353,53878,53879],{},"元素.innerHTML=''",[353,53881,53882],{},"不写字符串输出数字也是可以的",[353,53884,53885],{},"元素.innerHtml=1",[22271,53887,53889],{"id":53888},"_3131-innertext","3.1.3.1 innerText",[19,53891,53892],{},[29,53893],{"alt":143,"src":53894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,53896,53897],{},"思路：实现了修改盒子中的内容！",[19,53899,53900],{},"它只显示纯文本，不解析标签",[22271,53902,53904],{"id":53903},"_3132-innerhtml","3.1.3.2 innerHTML",[19,53906,53907],{},[29,53908],{"alt":143,"src":53909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,53911,53912],{},"相比于innerText，他的强大之处在于可以解析标签",[367,53914,53916],{"id":53915},"_314-操作元素属性","3.1.4 操作元素属性",[22271,53918,53920],{"id":53919},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,53922,53923],{},[29,53924],{"alt":143,"src":53925},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22271,53927,53929],{"id":53928},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,53931,53932],{},[29,53933],{"alt":143,"src":53934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,53936,53937],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,53939,53940],{},"div.style.backgroundColor = 'hotpink'",[19,53942,53943],{},"如果按照css的写法，-表示减，就会出错",[19,53945,53946],{},"body元素不需要再获取，直接用就行！！！！！！",[19,53948,53949],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,53951,53952],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,53954,53955],{},[29,53956],{"alt":143,"src":53957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,53959,53960],{},[29,53961],{"alt":143,"src":53962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[350,53964,53965,53968,53971,53974,53977,53980],{},[353,53966,53967],{},"className这个方式就是修改很多样式的时候来使用的！",[353,53969,53970],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[353,53972,53973],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[353,53975,53976],{},"className为属性名，如果还用class的话就导致与关键字冲突",[353,53978,53979],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[353,53981,53982,53983,53988],{},"解析标签的时候就变为了",[51884,53984],{"className":53985},[53986,53987],"nav","box",[53989,53990],"br",{},[19,53992,53993],{},"例子：",[51884,53995],{"className":53996},[53986],[52086,53998,53999],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,54001,54002],{},[29,54003],{"alt":143,"src":54004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,54006,54007],{},"追加和删除类名用classList",[19,54009,54010],{},"常用于类似于开关的操作",[19,54012,54013],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,54015,54016],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22271,54018,54020],{"id":54019},"_3143-牢记点","3.1.4.3 牢记点",[350,54022,54023,54026,54029,54032,54035,54038,54041,54044,54047],{},[353,54024,54025],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[353,54027,54028],{},"使用style属性操作css时不要忘记引号",[353,54030,54031],{},"使用className或者classList时也不要忘记引号",[353,54033,54034],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[353,54036,54037],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[353,54039,54040],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[353,54042,54043],{},"若： let arr=['1','2',3] arr[0]=1",[353,54045,54046],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[353,54048,54049],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[367,54051,54053],{"id":54052},"_315-操作表单元素","3.1.5 操作表单元素",[350,54055,54056],{},[353,54057,54058],{},"天生的属性",[19,54060,54061],{},[29,54062],{"alt":143,"src":54063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,54065,54066],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,54068,54069],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,54071,54072],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,54074,54075],{},[29,54076],{"alt":143,"src":54077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[138,54079,54081],{"className":50907,"code":54080,"language":50909,"meta":143,"style":143},"在复选框中如果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",[51,54082,54083,54088,54120,54125,54130,54135,54140,54144,54149,54154,54171,54183,54188],{"__ignoreMap":143},[147,54084,54085],{"class":149,"line":150},[147,54086,54087],{"class":157},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[147,54089,54090,54092,54095,54098,54100,54103,54105,54107,54109,54111,54113,54115,54118],{"class":149,"line":312},[147,54091,1309],{"class":157},[147,54093,54094],{"class":153},"input",[147,54096,54097],{"class":2237}," type",[147,54099,445],{"class":157},[147,54101,54102],{"class":504},"\"checkbox\"",[147,54104,15193],{"class":2237},[147,54106,445],{"class":157},[147,54108,7926],{"class":504},[147,54110,15232],{"class":2237},[147,54112,445],{"class":157},[147,54114,7926],{"class":504},[147,54116,54117],{"class":2237}," checked",[147,54119,51580],{"class":157},[147,54121,54122],{"class":149,"line":1454},[147,54123,54124],{"class":157},"不选的话：\n",[147,54126,54127],{"class":149,"line":1469},[147,54128,54129],{"class":157},"const input = document.querySelector('input')\n",[147,54131,54132],{"class":149,"line":1475},[147,54133,54134],{"class":157},"input.checked=false\n",[147,54136,54137],{"class":149,"line":1489},[147,54138,54139],{"class":157},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[147,54141,54142],{"class":149,"line":1495},[147,54143,2674],{"emptyLinePlaceholder":324},[147,54145,54146],{"class":149,"line":1586},[147,54147,54148],{"class":157},"禁用按钮：\n",[147,54150,54151],{"class":149,"line":1592},[147,54152,54153],{"class":157},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[147,54155,54156,54158,54161,54164,54167,54169],{"class":149,"line":1604},[147,54157,1309],{"class":157},[147,54159,54160],{"class":153},"button",[147,54162,54163],{"class":2237}," disabled",[147,54165,54166],{"class":157},">点击\u003C\u002F",[147,54168,54160],{"class":153},[147,54170,51580],{"class":157},[147,54172,54173,54175,54177,54179,54181],{"class":149,"line":1886},[147,54174,1309],{"class":157},[147,54176,54160],{"class":153},[147,54178,54166],{"class":157},[147,54180,54160],{"class":153},[147,54182,51580],{"class":157},[147,54184,54185],{"class":149,"line":1891},[147,54186,54187],{"class":157},"const bt = document.querySelector('button')\n",[147,54189,54190],{"class":149,"line":1897},[147,54191,54192],{"class":157},"bt.disabled = false\n",[350,54194,54195],{"start":312},[353,54196,54197],{},"自定义属性",[19,54199,54200],{},[29,54201],{"alt":143,"src":54202},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[138,54204,54206],{"className":53340,"code":54205,"language":53342,"meta":143,"style":143},"\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",[51,54207,54208,54216,54244,54263,54282,54301,54320,54328,54333,54338,54343,54348,54356],{"__ignoreMap":143},[147,54209,54210,54212,54214],{"class":149,"line":150},[147,54211,1309],{"class":157},[147,54213,52073],{"class":153},[147,54215,51580],{"class":157},[147,54217,54218,54220,54222,54225,54227,54229,54232,54234,54237,54240,54242],{"class":149,"line":312},[147,54219,52417],{"class":157},[147,54221,51884],{"class":153},[147,54223,54224],{"class":2237}," data-id",[147,54226,445],{"class":157},[147,54228,3952],{"class":504},[147,54230,54231],{"class":2237}," data-spm",[147,54233,445],{"class":157},[147,54235,54236],{"class":504},"\"我不知道\"",[147,54238,54239],{"class":157},">1\u003C\u002F",[147,54241,51884],{"class":153},[147,54243,51580],{"class":157},[147,54245,54246,54248,54250,54252,54254,54256,54259,54261],{"class":149,"line":1454},[147,54247,52417],{"class":157},[147,54249,51884],{"class":153},[147,54251,54224],{"class":2237},[147,54253,445],{"class":157},[147,54255,3975],{"class":504},[147,54257,54258],{"class":157},">2\u003C\u002F",[147,54260,51884],{"class":153},[147,54262,51580],{"class":157},[147,54264,54265,54267,54269,54271,54273,54275,54278,54280],{"class":149,"line":1469},[147,54266,52417],{"class":157},[147,54268,51884],{"class":153},[147,54270,54224],{"class":2237},[147,54272,445],{"class":157},[147,54274,3988],{"class":504},[147,54276,54277],{"class":157},">3\u003C\u002F",[147,54279,51884],{"class":153},[147,54281,51580],{"class":157},[147,54283,54284,54286,54288,54290,54292,54294,54297,54299],{"class":149,"line":1475},[147,54285,52417],{"class":157},[147,54287,51884],{"class":153},[147,54289,54224],{"class":2237},[147,54291,445],{"class":157},[147,54293,4001],{"class":504},[147,54295,54296],{"class":157},">4\u003C\u002F",[147,54298,51884],{"class":153},[147,54300,51580],{"class":157},[147,54302,54303,54305,54307,54309,54311,54313,54316,54318],{"class":149,"line":1489},[147,54304,52417],{"class":157},[147,54306,51884],{"class":153},[147,54308,54224],{"class":2237},[147,54310,445],{"class":157},[147,54312,4022],{"class":504},[147,54314,54315],{"class":157},">5\u003C\u002F",[147,54317,51884],{"class":153},[147,54319,51580],{"class":157},[147,54321,54322,54324,54326],{"class":149,"line":1495},[147,54323,52417],{"class":157},[147,54325,52086],{"class":153},[147,54327,51580],{"class":157},[147,54329,54330],{"class":149,"line":1586},[147,54331,54332],{"class":157},"    const one = document.querySelector('div')\n",[147,54334,54335],{"class":149,"line":1592},[147,54336,54337],{"class":157},"    console.log(one.dataset)\n",[147,54339,54340],{"class":149,"line":1604},[147,54341,54342],{"class":157},"    console.log(one.dataset.id)\n",[147,54344,54345],{"class":149,"line":1886},[147,54346,54347],{"class":157},"    console.log(one.dataset.spm)\n",[147,54349,54350,54352,54354],{"class":149,"line":1891},[147,54351,52690],{"class":157},[147,54353,52086],{"class":153},[147,54355,51580],{"class":157},[147,54357,54358,54360,54362],{"class":149,"line":1897},[147,54359,52058],{"class":157},[147,54361,52073],{"class":153},[147,54363,51580],{"class":157},[19,54365,54366],{},[29,54367],{"alt":143,"src":54368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,54370,54371],{},"document.querySelector选择的是第一个对象（元素）",[367,54373,54375],{"id":54374},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,54377,54378],{},[29,54379],{"alt":143,"src":54380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,54382,54383],{},[29,54384],{"alt":143,"src":54385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,54387,54388],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[52086,54390,54391],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,54393,54394],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[52086,54396,54397],{},"\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,54399,54400],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,54402,54403],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,54405,54406],{},"单位为毫秒！！！",[19,54408,54409],{},"可以搭配匿名函数来用！！！",[19,54411,54412],{},"setInterval(function () {",[19,54414,54415],{},"alert('两秒执行一次')",[19,54417,54418],{},"}, 2000)",[19,54420,54421],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,54423,54424],{},"function fn() {",[19,54426,54427],{},"document.write(1)",[19,54429,1345],{},[19,54431,54432],{},"setInterval(fn, 1000)",[19,54434,54435],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,54437,54438],{},"setInterval('fn()', 1000)",[19,54440,54441],{},[29,54442],{"alt":143,"src":54443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22271,54445,54447],{"id":54446},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[138,54449,54451],{"className":50907,"code":54450,"language":50909,"meta":143,"style":143},"\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",[51,54452,54453,54463,54477,54481,54489,54503,54523,54535,54543,54547,54555,54592,54597,54602,54607,54615,54623,54645,54653,54658,54680,54685,54690,54701,54706,54726,54734,54749,54764,54775,54780,54790,54800,54804,54813,54817,54825,54833,54837],{"__ignoreMap":143},[147,54454,54455,54457,54459,54461],{"class":149,"line":150},[147,54456,51571],{"class":157},[147,54458,51574],{"class":153},[147,54460,51577],{"class":2237},[147,54462,51580],{"class":157},[147,54464,54465,54467,54469,54471,54473,54475],{"class":149,"line":312},[147,54466,1309],{"class":157},[147,54468,50909],{"class":153},[147,54470,51589],{"class":2237},[147,54472,445],{"class":157},[147,54474,51594],{"class":504},[147,54476,51580],{"class":157},[147,54478,54479],{"class":149,"line":1454},[147,54480,2674],{"emptyLinePlaceholder":324},[147,54482,54483,54485,54487],{"class":149,"line":1469},[147,54484,1309],{"class":157},[147,54486,51607],{"class":153},[147,54488,51580],{"class":157},[147,54490,54491,54493,54495,54497,54499,54501],{"class":149,"line":1475},[147,54492,52417],{"class":157},[147,54494,51617],{"class":153},[147,54496,51620],{"class":2237},[147,54498,445],{"class":157},[147,54500,51625],{"class":504},[147,54502,51580],{"class":157},[147,54504,54505,54507,54509,54511,54513,54515,54517,54519,54521],{"class":149,"line":1489},[147,54506,52417],{"class":157},[147,54508,51617],{"class":153},[147,54510,15193],{"class":2237},[147,54512,445],{"class":157},[147,54514,51664],{"class":504},[147,54516,51644],{"class":2237},[147,54518,445],{"class":157},[147,54520,51671],{"class":504},[147,54522,51580],{"class":157},[147,54524,54525,54527,54529,54531,54533],{"class":149,"line":1495},[147,54526,52417],{"class":157},[147,54528,51680],{"class":153},[147,54530,51683],{"class":157},[147,54532,51680],{"class":153},[147,54534,51580],{"class":157},[147,54536,54537,54539,54541],{"class":149,"line":1586},[147,54538,52058],{"class":157},[147,54540,51607],{"class":153},[147,54542,51580],{"class":157},[147,54544,54545],{"class":149,"line":1592},[147,54546,2674],{"emptyLinePlaceholder":324},[147,54548,54549,54551,54553],{"class":149,"line":1604},[147,54550,1309],{"class":157},[147,54552,52073],{"class":153},[147,54554,51580],{"class":157},[147,54556,54557,54559,54562,54564,54566,54568,54570,54572,54574,54577,54579,54582,54585,54587,54590],{"class":149,"line":1886},[147,54558,52417],{"class":157},[147,54560,54561],{"class":153},"textarea",[147,54563,15193],{"class":2237},[147,54565,445],{"class":157},[147,54567,7926],{"class":504},[147,54569,15232],{"class":2237},[147,54571,445],{"class":157},[147,54573,7926],{"class":504},[147,54575,54576],{"class":2237}," cols",[147,54578,445],{"class":157},[147,54580,54581],{"class":504},"\"30\"",[147,54583,54584],{"class":2237}," rows",[147,54586,445],{"class":157},[147,54588,54589],{"class":504},"\"10\"",[147,54591,51580],{"class":157},[147,54593,54594],{"class":149,"line":1891},[147,54595,54596],{"class":157},"        用户注册协议\n",[147,54598,54599],{"class":149,"line":1897},[147,54600,54601],{"class":157},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[147,54603,54604],{"class":149,"line":1902},[147,54605,54606],{"class":157},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[147,54608,54609,54611,54613],{"class":149,"line":1916},[147,54610,52049],{"class":157},[147,54612,54561],{"class":153},[147,54614,51580],{"class":157},[147,54616,54617,54619,54621],{"class":149,"line":1921},[147,54618,52417],{"class":157},[147,54620,53989],{"class":153},[147,54622,51580],{"class":157},[147,54624,54625,54627,54629,54631,54633,54636,54638,54641,54643],{"class":149,"line":1927},[147,54626,52417],{"class":157},[147,54628,54160],{"class":153},[147,54630,53759],{"class":2237},[147,54632,445],{"class":157},[147,54634,54635],{"class":504},"\"btn\"",[147,54637,54163],{"class":2237},[147,54639,54640],{"class":157},">我已经阅读用户协议(5)\u003C\u002F",[147,54642,54160],{"class":153},[147,54644,51580],{"class":157},[147,54646,54647,54649,54651],{"class":149,"line":1948},[147,54648,52417],{"class":157},[147,54650,52086],{"class":153},[147,54652,51580],{"class":157},[147,54654,54655],{"class":149,"line":1953},[147,54656,54657],{"class":458},"    \u002F\u002F 1. 获取元素\n",[147,54659,54660,54662,54665,54667,54670,54673,54675,54678],{"class":149,"line":1967},[147,54661,11495],{"class":397},[147,54663,54664],{"class":448}," btn",[147,54666,13838],{"class":397},[147,54668,54669],{"class":157}," document.",[147,54671,54672],{"class":2237},"querySelector",[147,54674,401],{"class":157},[147,54676,54677],{"class":504},"'.btn'",[147,54679,407],{"class":157},[147,54681,54682],{"class":149,"line":1972},[147,54683,54684],{"class":458},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[147,54686,54687],{"class":149,"line":2001},[147,54688,54689],{"class":458},"    \u002F\u002F 2. 倒计时\n",[147,54691,54692,54694,54696,54698],{"class":149,"line":2006},[147,54693,52492],{"class":397},[147,54695,9712],{"class":157},[147,54697,445],{"class":397},[147,54699,54700],{"class":448}," 5\n",[147,54702,54703],{"class":149,"line":2023},[147,54704,54705],{"class":458},"    \u002F\u002F 2.1 开启定时器\n",[147,54707,54708,54710,54713,54715,54718,54720,54723],{"class":149,"line":2028},[147,54709,52492],{"class":397},[147,54711,54712],{"class":157}," n ",[147,54714,445],{"class":397},[147,54716,54717],{"class":2237}," setInterval",[147,54719,401],{"class":157},[147,54721,54722],{"class":397},"function",[147,54724,54725],{"class":157}," () {\n",[147,54727,54728,54731],{"class":149,"line":2033},[147,54729,54730],{"class":157},"      i",[147,54732,54733],{"class":397},"--\n",[147,54735,54736,54739,54741,54744,54746],{"class":149,"line":2038},[147,54737,54738],{"class":157},"      btn.innerHTML ",[147,54740,445],{"class":397},[147,54742,54743],{"class":504}," `我已经阅读用户协议(${",[147,54745,840],{"class":157},[147,54747,54748],{"class":504},"})`\n",[147,54750,54751,54754,54757,54760,54762],{"class":149,"line":2052},[147,54752,54753],{"class":397},"      if",[147,54755,54756],{"class":157}," (i ",[147,54758,54759],{"class":397},"===",[147,54761,4367],{"class":448},[147,54763,12716],{"class":157},[147,54765,54766,54769,54772],{"class":149,"line":2057},[147,54767,54768],{"class":2237},"        clearInterval",[147,54770,54771],{"class":157},"(n)  ",[147,54773,54774],{"class":458},"\u002F\u002F 关闭定时器\n",[147,54776,54777],{"class":149,"line":2851},[147,54778,54779],{"class":458},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[147,54781,54782,54785,54787],{"class":149,"line":2865},[147,54783,54784],{"class":157},"        btn.disabled ",[147,54786,445],{"class":397},[147,54788,54789],{"class":448}," false\n",[147,54791,54792,54795,54797],{"class":149,"line":2873},[147,54793,54794],{"class":157},"        btn.innerHTML ",[147,54796,445],{"class":397},[147,54798,54799],{"class":504}," '同意'\n",[147,54801,54802],{"class":149,"line":2878},[147,54803,52671],{"class":157},[147,54805,54806,54809,54811],{"class":149,"line":2884},[147,54807,54808],{"class":157},"    }, ",[147,54810,6684],{"class":448},[147,54812,407],{"class":157},[147,54814,54815],{"class":149,"line":2890},[147,54816,2674],{"emptyLinePlaceholder":324},[147,54818,54819,54821,54823],{"class":149,"line":2895},[147,54820,52690],{"class":157},[147,54822,52086],{"class":153},[147,54824,51580],{"class":157},[147,54826,54827,54829,54831],{"class":149,"line":8222},[147,54828,52058],{"class":157},[147,54830,52073],{"class":153},[147,54832,51580],{"class":157},[147,54834,54835],{"class":149,"line":8246},[147,54836,2674],{"emptyLinePlaceholder":324},[147,54838,54839,54841,54843],{"class":149,"line":8251},[147,54840,52058],{"class":157},[147,54842,50909],{"class":153},[147,54844,51580],{"class":157},[19,54846,54847],{},"不要一直想着用死循环,避免死循环",[19,54849,54850,54853],{},[51,54851,54852],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22271,54855,54857],{"id":54856},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[350,54859,54860],{},[353,54861,54862],{},"法1",[138,54864,54866],{"className":50907,"code":54865,"language":50909,"meta":143,"style":143},"\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",[51,54867,54868,54878,54892,54896,54904,54918,54938,54950,54958,54964,54975,54986,54990,54994,55001,55013,55017,55021,55028,55040,55054,55067,55081,55085,55089,55096,55107,55118,55129,55141,55153,55165,55169,55173,55181,55191,55204,55216,55229,55233,55237,55244,55254,55266,55278,55289,55300,55310,55322,55334,55338,55342,55351,55363,55375,55403,55416,55420,55424,55431,55442,55446,55454,55462,55466,55474,55488,55503,55527,55535,55550,55563,55571,55592,55604,55616,55628,55640,55652,55664,55676,55685,55693,55701,55709,55721,55744,55763,55782,55801,55820,55839,55858,55878,55882,55902,55921,55941,55962,55973,55990,56000,56010,56020,56025,56030,56035,56040,56065,56078,56082,56105,56109,56117,56125,56133,56137],{"__ignoreMap":143},[147,54869,54870,54872,54874,54876],{"class":149,"line":150},[147,54871,51571],{"class":157},[147,54873,51574],{"class":153},[147,54875,51577],{"class":2237},[147,54877,51580],{"class":157},[147,54879,54880,54882,54884,54886,54888,54890],{"class":149,"line":312},[147,54881,1309],{"class":157},[147,54883,50909],{"class":153},[147,54885,51589],{"class":2237},[147,54887,445],{"class":157},[147,54889,51594],{"class":504},[147,54891,51580],{"class":157},[147,54893,54894],{"class":149,"line":1454},[147,54895,2674],{"emptyLinePlaceholder":324},[147,54897,54898,54900,54902],{"class":149,"line":1469},[147,54899,1309],{"class":157},[147,54901,51607],{"class":153},[147,54903,51580],{"class":157},[147,54905,54906,54908,54910,54912,54914,54916],{"class":149,"line":1475},[147,54907,52417],{"class":157},[147,54909,51617],{"class":153},[147,54911,51620],{"class":2237},[147,54913,445],{"class":157},[147,54915,51625],{"class":504},[147,54917,51580],{"class":157},[147,54919,54920,54922,54924,54926,54928,54930,54932,54934,54936],{"class":149,"line":1489},[147,54921,52417],{"class":157},[147,54923,51617],{"class":153},[147,54925,15193],{"class":2237},[147,54927,445],{"class":157},[147,54929,51664],{"class":504},[147,54931,51644],{"class":2237},[147,54933,445],{"class":157},[147,54935,51671],{"class":504},[147,54937,51580],{"class":157},[147,54939,54940,54942,54944,54946,54948],{"class":149,"line":1495},[147,54941,52417],{"class":157},[147,54943,51680],{"class":153},[147,54945,51683],{"class":157},[147,54947,51680],{"class":153},[147,54949,51580],{"class":157},[147,54951,54952,54954,54956],{"class":149,"line":1586},[147,54953,52417],{"class":157},[147,54955,308],{"class":153},[147,54957,51580],{"class":157},[147,54959,54960,54962],{"class":149,"line":1592},[147,54961,6677],{"class":153},[147,54963,15845],{"class":157},[147,54965,54966,54969,54971,54973],{"class":149,"line":1604},[147,54967,54968],{"class":448},"      padding",[147,54970,51710],{"class":157},[147,54972,590],{"class":448},[147,54974,1565],{"class":157},[147,54976,54977,54980,54982,54984],{"class":149,"line":1886},[147,54978,54979],{"class":448},"      margin",[147,54981,51710],{"class":157},[147,54983,590],{"class":448},[147,54985,1565],{"class":157},[147,54987,54988],{"class":149,"line":1891},[147,54989,2461],{"class":157},[147,54991,54992],{"class":149,"line":1897},[147,54993,2674],{"emptyLinePlaceholder":324},[147,54995,54996,54999],{"class":149,"line":1902},[147,54997,54998],{"class":153},"    li",[147,55000,15845],{"class":157},[147,55002,55003,55006,55008,55011],{"class":149,"line":1916},[147,55004,55005],{"class":448},"      list-style",[147,55007,51710],{"class":157},[147,55009,55010],{"class":448},"none",[147,55012,1565],{"class":157},[147,55014,55015],{"class":149,"line":1921},[147,55016,2461],{"class":157},[147,55018,55019],{"class":149,"line":1927},[147,55020,2674],{"emptyLinePlaceholder":324},[147,55022,55023,55026],{"class":149,"line":1948},[147,55024,55025],{"class":2237},"    .box",[147,55027,15845],{"class":157},[147,55029,55030,55033,55035,55038],{"class":149,"line":1953},[147,55031,55032],{"class":448},"      position",[147,55034,51710],{"class":157},[147,55036,55037],{"class":448},"relative",[147,55039,1565],{"class":157},[147,55041,55042,55045,55047,55050,55052],{"class":149,"line":1967},[147,55043,55044],{"class":448},"      width",[147,55046,51710],{"class":157},[147,55048,55049],{"class":448},"976",[147,55051,51765],{"class":397},[147,55053,1565],{"class":157},[147,55055,55056,55059,55061,55063,55065],{"class":149,"line":1972},[147,55057,55058],{"class":448},"      height",[147,55060,51710],{"class":157},[147,55062,1813],{"class":448},[147,55064,51765],{"class":397},[147,55066,1565],{"class":157},[147,55068,55069,55071,55073,55075,55077,55079],{"class":149,"line":2001},[147,55070,54979],{"class":448},[147,55072,51710],{"class":157},[147,55074,710],{"class":448},[147,55076,51765],{"class":397},[147,55078,51829],{"class":448},[147,55080,1565],{"class":157},[147,55082,55083],{"class":149,"line":2006},[147,55084,2461],{"class":157},[147,55086,55087],{"class":149,"line":2023},[147,55088,2674],{"emptyLinePlaceholder":324},[147,55090,55091,55094],{"class":149,"line":2028},[147,55092,55093],{"class":2237},"    .slider-footer",[147,55095,15845],{"class":157},[147,55097,55098,55100,55102,55105],{"class":149,"line":2033},[147,55099,55032],{"class":448},[147,55101,51710],{"class":157},[147,55103,55104],{"class":448},"absolute",[147,55106,1565],{"class":157},[147,55108,55109,55112,55114,55116],{"class":149,"line":2038},[147,55110,55111],{"class":448},"      left",[147,55113,51710],{"class":157},[147,55115,590],{"class":448},[147,55117,1565],{"class":157},[147,55119,55120,55123,55125,55127],{"class":149,"line":2052},[147,55121,55122],{"class":448},"      bottom",[147,55124,51710],{"class":157},[147,55126,590],{"class":448},[147,55128,1565],{"class":157},[147,55130,55131,55133,55135,55137,55139],{"class":149,"line":2057},[147,55132,55044],{"class":448},[147,55134,51710],{"class":157},[147,55136,710],{"class":448},[147,55138,727],{"class":397},[147,55140,1565],{"class":157},[147,55142,55143,55145,55147,55149,55151],{"class":149,"line":2851},[147,55144,55058],{"class":448},[147,55146,51710],{"class":157},[147,55148,974],{"class":448},[147,55150,727],{"class":397},[147,55152,1565],{"class":157},[147,55154,55155,55158,55160,55163],{"class":149,"line":2865},[147,55156,55157],{"class":448},"      background-color",[147,55159,51710],{"class":157},[147,55161,55162],{"class":448},"skyblue",[147,55164,1565],{"class":157},[147,55166,55167],{"class":149,"line":2873},[147,55168,2461],{"class":157},[147,55170,55171],{"class":149,"line":2878},[147,55172,2674],{"emptyLinePlaceholder":324},[147,55174,55175,55177,55179],{"class":149,"line":2884},[147,55176,55093],{"class":2237},[147,55178,7099],{"class":153},[147,55180,15845],{"class":157},[147,55182,55183,55185,55187,55189],{"class":149,"line":2890},[147,55184,55032],{"class":448},[147,55186,51710],{"class":157},[147,55188,55104],{"class":448},[147,55190,1565],{"class":157},[147,55192,55193,55196,55198,55200,55202],{"class":149,"line":2895},[147,55194,55195],{"class":448},"      font-size",[147,55197,51710],{"class":157},[147,55199,1300],{"class":448},[147,55201,51765],{"class":397},[147,55203,1565],{"class":157},[147,55205,55206,55208,55210,55212,55214],{"class":149,"line":8222},[147,55207,55111],{"class":448},[147,55209,51710],{"class":157},[147,55211,1099],{"class":448},[147,55213,51765],{"class":397},[147,55215,1565],{"class":157},[147,55217,55218,55221,55223,55225,55227],{"class":149,"line":8246},[147,55219,55220],{"class":448},"      top",[147,55222,51710],{"class":157},[147,55224,718],{"class":448},[147,55226,51765],{"class":397},[147,55228,1565],{"class":157},[147,55230,55231],{"class":149,"line":8251},[147,55232,2461],{"class":157},[147,55234,55235],{"class":149,"line":8257},[147,55236,2674],{"emptyLinePlaceholder":324},[147,55238,55239,55242],{"class":149,"line":8284},[147,55240,55241],{"class":153},"    ul",[147,55243,15845],{"class":157},[147,55245,55246,55248,55250,55252],{"class":149,"line":8289},[147,55247,55032],{"class":448},[147,55249,51710],{"class":157},[147,55251,55104],{"class":448},[147,55253,1565],{"class":157},[147,55255,55256,55258,55260,55262,55264],{"class":149,"line":8295},[147,55257,55220],{"class":448},[147,55259,51710],{"class":157},[147,55261,1180],{"class":448},[147,55263,51765],{"class":397},[147,55265,1565],{"class":157},[147,55267,55268,55270,55272,55274,55276],{"class":149,"line":8307},[147,55269,55111],{"class":448},[147,55271,51710],{"class":157},[147,55273,1099],{"class":448},[147,55275,51765],{"class":397},[147,55277,1565],{"class":157},[147,55279,55280,55283,55285,55287],{"class":149,"line":8319},[147,55281,55282],{"class":448},"      display",[147,55284,51710],{"class":157},[147,55286,51750],{"class":448},[147,55288,1565],{"class":157},[147,55290,55291,55294,55296,55298],{"class":149,"line":8331},[147,55292,55293],{"class":448},"      justify-content",[147,55295,51710],{"class":157},[147,55297,51941],{"class":448},[147,55299,1565],{"class":157},[147,55301,55302,55304,55306,55308],{"class":149,"line":9990},[147,55303,55032],{"class":448},[147,55305,51710],{"class":157},[147,55307,55104],{"class":448},[147,55309,1565],{"class":157},[147,55311,55312,55314,55316,55318,55320],{"class":149,"line":10015},[147,55313,55044],{"class":448},[147,55315,51710],{"class":157},[147,55317,4266],{"class":448},[147,55319,51765],{"class":397},[147,55321,1565],{"class":157},[147,55323,55324,55326,55328,55330,55332],{"class":149,"line":10038},[147,55325,55058],{"class":448},[147,55327,51710],{"class":157},[147,55329,1099],{"class":448},[147,55331,51765],{"class":397},[147,55333,1565],{"class":157},[147,55335,55336],{"class":149,"line":10062},[147,55337,2461],{"class":157},[147,55339,55340],{"class":149,"line":10067},[147,55341,2674],{"emptyLinePlaceholder":324},[147,55343,55344,55346,55349],{"class":149,"line":10072},[147,55345,55241],{"class":153},[147,55347,55348],{"class":153}," li",[147,55350,15845],{"class":157},[147,55352,55353,55355,55357,55359,55361],{"class":149,"line":10077},[147,55354,55044],{"class":448},[147,55356,51710],{"class":157},[147,55358,1099],{"class":448},[147,55360,51765],{"class":397},[147,55362,1565],{"class":157},[147,55364,55365,55367,55369,55371,55373],{"class":149,"line":10086},[147,55366,55058],{"class":448},[147,55368,51710],{"class":157},[147,55370,1099],{"class":448},[147,55372,51765],{"class":397},[147,55374,1565],{"class":157},[147,55376,55377,55379,55381,55384,55386,55388,55390,55392,55394,55396,55398,55401],{"class":149,"line":10091},[147,55378,55157],{"class":448},[147,55380,51710],{"class":157},[147,55382,55383],{"class":448},"rgba",[147,55385,401],{"class":157},[147,55387,590],{"class":448},[147,55389,12709],{"class":157},[147,55391,590],{"class":448},[147,55393,12709],{"class":157},[147,55395,590],{"class":448},[147,55397,12709],{"class":157},[147,55399,55400],{"class":448},".4",[147,55402,2993],{"class":157},[147,55404,55405,55408,55410,55412,55414],{"class":149,"line":10097},[147,55406,55407],{"class":448},"      border-radius",[147,55409,51710],{"class":157},[147,55411,845],{"class":448},[147,55413,51765],{"class":397},[147,55415,1565],{"class":157},[147,55417,55418],{"class":149,"line":10118},[147,55419,2461],{"class":157},[147,55421,55422],{"class":149,"line":10124},[147,55423,2674],{"emptyLinePlaceholder":324},[147,55425,55426,55429],{"class":149,"line":10138},[147,55427,55428],{"class":2237},"    .activate",[147,55430,15845],{"class":157},[147,55432,55433,55435,55437,55440],{"class":149,"line":10144},[147,55434,55157],{"class":448},[147,55436,51710],{"class":157},[147,55438,55439],{"class":448},"#f7f7f7",[147,55441,1565],{"class":157},[147,55443,55444],{"class":149,"line":10171},[147,55445,2461],{"class":157},[147,55447,55448,55450,55452],{"class":149,"line":10180},[147,55449,52690],{"class":157},[147,55451,308],{"class":153},[147,55453,51580],{"class":157},[147,55455,55456,55458,55460],{"class":149,"line":10186},[147,55457,52058],{"class":157},[147,55459,51607],{"class":153},[147,55461,51580],{"class":157},[147,55463,55464],{"class":149,"line":10194},[147,55465,2674],{"emptyLinePlaceholder":324},[147,55467,55468,55470,55472],{"class":149,"line":10199},[147,55469,1309],{"class":157},[147,55471,52073],{"class":153},[147,55473,51580],{"class":157},[147,55475,55476,55478,55480,55482,55484,55486],{"class":149,"line":16877},[147,55477,52417],{"class":157},[147,55479,51884],{"class":153},[147,55481,53759],{"class":2237},[147,55483,445],{"class":157},[147,55485,53764],{"class":504},[147,55487,51580],{"class":157},[147,55489,55490,55492,55494,55496,55498,55501],{"class":149,"line":16883},[147,55491,51614],{"class":157},[147,55493,51884],{"class":153},[147,55495,53759],{"class":2237},[147,55497,445],{"class":157},[147,55499,55500],{"class":504},"\"slider-wrapper\"",[147,55502,51580],{"class":157},[147,55504,55505,55508,55510,55513,55515,55518,55521,55523,55525],{"class":149,"line":16906},[147,55506,55507],{"class":157},"      \u003C",[147,55509,29],{"class":153},[147,55511,55512],{"class":2237}," src",[147,55514,445],{"class":157},[147,55516,55517],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[147,55519,55520],{"class":2237}," alt",[147,55522,445],{"class":157},[147,55524,7926],{"class":504},[147,55526,51580],{"class":157},[147,55528,55529,55531,55533],{"class":149,"line":16912},[147,55530,52049],{"class":157},[147,55532,51884],{"class":153},[147,55534,51580],{"class":157},[147,55536,55537,55539,55541,55543,55545,55548],{"class":149,"line":16935},[147,55538,51614],{"class":157},[147,55540,51884],{"class":153},[147,55542,53759],{"class":2237},[147,55544,445],{"class":157},[147,55546,55547],{"class":504},"\"slider-footer\"",[147,55549,51580],{"class":157},[147,55551,55552,55554,55556,55559,55561],{"class":149,"line":16949},[147,55553,55507],{"class":157},[147,55555,19],{"class":153},[147,55557,55558],{"class":157},">对人类来说会不会太超前了?\u003C\u002F",[147,55560,19],{"class":153},[147,55562,51580],{"class":157},[147,55564,55565,55567,55569],{"class":149,"line":16969},[147,55566,55507],{"class":157},[147,55568,1406],{"class":153},[147,55570,51580],{"class":157},[147,55572,55573,55576,55578,55580,55582,55585,55588,55590],{"class":149,"line":16975},[147,55574,55575],{"class":157},"        \u003C",[147,55577,353],{"class":153},[147,55579,53759],{"class":2237},[147,55581,445],{"class":157},[147,55583,55584],{"class":504},"\"activate\"",[147,55586,55587],{"class":157},">\u003C\u002F",[147,55589,353],{"class":153},[147,55591,51580],{"class":157},[147,55593,55594,55596,55598,55600,55602],{"class":149,"line":16986},[147,55595,55575],{"class":157},[147,55597,353],{"class":153},[147,55599,55587],{"class":157},[147,55601,353],{"class":153},[147,55603,51580],{"class":157},[147,55605,55606,55608,55610,55612,55614],{"class":149,"line":17009},[147,55607,55575],{"class":157},[147,55609,353],{"class":153},[147,55611,55587],{"class":157},[147,55613,353],{"class":153},[147,55615,51580],{"class":157},[147,55617,55618,55620,55622,55624,55626],{"class":149,"line":17031},[147,55619,55575],{"class":157},[147,55621,353],{"class":153},[147,55623,55587],{"class":157},[147,55625,353],{"class":153},[147,55627,51580],{"class":157},[147,55629,55630,55632,55634,55636,55638],{"class":149,"line":17036},[147,55631,55575],{"class":157},[147,55633,353],{"class":153},[147,55635,55587],{"class":157},[147,55637,353],{"class":153},[147,55639,51580],{"class":157},[147,55641,55642,55644,55646,55648,55650],{"class":149,"line":17042},[147,55643,55575],{"class":157},[147,55645,353],{"class":153},[147,55647,55587],{"class":157},[147,55649,353],{"class":153},[147,55651,51580],{"class":157},[147,55653,55654,55656,55658,55660,55662],{"class":149,"line":17056},[147,55655,55575],{"class":157},[147,55657,353],{"class":153},[147,55659,55587],{"class":157},[147,55661,353],{"class":153},[147,55663,51580],{"class":157},[147,55665,55666,55668,55670,55672,55674],{"class":149,"line":17069},[147,55667,55575],{"class":157},[147,55669,353],{"class":153},[147,55671,55587],{"class":157},[147,55673,353],{"class":153},[147,55675,51580],{"class":157},[147,55677,55678,55681,55683],{"class":149,"line":17074},[147,55679,55680],{"class":157},"      \u003C\u002F",[147,55682,1406],{"class":153},[147,55684,51580],{"class":157},[147,55686,55687,55689,55691],{"class":149,"line":17088},[147,55688,52049],{"class":157},[147,55690,51884],{"class":153},[147,55692,51580],{"class":157},[147,55694,55695,55697,55699],{"class":149,"line":17093},[147,55696,52690],{"class":157},[147,55698,51884],{"class":153},[147,55700,51580],{"class":157},[147,55702,55703,55705,55707],{"class":149,"line":17099},[147,55704,52417],{"class":157},[147,55706,52086],{"class":153},[147,55708,51580],{"class":157},[147,55710,55711,55713,55716,55718],{"class":149,"line":17104},[147,55712,11495],{"class":397},[147,55714,55715],{"class":448}," arrImage",[147,55717,13838],{"class":397},[147,55719,55720],{"class":157}," [\n",[147,55722,55723,55726,55729,55732,55735,55738,55741],{"class":149,"line":17118},[147,55724,55725],{"class":157},"      { url: ",[147,55727,55728],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[147,55730,55731],{"class":157},", title: ",[147,55733,55734],{"class":504},"'对人类来说会不会太超前了?'",[147,55736,55737],{"class":157},", color: ",[147,55739,55740],{"class":504},"'rgba(100,67,68)'",[147,55742,55743],{"class":157}," },\n",[147,55745,55746,55748,55751,55753,55756,55758,55761],{"class":149,"line":17123},[147,55747,55725],{"class":157},[147,55749,55750],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[147,55752,55731],{"class":157},[147,55754,55755],{"class":504},"'开启剑与雪的黑暗传说!'",[147,55757,55737],{"class":157},[147,55759,55760],{"class":504},"'rgba(43,35,26)'",[147,55762,55743],{"class":157},[147,55764,55765,55767,55770,55772,55775,55777,55780],{"class":149,"line":17128},[147,55766,55725],{"class":157},[147,55768,55769],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[147,55771,55731],{"class":157},[147,55773,55774],{"class":504},"'真正的jo厨出现了!'",[147,55776,55737],{"class":157},[147,55778,55779],{"class":504},"'rgba(36,31,33)'",[147,55781,55743],{"class":157},[147,55783,55784,55786,55789,55791,55794,55796,55799],{"class":149,"line":17142},[147,55785,55725],{"class":157},[147,55787,55788],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[147,55790,55731],{"class":157},[147,55792,55793],{"class":504},"'李玉刚:让世界通过b站看到东方大国文化'",[147,55795,55737],{"class":157},[147,55797,55798],{"class":504},"'rgba(139,98,66)'",[147,55800,55743],{"class":157},[147,55802,55803,55805,55808,55810,55813,55815,55818],{"class":149,"line":17154},[147,55804,55725],{"class":157},[147,55806,55807],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[147,55809,55731],{"class":157},[147,55811,55812],{"class":504},"'快来分享你的寒假日常吧'",[147,55814,55737],{"class":157},[147,55816,55817],{"class":504},"'rgba(67,90,92)'",[147,55819,55743],{"class":157},[147,55821,55822,55824,55827,55829,55832,55834,55837],{"class":149,"line":17159},[147,55823,55725],{"class":157},[147,55825,55826],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[147,55828,55731],{"class":157},[147,55830,55831],{"class":504},"'哔哩哔哩小年YEAR'",[147,55833,55737],{"class":157},[147,55835,55836],{"class":504},"'rgba(166,131,143)'",[147,55838,55743],{"class":157},[147,55840,55841,55843,55846,55848,55851,55853,55856],{"class":149,"line":17172},[147,55842,55725],{"class":157},[147,55844,55845],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[147,55847,55731],{"class":157},[147,55849,55850],{"class":504},"'一站式解决你的电脑配置问题'",[147,55852,55737],{"class":157},[147,55854,55855],{"class":504},"'rgba(53,29,25)'",[147,55857,55743],{"class":157},[147,55859,55860,55862,55865,55867,55870,55872,55875],{"class":149,"line":17177},[147,55861,55725],{"class":157},[147,55863,55864],{"class":504},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[147,55866,55731],{"class":157},[147,55868,55869],{"class":504},"'谁不想和小猫咪贴贴呢?'",[147,55871,55737],{"class":157},[147,55873,55874],{"class":504},"'rgba(99,72,114)'",[147,55876,55877],{"class":157}," }\n",[147,55879,55880],{"class":149,"line":17182},[147,55881,53382],{"class":157},[147,55883,55884,55886,55889,55891,55893,55895,55897,55900],{"class":149,"line":17187},[147,55885,11495],{"class":397},[147,55887,55888],{"class":448}," img",[147,55890,13838],{"class":397},[147,55892,54669],{"class":157},[147,55894,54672],{"class":2237},[147,55896,401],{"class":157},[147,55898,55899],{"class":504},"'.slider-wrapper img'",[147,55901,407],{"class":157},[147,55903,55904,55906,55908,55910,55912,55914,55916,55919],{"class":149,"line":17200},[147,55905,11495],{"class":397},[147,55907,7099],{"class":448},[147,55909,13838],{"class":397},[147,55911,54669],{"class":157},[147,55913,54672],{"class":2237},[147,55915,401],{"class":157},[147,55917,55918],{"class":504},"'.slider-footer p'",[147,55920,407],{"class":157},[147,55922,55923,55925,55928,55930,55932,55934,55936,55939],{"class":149,"line":17205},[147,55924,11495],{"class":397},[147,55926,55927],{"class":448}," color",[147,55929,13838],{"class":397},[147,55931,54669],{"class":157},[147,55933,54672],{"class":2237},[147,55935,401],{"class":157},[147,55937,55938],{"class":504},"'.slider-footer'",[147,55940,407],{"class":157},[147,55942,55943,55945,55948,55950,55952,55955,55957,55960],{"class":149,"line":32907},[147,55944,11495],{"class":397},[147,55946,55947],{"class":448}," lis",[147,55949,13838],{"class":397},[147,55951,54669],{"class":157},[147,55953,55954],{"class":2237},"querySelectorAll",[147,55956,401],{"class":157},[147,55958,55959],{"class":504},"'.slider-footer ul li'",[147,55961,407],{"class":157},[147,55963,55964,55966,55968,55970],{"class":149,"line":32913},[147,55965,52492],{"class":397},[147,55967,9712],{"class":157},[147,55969,445],{"class":397},[147,55971,55972],{"class":448}," 1\n",[147,55974,55975,55977,55980,55982,55984,55986,55988],{"class":149,"line":32919},[147,55976,52492],{"class":397},[147,55978,55979],{"class":157}," timer ",[147,55981,445],{"class":397},[147,55983,54717],{"class":2237},[147,55985,401],{"class":157},[147,55987,54722],{"class":397},[147,55989,54725],{"class":157},[147,55991,55992,55995,55997],{"class":149,"line":32925},[147,55993,55994],{"class":157},"      img.src ",[147,55996,445],{"class":397},[147,55998,55999],{"class":157}," arrImage[i].url\n",[147,56001,56002,56005,56007],{"class":149,"line":32931},[147,56003,56004],{"class":157},"      p.innerHTML ",[147,56006,445],{"class":397},[147,56008,56009],{"class":157}," arrImage[i].title\n",[147,56011,56012,56015,56017],{"class":149,"line":32942},[147,56013,56014],{"class":157},"      color.style.backgroundColor ",[147,56016,445],{"class":397},[147,56018,56019],{"class":157}," arrImage[i].color\n",[147,56021,56022],{"class":149,"line":32948},[147,56023,56024],{"class":458},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[147,56026,56027],{"class":149,"line":32968},[147,56028,56029],{"class":458},"      \u002F\u002F li.classList.add('activate')\n",[147,56031,56032],{"class":149,"line":32974},[147,56033,56034],{"class":458},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[147,56036,56037],{"class":149,"line":32985},[147,56038,56039],{"class":458},"      \u002F\u002F lis[i].classList.remove('activate')\n",[147,56041,56042,56045,56047,56049,56052,56055,56058,56060,56063],{"class":149,"line":32991},[147,56043,56044],{"class":157},"      document.",[147,56046,54672],{"class":2237},[147,56048,401],{"class":157},[147,56050,56051],{"class":504},"'.activate'",[147,56053,56054],{"class":157},")?.classList.",[147,56056,56057],{"class":2237},"toggle",[147,56059,401],{"class":157},[147,56061,56062],{"class":504},"'activate'",[147,56064,407],{"class":157},[147,56066,56067,56070,56072,56074,56076],{"class":149,"line":32997},[147,56068,56069],{"class":157},"      lis[i].classList.",[147,56071,5608],{"class":2237},[147,56073,401],{"class":157},[147,56075,56062],{"class":504},[147,56077,407],{"class":157},[147,56079,56080],{"class":149,"line":33003},[147,56081,2674],{"emptyLinePlaceholder":324},[147,56083,56084,56087,56089,56091,56093,56095,56097,56099,56102],{"class":149,"line":33009},[147,56085,56086],{"class":157},"      i ",[147,56088,445],{"class":397},[147,56090,54756],{"class":157},[147,56092,880],{"class":397},[147,56094,25392],{"class":448},[147,56096,13988],{"class":157},[147,56098,727],{"class":397},[147,56100,56101],{"class":157}," arrImage.",[147,56103,56104],{"class":448},"length\n",[147,56106,56107],{"class":149,"line":33015},[147,56108,2674],{"emptyLinePlaceholder":324},[147,56110,56111,56113,56115],{"class":149,"line":33021},[147,56112,54808],{"class":157},[147,56114,6684],{"class":448},[147,56116,407],{"class":157},[147,56118,56119,56121,56123],{"class":149,"line":33027},[147,56120,52690],{"class":157},[147,56122,52086],{"class":153},[147,56124,51580],{"class":157},[147,56126,56127,56129,56131],{"class":149,"line":33047},[147,56128,52058],{"class":157},[147,56130,52073],{"class":153},[147,56132,51580],{"class":157},[147,56134,56135],{"class":149,"line":33053},[147,56136,2674],{"emptyLinePlaceholder":324},[147,56138,56139,56141,56143],{"class":149,"line":33069},[147,56140,52058],{"class":157},[147,56142,50909],{"class":153},[147,56144,51580],{"class":157},[19,56146,56147],{},[29,56148],{"alt":143,"src":56149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,56151,56152],{},"?.就是短路保护,确保输出正常进行",[19,56154,56155],{},"不要忘记取余%,有时候可以用",[19,56157,56158],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[350,56160,56161],{"start":312},[353,56162,56163],{},"法2",[138,56165,56167],{"className":50907,"code":56166,"language":50909,"meta":143,"style":143},"\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",[51,56168,56169,56179,56193,56197,56205,56219,56239,56251,56259,56265,56275,56285,56289,56293,56299,56309,56313,56317,56323,56333,56345,56357,56371,56375,56379,56385,56395,56405,56415,56427,56439,56449,56453,56457,56465,56475,56487,56499,56511,56515,56519,56525,56535,56547,56559,56569,56579,56589,56601,56613,56617,56621,56629,56641,56653,56679,56691,56695,56699,56705,56715,56719,56727,56735,56739,56747,56761,56775,56795,56803,56817,56829,56837,56855,56867,56879,56891,56903,56915,56927,56939,56947,56955,56963,56971,56982,56998,57014,57030,57046,57062,57078,57094,57110,57114,57119,57137,57155,57165,57170,57175,57186,57192,57207,57216,57220,57225,57234,57239,57248,57253,57258,57263,57286,57316,57320,57328,57332,57340,57348,57352],{"__ignoreMap":143},[147,56170,56171,56173,56175,56177],{"class":149,"line":150},[147,56172,51571],{"class":157},[147,56174,51574],{"class":153},[147,56176,51577],{"class":2237},[147,56178,51580],{"class":157},[147,56180,56181,56183,56185,56187,56189,56191],{"class":149,"line":312},[147,56182,1309],{"class":157},[147,56184,50909],{"class":153},[147,56186,51589],{"class":2237},[147,56188,445],{"class":157},[147,56190,51594],{"class":504},[147,56192,51580],{"class":157},[147,56194,56195],{"class":149,"line":1454},[147,56196,2674],{"emptyLinePlaceholder":324},[147,56198,56199,56201,56203],{"class":149,"line":1469},[147,56200,1309],{"class":157},[147,56202,51607],{"class":153},[147,56204,51580],{"class":157},[147,56206,56207,56209,56211,56213,56215,56217],{"class":149,"line":1475},[147,56208,52417],{"class":157},[147,56210,51617],{"class":153},[147,56212,51620],{"class":2237},[147,56214,445],{"class":157},[147,56216,51625],{"class":504},[147,56218,51580],{"class":157},[147,56220,56221,56223,56225,56227,56229,56231,56233,56235,56237],{"class":149,"line":1489},[147,56222,52417],{"class":157},[147,56224,51617],{"class":153},[147,56226,15193],{"class":2237},[147,56228,445],{"class":157},[147,56230,51664],{"class":504},[147,56232,51644],{"class":2237},[147,56234,445],{"class":157},[147,56236,51671],{"class":504},[147,56238,51580],{"class":157},[147,56240,56241,56243,56245,56247,56249],{"class":149,"line":1495},[147,56242,52417],{"class":157},[147,56244,51680],{"class":153},[147,56246,51683],{"class":157},[147,56248,51680],{"class":153},[147,56250,51580],{"class":157},[147,56252,56253,56255,56257],{"class":149,"line":1586},[147,56254,52417],{"class":157},[147,56256,308],{"class":153},[147,56258,51580],{"class":157},[147,56260,56261,56263],{"class":149,"line":1592},[147,56262,6677],{"class":153},[147,56264,15845],{"class":157},[147,56266,56267,56269,56271,56273],{"class":149,"line":1604},[147,56268,54968],{"class":448},[147,56270,51710],{"class":157},[147,56272,590],{"class":448},[147,56274,1565],{"class":157},[147,56276,56277,56279,56281,56283],{"class":149,"line":1886},[147,56278,54979],{"class":448},[147,56280,51710],{"class":157},[147,56282,590],{"class":448},[147,56284,1565],{"class":157},[147,56286,56287],{"class":149,"line":1891},[147,56288,2461],{"class":157},[147,56290,56291],{"class":149,"line":1897},[147,56292,2674],{"emptyLinePlaceholder":324},[147,56294,56295,56297],{"class":149,"line":1902},[147,56296,54998],{"class":153},[147,56298,15845],{"class":157},[147,56300,56301,56303,56305,56307],{"class":149,"line":1916},[147,56302,55005],{"class":448},[147,56304,51710],{"class":157},[147,56306,55010],{"class":448},[147,56308,1565],{"class":157},[147,56310,56311],{"class":149,"line":1921},[147,56312,2461],{"class":157},[147,56314,56315],{"class":149,"line":1927},[147,56316,2674],{"emptyLinePlaceholder":324},[147,56318,56319,56321],{"class":149,"line":1948},[147,56320,55025],{"class":2237},[147,56322,15845],{"class":157},[147,56324,56325,56327,56329,56331],{"class":149,"line":1953},[147,56326,55032],{"class":448},[147,56328,51710],{"class":157},[147,56330,55037],{"class":448},[147,56332,1565],{"class":157},[147,56334,56335,56337,56339,56341,56343],{"class":149,"line":1967},[147,56336,55044],{"class":448},[147,56338,51710],{"class":157},[147,56340,55049],{"class":448},[147,56342,51765],{"class":397},[147,56344,1565],{"class":157},[147,56346,56347,56349,56351,56353,56355],{"class":149,"line":1972},[147,56348,55058],{"class":448},[147,56350,51710],{"class":157},[147,56352,1813],{"class":448},[147,56354,51765],{"class":397},[147,56356,1565],{"class":157},[147,56358,56359,56361,56363,56365,56367,56369],{"class":149,"line":2001},[147,56360,54979],{"class":448},[147,56362,51710],{"class":157},[147,56364,710],{"class":448},[147,56366,51765],{"class":397},[147,56368,51829],{"class":448},[147,56370,1565],{"class":157},[147,56372,56373],{"class":149,"line":2006},[147,56374,2461],{"class":157},[147,56376,56377],{"class":149,"line":2023},[147,56378,2674],{"emptyLinePlaceholder":324},[147,56380,56381,56383],{"class":149,"line":2028},[147,56382,55093],{"class":2237},[147,56384,15845],{"class":157},[147,56386,56387,56389,56391,56393],{"class":149,"line":2033},[147,56388,55032],{"class":448},[147,56390,51710],{"class":157},[147,56392,55104],{"class":448},[147,56394,1565],{"class":157},[147,56396,56397,56399,56401,56403],{"class":149,"line":2038},[147,56398,55111],{"class":448},[147,56400,51710],{"class":157},[147,56402,590],{"class":448},[147,56404,1565],{"class":157},[147,56406,56407,56409,56411,56413],{"class":149,"line":2052},[147,56408,55122],{"class":448},[147,56410,51710],{"class":157},[147,56412,590],{"class":448},[147,56414,1565],{"class":157},[147,56416,56417,56419,56421,56423,56425],{"class":149,"line":2057},[147,56418,55044],{"class":448},[147,56420,51710],{"class":157},[147,56422,710],{"class":448},[147,56424,727],{"class":397},[147,56426,1565],{"class":157},[147,56428,56429,56431,56433,56435,56437],{"class":149,"line":2851},[147,56430,55058],{"class":448},[147,56432,51710],{"class":157},[147,56434,974],{"class":448},[147,56436,727],{"class":397},[147,56438,1565],{"class":157},[147,56440,56441,56443,56445,56447],{"class":149,"line":2865},[147,56442,55157],{"class":448},[147,56444,51710],{"class":157},[147,56446,55162],{"class":448},[147,56448,1565],{"class":157},[147,56450,56451],{"class":149,"line":2873},[147,56452,2461],{"class":157},[147,56454,56455],{"class":149,"line":2878},[147,56456,2674],{"emptyLinePlaceholder":324},[147,56458,56459,56461,56463],{"class":149,"line":2884},[147,56460,55093],{"class":2237},[147,56462,7099],{"class":153},[147,56464,15845],{"class":157},[147,56466,56467,56469,56471,56473],{"class":149,"line":2890},[147,56468,55032],{"class":448},[147,56470,51710],{"class":157},[147,56472,55104],{"class":448},[147,56474,1565],{"class":157},[147,56476,56477,56479,56481,56483,56485],{"class":149,"line":2895},[147,56478,55195],{"class":448},[147,56480,51710],{"class":157},[147,56482,1300],{"class":448},[147,56484,51765],{"class":397},[147,56486,1565],{"class":157},[147,56488,56489,56491,56493,56495,56497],{"class":149,"line":8222},[147,56490,55111],{"class":448},[147,56492,51710],{"class":157},[147,56494,1099],{"class":448},[147,56496,51765],{"class":397},[147,56498,1565],{"class":157},[147,56500,56501,56503,56505,56507,56509],{"class":149,"line":8246},[147,56502,55220],{"class":448},[147,56504,51710],{"class":157},[147,56506,718],{"class":448},[147,56508,51765],{"class":397},[147,56510,1565],{"class":157},[147,56512,56513],{"class":149,"line":8251},[147,56514,2461],{"class":157},[147,56516,56517],{"class":149,"line":8257},[147,56518,2674],{"emptyLinePlaceholder":324},[147,56520,56521,56523],{"class":149,"line":8284},[147,56522,55241],{"class":153},[147,56524,15845],{"class":157},[147,56526,56527,56529,56531,56533],{"class":149,"line":8289},[147,56528,55032],{"class":448},[147,56530,51710],{"class":157},[147,56532,55104],{"class":448},[147,56534,1565],{"class":157},[147,56536,56537,56539,56541,56543,56545],{"class":149,"line":8295},[147,56538,55220],{"class":448},[147,56540,51710],{"class":157},[147,56542,1180],{"class":448},[147,56544,51765],{"class":397},[147,56546,1565],{"class":157},[147,56548,56549,56551,56553,56555,56557],{"class":149,"line":8307},[147,56550,55111],{"class":448},[147,56552,51710],{"class":157},[147,56554,1099],{"class":448},[147,56556,51765],{"class":397},[147,56558,1565],{"class":157},[147,56560,56561,56563,56565,56567],{"class":149,"line":8319},[147,56562,55282],{"class":448},[147,56564,51710],{"class":157},[147,56566,51750],{"class":448},[147,56568,1565],{"class":157},[147,56570,56571,56573,56575,56577],{"class":149,"line":8331},[147,56572,55293],{"class":448},[147,56574,51710],{"class":157},[147,56576,51941],{"class":448},[147,56578,1565],{"class":157},[147,56580,56581,56583,56585,56587],{"class":149,"line":9990},[147,56582,55032],{"class":448},[147,56584,51710],{"class":157},[147,56586,55104],{"class":448},[147,56588,1565],{"class":157},[147,56590,56591,56593,56595,56597,56599],{"class":149,"line":10015},[147,56592,55044],{"class":448},[147,56594,51710],{"class":157},[147,56596,4266],{"class":448},[147,56598,51765],{"class":397},[147,56600,1565],{"class":157},[147,56602,56603,56605,56607,56609,56611],{"class":149,"line":10038},[147,56604,55058],{"class":448},[147,56606,51710],{"class":157},[147,56608,1099],{"class":448},[147,56610,51765],{"class":397},[147,56612,1565],{"class":157},[147,56614,56615],{"class":149,"line":10062},[147,56616,2461],{"class":157},[147,56618,56619],{"class":149,"line":10067},[147,56620,2674],{"emptyLinePlaceholder":324},[147,56622,56623,56625,56627],{"class":149,"line":10072},[147,56624,55241],{"class":153},[147,56626,55348],{"class":153},[147,56628,15845],{"class":157},[147,56630,56631,56633,56635,56637,56639],{"class":149,"line":10077},[147,56632,55044],{"class":448},[147,56634,51710],{"class":157},[147,56636,1099],{"class":448},[147,56638,51765],{"class":397},[147,56640,1565],{"class":157},[147,56642,56643,56645,56647,56649,56651],{"class":149,"line":10086},[147,56644,55058],{"class":448},[147,56646,51710],{"class":157},[147,56648,1099],{"class":448},[147,56650,51765],{"class":397},[147,56652,1565],{"class":157},[147,56654,56655,56657,56659,56661,56663,56665,56667,56669,56671,56673,56675,56677],{"class":149,"line":10091},[147,56656,55157],{"class":448},[147,56658,51710],{"class":157},[147,56660,55383],{"class":448},[147,56662,401],{"class":157},[147,56664,590],{"class":448},[147,56666,12709],{"class":157},[147,56668,590],{"class":448},[147,56670,12709],{"class":157},[147,56672,590],{"class":448},[147,56674,12709],{"class":157},[147,56676,55400],{"class":448},[147,56678,2993],{"class":157},[147,56680,56681,56683,56685,56687,56689],{"class":149,"line":10097},[147,56682,55407],{"class":448},[147,56684,51710],{"class":157},[147,56686,845],{"class":448},[147,56688,51765],{"class":397},[147,56690,1565],{"class":157},[147,56692,56693],{"class":149,"line":10118},[147,56694,2461],{"class":157},[147,56696,56697],{"class":149,"line":10124},[147,56698,2674],{"emptyLinePlaceholder":324},[147,56700,56701,56703],{"class":149,"line":10138},[147,56702,55428],{"class":2237},[147,56704,15845],{"class":157},[147,56706,56707,56709,56711,56713],{"class":149,"line":10144},[147,56708,55157],{"class":448},[147,56710,51710],{"class":157},[147,56712,55439],{"class":448},[147,56714,1565],{"class":157},[147,56716,56717],{"class":149,"line":10171},[147,56718,2461],{"class":157},[147,56720,56721,56723,56725],{"class":149,"line":10180},[147,56722,52690],{"class":157},[147,56724,308],{"class":153},[147,56726,51580],{"class":157},[147,56728,56729,56731,56733],{"class":149,"line":10186},[147,56730,52058],{"class":157},[147,56732,51607],{"class":153},[147,56734,51580],{"class":157},[147,56736,56737],{"class":149,"line":10194},[147,56738,2674],{"emptyLinePlaceholder":324},[147,56740,56741,56743,56745],{"class":149,"line":10199},[147,56742,1309],{"class":157},[147,56744,52073],{"class":153},[147,56746,51580],{"class":157},[147,56748,56749,56751,56753,56755,56757,56759],{"class":149,"line":16877},[147,56750,52417],{"class":157},[147,56752,51884],{"class":153},[147,56754,53759],{"class":2237},[147,56756,445],{"class":157},[147,56758,53764],{"class":504},[147,56760,51580],{"class":157},[147,56762,56763,56765,56767,56769,56771,56773],{"class":149,"line":16883},[147,56764,51614],{"class":157},[147,56766,51884],{"class":153},[147,56768,53759],{"class":2237},[147,56770,445],{"class":157},[147,56772,55500],{"class":504},[147,56774,51580],{"class":157},[147,56776,56777,56779,56781,56783,56785,56787,56789,56791,56793],{"class":149,"line":16906},[147,56778,55507],{"class":157},[147,56780,29],{"class":153},[147,56782,55512],{"class":2237},[147,56784,445],{"class":157},[147,56786,55517],{"class":504},[147,56788,55520],{"class":2237},[147,56790,445],{"class":157},[147,56792,7926],{"class":504},[147,56794,51580],{"class":157},[147,56796,56797,56799,56801],{"class":149,"line":16912},[147,56798,52049],{"class":157},[147,56800,51884],{"class":153},[147,56802,51580],{"class":157},[147,56804,56805,56807,56809,56811,56813,56815],{"class":149,"line":16935},[147,56806,51614],{"class":157},[147,56808,51884],{"class":153},[147,56810,53759],{"class":2237},[147,56812,445],{"class":157},[147,56814,55547],{"class":504},[147,56816,51580],{"class":157},[147,56818,56819,56821,56823,56825,56827],{"class":149,"line":16949},[147,56820,55507],{"class":157},[147,56822,19],{"class":153},[147,56824,55558],{"class":157},[147,56826,19],{"class":153},[147,56828,51580],{"class":157},[147,56830,56831,56833,56835],{"class":149,"line":16969},[147,56832,55507],{"class":157},[147,56834,1406],{"class":153},[147,56836,51580],{"class":157},[147,56838,56839,56841,56843,56845,56847,56849,56851,56853],{"class":149,"line":16975},[147,56840,55575],{"class":157},[147,56842,353],{"class":153},[147,56844,53759],{"class":2237},[147,56846,445],{"class":157},[147,56848,55584],{"class":504},[147,56850,55587],{"class":157},[147,56852,353],{"class":153},[147,56854,51580],{"class":157},[147,56856,56857,56859,56861,56863,56865],{"class":149,"line":16986},[147,56858,55575],{"class":157},[147,56860,353],{"class":153},[147,56862,55587],{"class":157},[147,56864,353],{"class":153},[147,56866,51580],{"class":157},[147,56868,56869,56871,56873,56875,56877],{"class":149,"line":17009},[147,56870,55575],{"class":157},[147,56872,353],{"class":153},[147,56874,55587],{"class":157},[147,56876,353],{"class":153},[147,56878,51580],{"class":157},[147,56880,56881,56883,56885,56887,56889],{"class":149,"line":17031},[147,56882,55575],{"class":157},[147,56884,353],{"class":153},[147,56886,55587],{"class":157},[147,56888,353],{"class":153},[147,56890,51580],{"class":157},[147,56892,56893,56895,56897,56899,56901],{"class":149,"line":17036},[147,56894,55575],{"class":157},[147,56896,353],{"class":153},[147,56898,55587],{"class":157},[147,56900,353],{"class":153},[147,56902,51580],{"class":157},[147,56904,56905,56907,56909,56911,56913],{"class":149,"line":17042},[147,56906,55575],{"class":157},[147,56908,353],{"class":153},[147,56910,55587],{"class":157},[147,56912,353],{"class":153},[147,56914,51580],{"class":157},[147,56916,56917,56919,56921,56923,56925],{"class":149,"line":17056},[147,56918,55575],{"class":157},[147,56920,353],{"class":153},[147,56922,55587],{"class":157},[147,56924,353],{"class":153},[147,56926,51580],{"class":157},[147,56928,56929,56931,56933,56935,56937],{"class":149,"line":17069},[147,56930,55575],{"class":157},[147,56932,353],{"class":153},[147,56934,55587],{"class":157},[147,56936,353],{"class":153},[147,56938,51580],{"class":157},[147,56940,56941,56943,56945],{"class":149,"line":17074},[147,56942,55680],{"class":157},[147,56944,1406],{"class":153},[147,56946,51580],{"class":157},[147,56948,56949,56951,56953],{"class":149,"line":17088},[147,56950,52049],{"class":157},[147,56952,51884],{"class":153},[147,56954,51580],{"class":157},[147,56956,56957,56959,56961],{"class":149,"line":17093},[147,56958,52690],{"class":157},[147,56960,51884],{"class":153},[147,56962,51580],{"class":157},[147,56964,56965,56967,56969],{"class":149,"line":17099},[147,56966,52417],{"class":157},[147,56968,52086],{"class":153},[147,56970,51580],{"class":157},[147,56972,56973,56975,56978,56980],{"class":149,"line":17104},[147,56974,11495],{"class":397},[147,56976,56977],{"class":448}," sliderData",[147,56979,13838],{"class":397},[147,56981,55720],{"class":157},[147,56983,56984,56986,56988,56990,56992,56994,56996],{"class":149,"line":17118},[147,56985,55725],{"class":157},[147,56987,55728],{"class":504},[147,56989,55731],{"class":157},[147,56991,55734],{"class":504},[147,56993,55737],{"class":157},[147,56995,55740],{"class":504},[147,56997,55743],{"class":157},[147,56999,57000,57002,57004,57006,57008,57010,57012],{"class":149,"line":17123},[147,57001,55725],{"class":157},[147,57003,55750],{"class":504},[147,57005,55731],{"class":157},[147,57007,55755],{"class":504},[147,57009,55737],{"class":157},[147,57011,55760],{"class":504},[147,57013,55743],{"class":157},[147,57015,57016,57018,57020,57022,57024,57026,57028],{"class":149,"line":17128},[147,57017,55725],{"class":157},[147,57019,55769],{"class":504},[147,57021,55731],{"class":157},[147,57023,55774],{"class":504},[147,57025,55737],{"class":157},[147,57027,55779],{"class":504},[147,57029,55743],{"class":157},[147,57031,57032,57034,57036,57038,57040,57042,57044],{"class":149,"line":17142},[147,57033,55725],{"class":157},[147,57035,55788],{"class":504},[147,57037,55731],{"class":157},[147,57039,55793],{"class":504},[147,57041,55737],{"class":157},[147,57043,55798],{"class":504},[147,57045,55743],{"class":157},[147,57047,57048,57050,57052,57054,57056,57058,57060],{"class":149,"line":17154},[147,57049,55725],{"class":157},[147,57051,55807],{"class":504},[147,57053,55731],{"class":157},[147,57055,55812],{"class":504},[147,57057,55737],{"class":157},[147,57059,55817],{"class":504},[147,57061,55743],{"class":157},[147,57063,57064,57066,57068,57070,57072,57074,57076],{"class":149,"line":17159},[147,57065,55725],{"class":157},[147,57067,55826],{"class":504},[147,57069,55731],{"class":157},[147,57071,55831],{"class":504},[147,57073,55737],{"class":157},[147,57075,55836],{"class":504},[147,57077,55743],{"class":157},[147,57079,57080,57082,57084,57086,57088,57090,57092],{"class":149,"line":17172},[147,57081,55725],{"class":157},[147,57083,55845],{"class":504},[147,57085,55731],{"class":157},[147,57087,55850],{"class":504},[147,57089,55737],{"class":157},[147,57091,55855],{"class":504},[147,57093,55743],{"class":157},[147,57095,57096,57098,57100,57102,57104,57106,57108],{"class":149,"line":17177},[147,57097,55725],{"class":157},[147,57099,55864],{"class":504},[147,57101,55731],{"class":157},[147,57103,55869],{"class":504},[147,57105,55737],{"class":157},[147,57107,55874],{"class":504},[147,57109,55877],{"class":157},[147,57111,57112],{"class":149,"line":17182},[147,57113,53382],{"class":157},[147,57115,57116],{"class":149,"line":17187},[147,57117,57118],{"class":458},"    \u002F\u002F 1.获取元素\n",[147,57120,57121,57123,57125,57127,57129,57131,57133,57135],{"class":149,"line":17200},[147,57122,11495],{"class":397},[147,57124,55888],{"class":448},[147,57126,13838],{"class":397},[147,57128,54669],{"class":157},[147,57130,54672],{"class":2237},[147,57132,401],{"class":157},[147,57134,55899],{"class":504},[147,57136,407],{"class":157},[147,57138,57139,57141,57143,57145,57147,57149,57151,57153],{"class":149,"line":17205},[147,57140,11495],{"class":397},[147,57142,7099],{"class":448},[147,57144,13838],{"class":397},[147,57146,54669],{"class":157},[147,57148,54672],{"class":2237},[147,57150,401],{"class":157},[147,57152,55918],{"class":504},[147,57154,407],{"class":157},[147,57156,57157,57159,57161,57163],{"class":149,"line":32907},[147,57158,52492],{"class":397},[147,57160,9712],{"class":157},[147,57162,445],{"class":397},[147,57164,47607],{"class":448},[147,57166,57167],{"class":149,"line":32913},[147,57168,57169],{"class":458},"    \u002F\u002F 2.开启定时器\n",[147,57171,57172],{"class":149,"line":32919},[147,57173,57174],{"class":458},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[147,57176,57177,57180,57182,57184],{"class":149,"line":32925},[147,57178,57179],{"class":2237},"    setInterval",[147,57181,401],{"class":157},[147,57183,54722],{"class":397},[147,57185,54725],{"class":157},[147,57187,57188,57190],{"class":149,"line":32931},[147,57189,54730],{"class":157},[147,57191,2976],{"class":397},[147,57193,57194,57196,57198,57200,57203,57205],{"class":149,"line":32942},[147,57195,54753],{"class":397},[147,57197,54756],{"class":157},[147,57199,1984],{"class":397},[147,57201,57202],{"class":157}," sliderData.",[147,57204,52241],{"class":448},[147,57206,12716],{"class":157},[147,57208,57209,57212,57214],{"class":149,"line":32948},[147,57210,57211],{"class":157},"        i ",[147,57213,445],{"class":397},[147,57215,47607],{"class":448},[147,57217,57218],{"class":149,"line":32968},[147,57219,52671],{"class":157},[147,57221,57222],{"class":149,"line":32974},[147,57223,57224],{"class":458},"      \u002F\u002F 更换图片路径\n",[147,57226,57227,57229,57231],{"class":149,"line":32985},[147,57228,55994],{"class":157},[147,57230,445],{"class":397},[147,57232,57233],{"class":157}," sliderData[i].url\n",[147,57235,57236],{"class":149,"line":32991},[147,57237,57238],{"class":458},"      \u002F\u002F 把文字写到p里面\n",[147,57240,57241,57243,57245],{"class":149,"line":32997},[147,57242,56004],{"class":157},[147,57244,445],{"class":397},[147,57246,57247],{"class":157}," sliderData[i].title\n",[147,57249,57250],{"class":149,"line":33003},[147,57251,57252],{"class":458},"      \u002F\u002F 小圆点\n",[147,57254,57255],{"class":149,"line":33009},[147,57256,57257],{"class":458},"      \u002F\u002F 先删除以前的active\n",[147,57259,57260],{"class":149,"line":33015},[147,57261,57262],{"class":458},"      \u002F\u002F 只让当前li添加active\n",[147,57264,57265,57267,57269,57271,57274,57277,57280,57282,57284],{"class":149,"line":33021},[147,57266,56044],{"class":157},[147,57268,54672],{"class":2237},[147,57270,401],{"class":157},[147,57272,57273],{"class":504},"'.slider-footer .activate'",[147,57275,57276],{"class":157},").classList.",[147,57278,57279],{"class":2237},"remove",[147,57281,401],{"class":157},[147,57283,56062],{"class":504},[147,57285,407],{"class":157},[147,57287,57288,57290,57292,57294,57297,57299,57301,57303,57306,57308,57310,57312,57314],{"class":149,"line":33027},[147,57289,56044],{"class":157},[147,57291,54672],{"class":2237},[147,57293,401],{"class":157},[147,57295,57296],{"class":504},"`.slider-footer ul li:nth-child(${",[147,57298,840],{"class":157},[147,57300,45840],{"class":397},[147,57302,25392],{"class":448},[147,57304,57305],{"class":504},"})`",[147,57307,57276],{"class":157},[147,57309,5608],{"class":2237},[147,57311,401],{"class":157},[147,57313,56062],{"class":504},[147,57315,407],{"class":157},[147,57317,57318],{"class":149,"line":33047},[147,57319,2674],{"emptyLinePlaceholder":324},[147,57321,57322,57324,57326],{"class":149,"line":33053},[147,57323,54808],{"class":157},[147,57325,6684],{"class":448},[147,57327,407],{"class":157},[147,57329,57330],{"class":149,"line":33069},[147,57331,2674],{"emptyLinePlaceholder":324},[147,57333,57334,57336,57338],{"class":149,"line":33075},[147,57335,52690],{"class":157},[147,57337,52086],{"class":153},[147,57339,51580],{"class":157},[147,57341,57342,57344,57346],{"class":149,"line":33089},[147,57343,52058],{"class":157},[147,57345,52073],{"class":153},[147,57347,51580],{"class":157},[147,57349,57350],{"class":149,"line":33095},[147,57351,2674],{"emptyLinePlaceholder":324},[147,57353,57354,57356,57358],{"class":149,"line":33110},[147,57355,52058],{"class":157},[147,57357,50909],{"class":153},[147,57359,51580],{"class":157},[367,57361,57363],{"id":57362},"_317-重要知识点","3.1.7 重要知识点",[19,57365,57366,57367],{},"浏览器在渲染文本时， ",[234,57368,57369],{},"没有空格或换行符就没有“断行点”",[19,57371,57372],{},[29,57373],{"alt":143,"src":57374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,57376,57377],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,57379,57380],{},[29,57381],{"alt":143,"src":57382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,57384,57385],{},[29,57386],{"alt":143,"src":57387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,57389,57391],{"id":57390},"_32-dom事件基础","3.2 DOM事件基础",[367,57393,57395],{"id":57394},"_321-事件监听","3.2.1 事件监听",[19,57397,57398],{},[29,57399],{"alt":143,"src":57400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,57402,57403],{},"事件监听有响应的发生",[19,57405,57406],{},[29,57407],{"alt":143,"src":57408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,57410,57411],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,57413,57414],{},"对于有名函数,要执行的函数名后边不要加()",[367,57416,57418],{"id":57417},"_322-随机点名案例","3.2.2 随机点名案例",[138,57420,57422],{"className":50907,"code":57421,"language":50909,"meta":143,"style":143},"\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",[51,57423,57424,57434,57448,57452,57460,57474,57494,57506,57514,57520,57530,57540,57544,57548,57555,57566,57570,57574,57580,57592,57606,57616,57628,57641,57645,57649,57656,57660,57673,57685,57697,57701,57705,57709,57716,57726,57730,57734,57743,57755,57767,57782,57786,57794,57802,57806,57814,57827,57841,57854,57874,57882,57897,57917,57937,57945,57949,57957,57962,57998,58018,58023,58042,58047,58058,58063,58074,58079,58098,58113,58118,58144,58154,58163,58168,58184,58189,58194,58199,58214,58218,58222,58227,58246,58263,58271,58276,58291,58295,58299,58307,58315,58319],{"__ignoreMap":143},[147,57425,57426,57428,57430,57432],{"class":149,"line":150},[147,57427,51571],{"class":157},[147,57429,51574],{"class":153},[147,57431,51577],{"class":2237},[147,57433,51580],{"class":157},[147,57435,57436,57438,57440,57442,57444,57446],{"class":149,"line":312},[147,57437,1309],{"class":157},[147,57439,50909],{"class":153},[147,57441,51589],{"class":2237},[147,57443,445],{"class":157},[147,57445,51594],{"class":504},[147,57447,51580],{"class":157},[147,57449,57450],{"class":149,"line":1454},[147,57451,2674],{"emptyLinePlaceholder":324},[147,57453,57454,57456,57458],{"class":149,"line":1469},[147,57455,1309],{"class":157},[147,57457,51607],{"class":153},[147,57459,51580],{"class":157},[147,57461,57462,57464,57466,57468,57470,57472],{"class":149,"line":1475},[147,57463,52417],{"class":157},[147,57465,51617],{"class":153},[147,57467,51620],{"class":2237},[147,57469,445],{"class":157},[147,57471,51625],{"class":504},[147,57473,51580],{"class":157},[147,57475,57476,57478,57480,57482,57484,57486,57488,57490,57492],{"class":149,"line":1489},[147,57477,52417],{"class":157},[147,57479,51617],{"class":153},[147,57481,15193],{"class":2237},[147,57483,445],{"class":157},[147,57485,51664],{"class":504},[147,57487,51644],{"class":2237},[147,57489,445],{"class":157},[147,57491,51671],{"class":504},[147,57493,51580],{"class":157},[147,57495,57496,57498,57500,57502,57504],{"class":149,"line":1495},[147,57497,52417],{"class":157},[147,57499,51680],{"class":153},[147,57501,51683],{"class":157},[147,57503,51680],{"class":153},[147,57505,51580],{"class":157},[147,57507,57508,57510,57512],{"class":149,"line":1586},[147,57509,52417],{"class":157},[147,57511,308],{"class":153},[147,57513,51580],{"class":157},[147,57515,57516,57518],{"class":149,"line":1592},[147,57517,6677],{"class":153},[147,57519,15845],{"class":157},[147,57521,57522,57524,57526,57528],{"class":149,"line":1604},[147,57523,54979],{"class":448},[147,57525,51710],{"class":157},[147,57527,590],{"class":448},[147,57529,1565],{"class":157},[147,57531,57532,57534,57536,57538],{"class":149,"line":1886},[147,57533,54968],{"class":448},[147,57535,51710],{"class":157},[147,57537,590],{"class":448},[147,57539,1565],{"class":157},[147,57541,57542],{"class":149,"line":1891},[147,57543,2461],{"class":157},[147,57545,57546],{"class":149,"line":1897},[147,57547,2674],{"emptyLinePlaceholder":324},[147,57549,57550,57553],{"class":149,"line":1902},[147,57551,57552],{"class":153},"    h2",[147,57554,15845],{"class":157},[147,57556,57557,57560,57562,57564],{"class":149,"line":1916},[147,57558,57559],{"class":448},"      text-align",[147,57561,51710],{"class":157},[147,57563,51865],{"class":448},[147,57565,1565],{"class":157},[147,57567,57568],{"class":149,"line":1921},[147,57569,2461],{"class":157},[147,57571,57572],{"class":149,"line":1927},[147,57573,2674],{"emptyLinePlaceholder":324},[147,57575,57576,57578],{"class":149,"line":1948},[147,57577,55025],{"class":2237},[147,57579,15845],{"class":157},[147,57581,57582,57584,57586,57588,57590],{"class":149,"line":1953},[147,57583,55044],{"class":448},[147,57585,51710],{"class":157},[147,57587,1813],{"class":448},[147,57589,51765],{"class":397},[147,57591,1565],{"class":157},[147,57593,57594,57596,57598,57600,57602,57604],{"class":149,"line":1967},[147,57595,54979],{"class":448},[147,57597,51710],{"class":157},[147,57599,1055],{"class":448},[147,57601,51765],{"class":397},[147,57603,51829],{"class":448},[147,57605,1565],{"class":157},[147,57607,57608,57610,57612,57614],{"class":149,"line":1972},[147,57609,55282],{"class":448},[147,57611,51710],{"class":157},[147,57613,51750],{"class":448},[147,57615,1565],{"class":157},[147,57617,57618,57620,57622,57624,57626],{"class":149,"line":2001},[147,57619,55195],{"class":448},[147,57621,51710],{"class":157},[147,57623,1224],{"class":448},[147,57625,51765],{"class":397},[147,57627,1565],{"class":157},[147,57629,57630,57633,57635,57637,57639],{"class":149,"line":2006},[147,57631,57632],{"class":448},"      line-height",[147,57634,51710],{"class":157},[147,57636,800],{"class":448},[147,57638,51765],{"class":397},[147,57640,1565],{"class":157},[147,57642,57643],{"class":149,"line":2023},[147,57644,2461],{"class":157},[147,57646,57647],{"class":149,"line":2028},[147,57648,2674],{"emptyLinePlaceholder":324},[147,57650,57651,57654],{"class":149,"line":2033},[147,57652,57653],{"class":2237},"    .qs",[147,57655,15845],{"class":157},[147,57657,57658],{"class":149,"line":2038},[147,57659,2674],{"emptyLinePlaceholder":324},[147,57661,57662,57664,57666,57669,57671],{"class":149,"line":2052},[147,57663,55044],{"class":448},[147,57665,51710],{"class":157},[147,57667,57668],{"class":448},"450",[147,57670,51765],{"class":397},[147,57672,1565],{"class":157},[147,57674,57675,57677,57679,57681,57683],{"class":149,"line":2057},[147,57676,55058],{"class":448},[147,57678,51710],{"class":157},[147,57680,800],{"class":448},[147,57682,51765],{"class":397},[147,57684,1565],{"class":157},[147,57686,57687,57690,57692,57695],{"class":149,"line":2851},[147,57688,57689],{"class":448},"      color",[147,57691,51710],{"class":157},[147,57693,57694],{"class":448},"red",[147,57696,1565],{"class":157},[147,57698,57699],{"class":149,"line":2865},[147,57700,2674],{"emptyLinePlaceholder":324},[147,57702,57703],{"class":149,"line":2873},[147,57704,2461],{"class":157},[147,57706,57707],{"class":149,"line":2878},[147,57708,2674],{"emptyLinePlaceholder":324},[147,57710,57711,57714],{"class":149,"line":2884},[147,57712,57713],{"class":2237},"    .btns",[147,57715,15845],{"class":157},[147,57717,57718,57720,57722,57724],{"class":149,"line":2890},[147,57719,57559],{"class":448},[147,57721,51710],{"class":157},[147,57723,51865],{"class":448},[147,57725,1565],{"class":157},[147,57727,57728],{"class":149,"line":2895},[147,57729,2461],{"class":157},[147,57731,57732],{"class":149,"line":8222},[147,57733,2674],{"emptyLinePlaceholder":324},[147,57735,57736,57738,57741],{"class":149,"line":8246},[147,57737,57713],{"class":2237},[147,57739,57740],{"class":153}," button",[147,57742,15845],{"class":157},[147,57744,57745,57747,57749,57751,57753],{"class":149,"line":8251},[147,57746,55044],{"class":448},[147,57748,51710],{"class":157},[147,57750,1216],{"class":448},[147,57752,51765],{"class":397},[147,57754,1565],{"class":157},[147,57756,57757,57759,57761,57763,57765],{"class":149,"line":8257},[147,57758,55058],{"class":448},[147,57760,51710],{"class":157},[147,57762,672],{"class":448},[147,57764,51765],{"class":397},[147,57766,1565],{"class":157},[147,57768,57769,57771,57773,57775,57778,57780],{"class":149,"line":8284},[147,57770,54979],{"class":448},[147,57772,51710],{"class":157},[147,57774,590],{"class":448},[147,57776,57777],{"class":448}," 50",[147,57779,51765],{"class":397},[147,57781,1565],{"class":157},[147,57783,57784],{"class":149,"line":8289},[147,57785,2461],{"class":157},[147,57787,57788,57790,57792],{"class":149,"line":8295},[147,57789,52690],{"class":157},[147,57791,308],{"class":153},[147,57793,51580],{"class":157},[147,57795,57796,57798,57800],{"class":149,"line":8307},[147,57797,52058],{"class":157},[147,57799,51607],{"class":153},[147,57801,51580],{"class":157},[147,57803,57804],{"class":149,"line":8319},[147,57805,2674],{"emptyLinePlaceholder":324},[147,57807,57808,57810,57812],{"class":149,"line":8331},[147,57809,1309],{"class":157},[147,57811,52073],{"class":153},[147,57813,51580],{"class":157},[147,57815,57816,57818,57820,57823,57825],{"class":149,"line":9990},[147,57817,52417],{"class":157},[147,57819,14],{"class":153},[147,57821,57822],{"class":157},">随机点名\u003C\u002F",[147,57824,14],{"class":153},[147,57826,51580],{"class":157},[147,57828,57829,57831,57833,57835,57837,57839],{"class":149,"line":10015},[147,57830,52417],{"class":157},[147,57832,51884],{"class":153},[147,57834,53759],{"class":2237},[147,57836,445],{"class":157},[147,57838,53764],{"class":504},[147,57840,51580],{"class":157},[147,57842,57843,57845,57847,57850,57852],{"class":149,"line":10038},[147,57844,51614],{"class":157},[147,57846,147],{"class":153},[147,57848,57849],{"class":157},">名字是：\u003C\u002F",[147,57851,147],{"class":153},[147,57853,51580],{"class":157},[147,57855,57856,57858,57860,57862,57864,57867,57870,57872],{"class":149,"line":10062},[147,57857,51614],{"class":157},[147,57859,51884],{"class":153},[147,57861,53759],{"class":2237},[147,57863,445],{"class":157},[147,57865,57866],{"class":504},"\"qs\"",[147,57868,57869],{"class":157},">这里显示姓名\u003C\u002F",[147,57871,51884],{"class":153},[147,57873,51580],{"class":157},[147,57875,57876,57878,57880],{"class":149,"line":10067},[147,57877,52690],{"class":157},[147,57879,51884],{"class":153},[147,57881,51580],{"class":157},[147,57883,57884,57886,57888,57890,57892,57895],{"class":149,"line":10072},[147,57885,52417],{"class":157},[147,57887,51884],{"class":153},[147,57889,53759],{"class":2237},[147,57891,445],{"class":157},[147,57893,57894],{"class":504},"\"btns\"",[147,57896,51580],{"class":157},[147,57898,57899,57901,57903,57905,57907,57910,57913,57915],{"class":149,"line":10077},[147,57900,51614],{"class":157},[147,57902,54160],{"class":153},[147,57904,53759],{"class":2237},[147,57906,445],{"class":157},[147,57908,57909],{"class":504},"\"start\"",[147,57911,57912],{"class":157},">开始\u003C\u002F",[147,57914,54160],{"class":153},[147,57916,51580],{"class":157},[147,57918,57919,57921,57923,57925,57927,57930,57933,57935],{"class":149,"line":10086},[147,57920,51614],{"class":157},[147,57922,54160],{"class":153},[147,57924,53759],{"class":2237},[147,57926,445],{"class":157},[147,57928,57929],{"class":504},"\"end\"",[147,57931,57932],{"class":157},">结束\u003C\u002F",[147,57934,54160],{"class":153},[147,57936,51580],{"class":157},[147,57938,57939,57941,57943],{"class":149,"line":10091},[147,57940,52690],{"class":157},[147,57942,51884],{"class":153},[147,57944,51580],{"class":157},[147,57946,57947],{"class":149,"line":10097},[147,57948,2674],{"emptyLinePlaceholder":324},[147,57950,57951,57953,57955],{"class":149,"line":10118},[147,57952,52417],{"class":157},[147,57954,52086],{"class":153},[147,57956,51580],{"class":157},[147,57958,57959],{"class":149,"line":10124},[147,57960,57961],{"class":458},"    \u002F\u002F 数据数组\n",[147,57963,57964,57966,57969,57971,57973,57976,57978,57981,57983,57986,57988,57991,57993,57996],{"class":149,"line":10138},[147,57965,11495],{"class":397},[147,57967,57968],{"class":448}," arr",[147,57970,13838],{"class":397},[147,57972,52499],{"class":157},[147,57974,57975],{"class":504},"'马超'",[147,57977,12709],{"class":157},[147,57979,57980],{"class":504},"'黄忠'",[147,57982,12709],{"class":157},[147,57984,57985],{"class":504},"'赵云'",[147,57987,12709],{"class":157},[147,57989,57990],{"class":504},"'关羽'",[147,57992,12709],{"class":157},[147,57994,57995],{"class":504},"'张飞'",[147,57997,33520],{"class":157},[147,57999,58000,58002,58005,58007,58009,58011,58013,58016],{"class":149,"line":10144},[147,58001,11495],{"class":397},[147,58003,58004],{"class":448}," qs",[147,58006,13838],{"class":397},[147,58008,54669],{"class":157},[147,58010,54672],{"class":2237},[147,58012,401],{"class":157},[147,58014,58015],{"class":504},"'.qs'",[147,58017,407],{"class":157},[147,58019,58020],{"class":149,"line":10171},[147,58021,58022],{"class":458},"    \u002F\u002F 1.业务1.开始按钮模块\n",[147,58024,58025,58027,58029,58031,58033,58035,58037,58040],{"class":149,"line":10180},[147,58026,11495],{"class":397},[147,58028,4458],{"class":448},[147,58030,13838],{"class":397},[147,58032,54669],{"class":157},[147,58034,54672],{"class":2237},[147,58036,401],{"class":157},[147,58038,58039],{"class":504},"'.start'",[147,58041,407],{"class":157},[147,58043,58044],{"class":149,"line":10186},[147,58045,58046],{"class":458},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[147,58048,58049,58051,58054,58056],{"class":149,"line":10194},[147,58050,52492],{"class":397},[147,58052,58053],{"class":157}," timerId ",[147,58055,445],{"class":397},[147,58057,47607],{"class":448},[147,58059,58060],{"class":149,"line":10199},[147,58061,58062],{"class":458},"    \u002F\u002F 随机号要全局变量\n",[147,58064,58065,58067,58070,58072],{"class":149,"line":16877},[147,58066,52492],{"class":397},[147,58068,58069],{"class":157}," random ",[147,58071,445],{"class":397},[147,58073,47607],{"class":448},[147,58075,58076],{"class":149,"line":16883},[147,58077,58078],{"class":458},"    \u002F\u002F 1.1 添加点击事件\n",[147,58080,58081,58084,58087,58089,58092,58094,58096],{"class":149,"line":16906},[147,58082,58083],{"class":157},"    start.",[147,58085,58086],{"class":2237},"addEventListener",[147,58088,401],{"class":157},[147,58090,58091],{"class":504},"'click'",[147,58093,12709],{"class":157},[147,58095,54722],{"class":397},[147,58097,54725],{"class":157},[147,58099,58100,58103,58105,58107,58109,58111],{"class":149,"line":16912},[147,58101,58102],{"class":157},"      timerId ",[147,58104,445],{"class":397},[147,58106,54717],{"class":2237},[147,58108,401],{"class":157},[147,58110,54722],{"class":397},[147,58112,54725],{"class":157},[147,58114,58115],{"class":149,"line":16935},[147,58116,58117],{"class":458},"        \u002F\u002F 随机数\n",[147,58119,58120,58123,58125,58128,58131,58134,58136,58138,58140,58142],{"class":149,"line":16949},[147,58121,58122],{"class":157},"        random ",[147,58124,445],{"class":397},[147,58126,58127],{"class":2237}," parseInt",[147,58129,58130],{"class":157},"(Math.",[147,58132,58133],{"class":2237},"random",[147,58135,13324],{"class":157},[147,58137,854],{"class":397},[147,58139,52238],{"class":157},[147,58141,52241],{"class":448},[147,58143,407],{"class":157},[147,58145,58146,58149,58151],{"class":149,"line":16969},[147,58147,58148],{"class":157},"        qs.innerHTML ",[147,58150,445],{"class":397},[147,58152,58153],{"class":157}," arr[random]\n",[147,58155,58156,58159,58161],{"class":149,"line":16975},[147,58157,58158],{"class":157},"      }, ",[147,58160,672],{"class":448},[147,58162,407],{"class":157},[147,58164,58165],{"class":149,"line":16986},[147,58166,58167],{"class":458},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[147,58169,58170,58172,58175,58177,58180,58182],{"class":149,"line":17009},[147,58171,54753],{"class":397},[147,58173,58174],{"class":157}," (arr.",[147,58176,52241],{"class":448},[147,58178,58179],{"class":397}," ===",[147,58181,25392],{"class":448},[147,58183,12716],{"class":157},[147,58185,58186],{"class":149,"line":17031},[147,58187,58188],{"class":458},"        \u002F\u002F start.disabled = true\n",[147,58190,58191],{"class":149,"line":17036},[147,58192,58193],{"class":458},"        \u002F\u002F end.disabled = true\n",[147,58195,58196],{"class":149,"line":17042},[147,58197,58198],{"class":458},"        \u002F\u002F 可以合起来写\n",[147,58200,58201,58204,58206,58209,58211],{"class":149,"line":17056},[147,58202,58203],{"class":157},"        start.disabled ",[147,58205,445],{"class":397},[147,58207,58208],{"class":157}," end.disabled ",[147,58210,445],{"class":397},[147,58212,58213],{"class":448}," true\n",[147,58215,58216],{"class":149,"line":17069},[147,58217,52671],{"class":157},[147,58219,58220],{"class":149,"line":17074},[147,58221,33735],{"class":157},[147,58223,58224],{"class":149,"line":17088},[147,58225,58226],{"class":458},"    \u002F\u002F 1.2 关闭按钮模块\n",[147,58228,58229,58231,58233,58235,58237,58239,58241,58244],{"class":149,"line":17093},[147,58230,11495],{"class":397},[147,58232,4474],{"class":448},[147,58234,13838],{"class":397},[147,58236,54669],{"class":157},[147,58238,54672],{"class":2237},[147,58240,401],{"class":157},[147,58242,58243],{"class":504},"'.end'",[147,58245,407],{"class":157},[147,58247,58248,58251,58253,58255,58257,58259,58261],{"class":149,"line":17099},[147,58249,58250],{"class":157},"    end.",[147,58252,58086],{"class":2237},[147,58254,401],{"class":157},[147,58256,58091],{"class":504},[147,58258,12709],{"class":157},[147,58260,54722],{"class":397},[147,58262,54725],{"class":157},[147,58264,58265,58268],{"class":149,"line":17104},[147,58266,58267],{"class":2237},"      clearInterval",[147,58269,58270],{"class":157},"(timerId)\n",[147,58272,58273],{"class":149,"line":17118},[147,58274,58275],{"class":458},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[147,58277,58278,58281,58284,58287,58289],{"class":149,"line":17123},[147,58279,58280],{"class":157},"      arr.",[147,58282,58283],{"class":2237},"splice",[147,58285,58286],{"class":157},"(random, ",[147,58288,616],{"class":448},[147,58290,407],{"class":157},[147,58292,58293],{"class":149,"line":17128},[147,58294,33735],{"class":157},[147,58296,58297],{"class":149,"line":17142},[147,58298,2674],{"emptyLinePlaceholder":324},[147,58300,58301,58303,58305],{"class":149,"line":17154},[147,58302,52690],{"class":157},[147,58304,52086],{"class":153},[147,58306,51580],{"class":157},[147,58308,58309,58311,58313],{"class":149,"line":17159},[147,58310,52058],{"class":157},[147,58312,52073],{"class":153},[147,58314,51580],{"class":157},[147,58316,58317],{"class":149,"line":17172},[147,58318,2674],{"emptyLinePlaceholder":324},[147,58320,58321,58323,58325],{"class":149,"line":17177},[147,58322,52058],{"class":157},[147,58324,50909],{"class":153},[147,58326,51580],{"class":157},[19,58328,58329],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[367,58331,58333],{"id":58332},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[138,58335,58337],{"className":50907,"code":58336,"language":50909,"meta":143,"style":143},"\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",[51,58338,58339,58349,58363,58367,58375,58389,58409,58421,58429,58433,58441,58453,58461,58480,58497,58513,58523,58527,58535,58543,58547],{"__ignoreMap":143},[147,58340,58341,58343,58345,58347],{"class":149,"line":150},[147,58342,51571],{"class":157},[147,58344,51574],{"class":153},[147,58346,51577],{"class":2237},[147,58348,51580],{"class":157},[147,58350,58351,58353,58355,58357,58359,58361],{"class":149,"line":312},[147,58352,1309],{"class":157},[147,58354,50909],{"class":153},[147,58356,51589],{"class":2237},[147,58358,445],{"class":157},[147,58360,51594],{"class":504},[147,58362,51580],{"class":157},[147,58364,58365],{"class":149,"line":1454},[147,58366,2674],{"emptyLinePlaceholder":324},[147,58368,58369,58371,58373],{"class":149,"line":1469},[147,58370,1309],{"class":157},[147,58372,51607],{"class":153},[147,58374,51580],{"class":157},[147,58376,58377,58379,58381,58383,58385,58387],{"class":149,"line":1475},[147,58378,52417],{"class":157},[147,58380,51617],{"class":153},[147,58382,51620],{"class":2237},[147,58384,445],{"class":157},[147,58386,51625],{"class":504},[147,58388,51580],{"class":157},[147,58390,58391,58393,58395,58397,58399,58401,58403,58405,58407],{"class":149,"line":1489},[147,58392,52417],{"class":157},[147,58394,51617],{"class":153},[147,58396,15193],{"class":2237},[147,58398,445],{"class":157},[147,58400,51664],{"class":504},[147,58402,51644],{"class":2237},[147,58404,445],{"class":157},[147,58406,51671],{"class":504},[147,58408,51580],{"class":157},[147,58410,58411,58413,58415,58417,58419],{"class":149,"line":1495},[147,58412,52417],{"class":157},[147,58414,51680],{"class":153},[147,58416,51683],{"class":157},[147,58418,51680],{"class":153},[147,58420,51580],{"class":157},[147,58422,58423,58425,58427],{"class":149,"line":1586},[147,58424,52058],{"class":157},[147,58426,51607],{"class":153},[147,58428,51580],{"class":157},[147,58430,58431],{"class":149,"line":1592},[147,58432,2674],{"emptyLinePlaceholder":324},[147,58434,58435,58437,58439],{"class":149,"line":1604},[147,58436,1309],{"class":157},[147,58438,52073],{"class":153},[147,58440,51580],{"class":157},[147,58442,58443,58445,58447,58449,58451],{"class":149,"line":1886},[147,58444,52417],{"class":157},[147,58446,54160],{"class":153},[147,58448,54166],{"class":157},[147,58450,54160],{"class":153},[147,58452,51580],{"class":157},[147,58454,58455,58457,58459],{"class":149,"line":1891},[147,58456,52417],{"class":157},[147,58458,52086],{"class":153},[147,58460,51580],{"class":157},[147,58462,58463,58465,58467,58469,58471,58473,58475,58478],{"class":149,"line":1897},[147,58464,11495],{"class":397},[147,58466,54664],{"class":448},[147,58468,13838],{"class":397},[147,58470,54669],{"class":157},[147,58472,54672],{"class":2237},[147,58474,401],{"class":157},[147,58476,58477],{"class":504},"'button'",[147,58479,407],{"class":157},[147,58481,58482,58485,58487,58489,58491,58493,58495],{"class":149,"line":1902},[147,58483,58484],{"class":157},"    btn.",[147,58486,58086],{"class":2237},[147,58488,401],{"class":157},[147,58490,58091],{"class":504},[147,58492,12709],{"class":157},[147,58494,54722],{"class":397},[147,58496,54725],{"class":157},[147,58498,58499,58502,58504,58506,58509,58511],{"class":149,"line":1916},[147,58500,58501],{"class":397},"      const",[147,58503,2514],{"class":448},[147,58505,13838],{"class":397},[147,58507,58508],{"class":157}," Math.",[147,58510,58133],{"class":2237},[147,58512,2250],{"class":157},[147,58514,58515,58518,58521],{"class":149,"line":1921},[147,58516,58517],{"class":157},"      console.",[147,58519,58520],{"class":2237},"log",[147,58522,414],{"class":157},[147,58524,58525],{"class":149,"line":1927},[147,58526,33735],{"class":157},[147,58528,58529,58531,58533],{"class":149,"line":1948},[147,58530,52690],{"class":157},[147,58532,52086],{"class":153},[147,58534,51580],{"class":157},[147,58536,58537,58539,58541],{"class":149,"line":1953},[147,58538,52058],{"class":157},[147,58540,52073],{"class":153},[147,58542,51580],{"class":157},[147,58544,58545],{"class":149,"line":1967},[147,58546,2674],{"emptyLinePlaceholder":324},[147,58548,58549,58551,58553],{"class":149,"line":1972},[147,58550,52058],{"class":157},[147,58552,50909],{"class":153},[147,58554,51580],{"class":157},[19,58556,58557],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,58559,58560],{},"常量不可以重新赋值",[19,58562,58563],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[138,58565,58567],{"className":50907,"code":58566,"language":50909,"meta":143,"style":143},"\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",[51,58568,58569,58579,58593,58597,58605,58619,58639,58651,58659,58663,58671,58683,58691,58702,58720,58736,58750,58758,58762,58770,58778,58782],{"__ignoreMap":143},[147,58570,58571,58573,58575,58577],{"class":149,"line":150},[147,58572,51571],{"class":157},[147,58574,51574],{"class":153},[147,58576,51577],{"class":2237},[147,58578,51580],{"class":157},[147,58580,58581,58583,58585,58587,58589,58591],{"class":149,"line":312},[147,58582,1309],{"class":157},[147,58584,50909],{"class":153},[147,58586,51589],{"class":2237},[147,58588,445],{"class":157},[147,58590,51594],{"class":504},[147,58592,51580],{"class":157},[147,58594,58595],{"class":149,"line":1454},[147,58596,2674],{"emptyLinePlaceholder":324},[147,58598,58599,58601,58603],{"class":149,"line":1469},[147,58600,1309],{"class":157},[147,58602,51607],{"class":153},[147,58604,51580],{"class":157},[147,58606,58607,58609,58611,58613,58615,58617],{"class":149,"line":1475},[147,58608,52417],{"class":157},[147,58610,51617],{"class":153},[147,58612,51620],{"class":2237},[147,58614,445],{"class":157},[147,58616,51625],{"class":504},[147,58618,51580],{"class":157},[147,58620,58621,58623,58625,58627,58629,58631,58633,58635,58637],{"class":149,"line":1489},[147,58622,52417],{"class":157},[147,58624,51617],{"class":153},[147,58626,15193],{"class":2237},[147,58628,445],{"class":157},[147,58630,51664],{"class":504},[147,58632,51644],{"class":2237},[147,58634,445],{"class":157},[147,58636,51671],{"class":504},[147,58638,51580],{"class":157},[147,58640,58641,58643,58645,58647,58649],{"class":149,"line":1495},[147,58642,52417],{"class":157},[147,58644,51680],{"class":153},[147,58646,51683],{"class":157},[147,58648,51680],{"class":153},[147,58650,51580],{"class":157},[147,58652,58653,58655,58657],{"class":149,"line":1586},[147,58654,52058],{"class":157},[147,58656,51607],{"class":153},[147,58658,51580],{"class":157},[147,58660,58661],{"class":149,"line":1592},[147,58662,2674],{"emptyLinePlaceholder":324},[147,58664,58665,58667,58669],{"class":149,"line":1604},[147,58666,1309],{"class":157},[147,58668,52073],{"class":153},[147,58670,51580],{"class":157},[147,58672,58673,58675,58677,58679,58681],{"class":149,"line":1886},[147,58674,52417],{"class":157},[147,58676,54160],{"class":153},[147,58678,54166],{"class":157},[147,58680,54160],{"class":153},[147,58682,51580],{"class":157},[147,58684,58685,58687,58689],{"class":149,"line":1891},[147,58686,52417],{"class":157},[147,58688,52086],{"class":153},[147,58690,51580],{"class":157},[147,58692,58693,58695,58697,58699],{"class":149,"line":1897},[147,58694,11495],{"class":397},[147,58696,2514],{"class":448},[147,58698,13838],{"class":397},[147,58700,58701],{"class":448}," 10\n",[147,58703,58704,58706,58708,58710,58712,58714,58716,58718],{"class":149,"line":1902},[147,58705,11495],{"class":397},[147,58707,54664],{"class":448},[147,58709,13838],{"class":397},[147,58711,54669],{"class":157},[147,58713,54672],{"class":2237},[147,58715,401],{"class":157},[147,58717,58477],{"class":504},[147,58719,407],{"class":157},[147,58721,58722,58724,58726,58728,58730,58732,58734],{"class":149,"line":1916},[147,58723,58484],{"class":157},[147,58725,58086],{"class":2237},[147,58727,401],{"class":157},[147,58729,58091],{"class":504},[147,58731,12709],{"class":157},[147,58733,54722],{"class":397},[147,58735,54725],{"class":157},[147,58737,58738,58740,58742,58744,58746,58748],{"class":149,"line":1921},[147,58739,58501],{"class":397},[147,58741,2514],{"class":448},[147,58743,13838],{"class":397},[147,58745,58508],{"class":157},[147,58747,58133],{"class":2237},[147,58749,2250],{"class":157},[147,58751,58752,58754,58756],{"class":149,"line":1927},[147,58753,58517],{"class":157},[147,58755,58520],{"class":2237},[147,58757,414],{"class":157},[147,58759,58760],{"class":149,"line":1948},[147,58761,33735],{"class":157},[147,58763,58764,58766,58768],{"class":149,"line":1953},[147,58765,52690],{"class":157},[147,58767,52086],{"class":153},[147,58769,51580],{"class":157},[147,58771,58772,58774,58776],{"class":149,"line":1967},[147,58773,52058],{"class":157},[147,58775,52073],{"class":153},[147,58777,51580],{"class":157},[147,58779,58780],{"class":149,"line":1972},[147,58781,2674],{"emptyLinePlaceholder":324},[147,58783,58784,58786,58788],{"class":149,"line":2001},[147,58785,52058],{"class":157},[147,58787,50909],{"class":153},[147,58789,51580],{"class":157},[19,58791,58792],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[138,58794,58796],{"className":50907,"code":58795,"language":50909,"meta":143,"style":143},"\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",[51,58797,58798,58808,58822,58826,58834,58848,58868,58880,58888,58892,58900,58912,58920,58930,58948,58964,58977,58985,58989,58997,59005,59009],{"__ignoreMap":143},[147,58799,58800,58802,58804,58806],{"class":149,"line":150},[147,58801,51571],{"class":157},[147,58803,51574],{"class":153},[147,58805,51577],{"class":2237},[147,58807,51580],{"class":157},[147,58809,58810,58812,58814,58816,58818,58820],{"class":149,"line":312},[147,58811,1309],{"class":157},[147,58813,50909],{"class":153},[147,58815,51589],{"class":2237},[147,58817,445],{"class":157},[147,58819,51594],{"class":504},[147,58821,51580],{"class":157},[147,58823,58824],{"class":149,"line":1454},[147,58825,2674],{"emptyLinePlaceholder":324},[147,58827,58828,58830,58832],{"class":149,"line":1469},[147,58829,1309],{"class":157},[147,58831,51607],{"class":153},[147,58833,51580],{"class":157},[147,58835,58836,58838,58840,58842,58844,58846],{"class":149,"line":1475},[147,58837,52417],{"class":157},[147,58839,51617],{"class":153},[147,58841,51620],{"class":2237},[147,58843,445],{"class":157},[147,58845,51625],{"class":504},[147,58847,51580],{"class":157},[147,58849,58850,58852,58854,58856,58858,58860,58862,58864,58866],{"class":149,"line":1489},[147,58851,52417],{"class":157},[147,58853,51617],{"class":153},[147,58855,15193],{"class":2237},[147,58857,445],{"class":157},[147,58859,51664],{"class":504},[147,58861,51644],{"class":2237},[147,58863,445],{"class":157},[147,58865,51671],{"class":504},[147,58867,51580],{"class":157},[147,58869,58870,58872,58874,58876,58878],{"class":149,"line":1495},[147,58871,52417],{"class":157},[147,58873,51680],{"class":153},[147,58875,51683],{"class":157},[147,58877,51680],{"class":153},[147,58879,51580],{"class":157},[147,58881,58882,58884,58886],{"class":149,"line":1586},[147,58883,52058],{"class":157},[147,58885,51607],{"class":153},[147,58887,51580],{"class":157},[147,58889,58890],{"class":149,"line":1592},[147,58891,2674],{"emptyLinePlaceholder":324},[147,58893,58894,58896,58898],{"class":149,"line":1604},[147,58895,1309],{"class":157},[147,58897,52073],{"class":153},[147,58899,51580],{"class":157},[147,58901,58902,58904,58906,58908,58910],{"class":149,"line":1886},[147,58903,52417],{"class":157},[147,58905,54160],{"class":153},[147,58907,54166],{"class":157},[147,58909,54160],{"class":153},[147,58911,51580],{"class":157},[147,58913,58914,58916,58918],{"class":149,"line":1891},[147,58915,52417],{"class":157},[147,58917,52086],{"class":153},[147,58919,51580],{"class":157},[147,58921,58922,58924,58926,58928],{"class":149,"line":1897},[147,58923,11495],{"class":397},[147,58925,2514],{"class":448},[147,58927,13838],{"class":397},[147,58929,58701],{"class":448},[147,58931,58932,58934,58936,58938,58940,58942,58944,58946],{"class":149,"line":1902},[147,58933,11495],{"class":397},[147,58935,54664],{"class":448},[147,58937,13838],{"class":397},[147,58939,54669],{"class":157},[147,58941,54672],{"class":2237},[147,58943,401],{"class":157},[147,58945,58477],{"class":504},[147,58947,407],{"class":157},[147,58949,58950,58952,58954,58956,58958,58960,58962],{"class":149,"line":1916},[147,58951,58484],{"class":157},[147,58953,58086],{"class":2237},[147,58955,401],{"class":157},[147,58957,58091],{"class":504},[147,58959,12709],{"class":157},[147,58961,54722],{"class":397},[147,58963,54725],{"class":157},[147,58965,58966,58969,58971,58973,58975],{"class":149,"line":1921},[147,58967,58968],{"class":157},"      num ",[147,58970,445],{"class":397},[147,58972,58508],{"class":157},[147,58974,58133],{"class":2237},[147,58976,2250],{"class":157},[147,58978,58979,58981,58983],{"class":149,"line":1927},[147,58980,58517],{"class":157},[147,58982,58520],{"class":2237},[147,58984,414],{"class":157},[147,58986,58987],{"class":149,"line":1948},[147,58988,33735],{"class":157},[147,58990,58991,58993,58995],{"class":149,"line":1953},[147,58992,52690],{"class":157},[147,58994,52086],{"class":153},[147,58996,51580],{"class":157},[147,58998,58999,59001,59003],{"class":149,"line":1967},[147,59000,52058],{"class":157},[147,59002,52073],{"class":153},[147,59004,51580],{"class":157},[147,59006,59007],{"class":149,"line":1972},[147,59008,2674],{"emptyLinePlaceholder":324},[147,59010,59011,59013,59015],{"class":149,"line":2001},[147,59012,52058],{"class":157},[147,59014,50909],{"class":153},[147,59016,51580],{"class":157},[19,59018,59019],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[367,59021,59023],{"id":59022},"_324-事件监听版本","3.2.4 事件监听版本",[19,59025,59026],{},[29,59027],{"alt":143,"src":59028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,59030,59031],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,59033,59034],{},"这种方式会覆盖前边的事件监听:",[138,59036,59038],{"className":50907,"code":59037,"language":50909,"meta":143,"style":143},"\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",[51,59039,59040,59050,59064,59068,59076,59090,59110,59122,59130,59134,59142,59154,59162,59180,59194,59205,59209,59221,59231,59235,59243,59251,59255],{"__ignoreMap":143},[147,59041,59042,59044,59046,59048],{"class":149,"line":150},[147,59043,51571],{"class":157},[147,59045,51574],{"class":153},[147,59047,51577],{"class":2237},[147,59049,51580],{"class":157},[147,59051,59052,59054,59056,59058,59060,59062],{"class":149,"line":312},[147,59053,1309],{"class":157},[147,59055,50909],{"class":153},[147,59057,51589],{"class":2237},[147,59059,445],{"class":157},[147,59061,51594],{"class":504},[147,59063,51580],{"class":157},[147,59065,59066],{"class":149,"line":1454},[147,59067,2674],{"emptyLinePlaceholder":324},[147,59069,59070,59072,59074],{"class":149,"line":1469},[147,59071,1309],{"class":157},[147,59073,51607],{"class":153},[147,59075,51580],{"class":157},[147,59077,59078,59080,59082,59084,59086,59088],{"class":149,"line":1475},[147,59079,52417],{"class":157},[147,59081,51617],{"class":153},[147,59083,51620],{"class":2237},[147,59085,445],{"class":157},[147,59087,51625],{"class":504},[147,59089,51580],{"class":157},[147,59091,59092,59094,59096,59098,59100,59102,59104,59106,59108],{"class":149,"line":1489},[147,59093,52417],{"class":157},[147,59095,51617],{"class":153},[147,59097,15193],{"class":2237},[147,59099,445],{"class":157},[147,59101,51664],{"class":504},[147,59103,51644],{"class":2237},[147,59105,445],{"class":157},[147,59107,51671],{"class":504},[147,59109,51580],{"class":157},[147,59111,59112,59114,59116,59118,59120],{"class":149,"line":1495},[147,59113,52417],{"class":157},[147,59115,51680],{"class":153},[147,59117,51683],{"class":157},[147,59119,51680],{"class":153},[147,59121,51580],{"class":157},[147,59123,59124,59126,59128],{"class":149,"line":1586},[147,59125,52058],{"class":157},[147,59127,51607],{"class":153},[147,59129,51580],{"class":157},[147,59131,59132],{"class":149,"line":1592},[147,59133,2674],{"emptyLinePlaceholder":324},[147,59135,59136,59138,59140],{"class":149,"line":1604},[147,59137,1309],{"class":157},[147,59139,52073],{"class":153},[147,59141,51580],{"class":157},[147,59143,59144,59146,59148,59150,59152],{"class":149,"line":1886},[147,59145,52417],{"class":157},[147,59147,54160],{"class":153},[147,59149,54166],{"class":157},[147,59151,54160],{"class":153},[147,59153,51580],{"class":157},[147,59155,59156,59158,59160],{"class":149,"line":1891},[147,59157,52417],{"class":157},[147,59159,52086],{"class":153},[147,59161,51580],{"class":157},[147,59163,59164,59166,59168,59170,59172,59174,59176,59178],{"class":149,"line":1897},[147,59165,11495],{"class":397},[147,59167,54664],{"class":448},[147,59169,13838],{"class":397},[147,59171,54669],{"class":157},[147,59173,54672],{"class":2237},[147,59175,401],{"class":157},[147,59177,58477],{"class":504},[147,59179,407],{"class":157},[147,59181,59182,59184,59187,59189,59192],{"class":149,"line":1902},[147,59183,58484],{"class":157},[147,59185,59186],{"class":2237},"onclick",[147,59188,13838],{"class":397},[147,59190,59191],{"class":397}," function",[147,59193,54725],{"class":157},[147,59195,59196,59199,59201,59203],{"class":149,"line":1916},[147,59197,59198],{"class":2237},"      alert",[147,59200,401],{"class":157},[147,59202,871],{"class":448},[147,59204,407],{"class":157},[147,59206,59207],{"class":149,"line":1921},[147,59208,2461],{"class":157},[147,59210,59211,59213,59215,59217,59219],{"class":149,"line":1927},[147,59212,58484],{"class":157},[147,59214,59186],{"class":2237},[147,59216,13838],{"class":397},[147,59218,59191],{"class":397},[147,59220,54725],{"class":157},[147,59222,59223,59225,59227,59229],{"class":149,"line":1948},[147,59224,59198],{"class":2237},[147,59226,401],{"class":157},[147,59228,1149],{"class":448},[147,59230,407],{"class":157},[147,59232,59233],{"class":149,"line":1953},[147,59234,2461],{"class":157},[147,59236,59237,59239,59241],{"class":149,"line":1967},[147,59238,52690],{"class":157},[147,59240,52086],{"class":153},[147,59242,51580],{"class":157},[147,59244,59245,59247,59249],{"class":149,"line":1972},[147,59246,52058],{"class":157},[147,59248,52073],{"class":153},[147,59250,51580],{"class":157},[147,59252,59253],{"class":149,"line":2001},[147,59254,2674],{"emptyLinePlaceholder":324},[147,59256,59257,59259,59261],{"class":149,"line":2006},[147,59258,52058],{"class":157},[147,59260,50909],{"class":153},[147,59262,51580],{"class":157},[19,59264,59265],{},"只要点击就输出结果为22,前边11被覆盖了",[138,59267,59269],{"className":50907,"code":59268,"language":50909,"meta":143,"style":143},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[51,59270,59271,59276,59281,59285,59290,59295],{"__ignoreMap":143},[147,59272,59273],{"class":149,"line":150},[147,59274,59275],{"class":157},"  btn.addEventListener('click', function () {\n",[147,59277,59278],{"class":149,"line":312},[147,59279,59280],{"class":157},"      alert(11)\n",[147,59282,59283],{"class":149,"line":1454},[147,59284,33735],{"class":157},[147,59286,59287],{"class":149,"line":1469},[147,59288,59289],{"class":157},"    btn.addEventListener('click', function () {\n",[147,59291,59292],{"class":149,"line":1475},[147,59293,59294],{"class":157},"      alert(22)\n",[147,59296,59297],{"class":149,"line":1489},[147,59298,33735],{"class":157},[19,59300,59301],{},"点击第一次输出11,第二次点击为22",[367,59303,59305],{"id":59304},"_325-事件类型","3.2.5 事件类型",[19,59307,59308],{},[29,59309],{"alt":143,"src":59310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22271,59312,59314],{"id":59313},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,59316,59317],{},"补充知识:",[19,59319,59320],{},"轮播图自动播放模块,可以使用",[19,59322,59323],{},"let timerId = setInterval(function () {",[19,59325,59326],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,59328,59329],{},"用js方法模拟进行点击事件,click必须加()",[19,59331,59332],{},"next.click()",[19,59334,59335],{},"}, 1000)",[19,59337,59338],{},[29,59339],{"alt":143,"src":59340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[138,59342,59344],{"className":53340,"code":59343,"language":53342,"meta":143,"style":143},"\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",[51,59345,59346,59350,59360,59374,59378,59386,59401,59421,59441,59454,59462,59467,59472,59476,59480,59485,59490,59495,59500,59504,59508,59513,59518,59523,59527,59531,59536,59540,59545,59550,59554,59558,59563,59568,59573,59578,59583,59587,59591,59596,59601,59606,59611,59616,59620,59624,59629,59634,59639,59644,59649,59654,59659,59664,59669,59674,59678,59682,59687,59692,59696,59700,59705,59710,59714,59719,59724,59728,59732,59737,59741,59746,59751,59755,59760,59764,59768,59773,59778,59783,59788,59793,59798,59803,59807,59811,59815,59820,59825,59830,59835,59839,59847,59855,59859,59867,59882,59896,59917,59925,59939,59952,59967,59986,59998,60010,60022,60034,60046,60058,60070,60078,60093,60117,60141,60149,60157,60165,60173,60178,60183,60188,60193,60198,60203,60208,60213,60218,60223,60227,60232,60237,60242,60247,60252,60257,60262,60267,60272,60276,60281,60286,60291,60296,60301,60306,60311,60316,60321,60326,60331,60336,60340,60344,60349,60354,60359,60363,60368,60373,60378,60383,60388,60392,60397,60401,60405,60409,60413,60417,60421,60426,60431,60436,60441,60446,60451,60456,60461,60466,60470,60474,60479,60484,60489,60494,60499,60503,60508,60513,60518,60523,60528,60533,60537,60541,60546,60550,60555,60559,60564,60569,60574,60579,60584,60589,60593,60601,60609,60613],{"__ignoreMap":143},[147,59347,59348],{"class":149,"line":150},[147,59349,2674],{"emptyLinePlaceholder":324},[147,59351,59352,59354,59356,59358],{"class":149,"line":312},[147,59353,51571],{"class":157},[147,59355,51574],{"class":397},[147,59357,51577],{"class":448},[147,59359,51580],{"class":157},[147,59361,59362,59364,59366,59368,59370,59372],{"class":149,"line":1454},[147,59363,1309],{"class":157},[147,59365,50909],{"class":153},[147,59367,51589],{"class":2237},[147,59369,445],{"class":157},[147,59371,51594],{"class":504},[147,59373,51580],{"class":157},[147,59375,59376],{"class":149,"line":1469},[147,59377,2674],{"emptyLinePlaceholder":324},[147,59379,59380,59382,59384],{"class":149,"line":1475},[147,59381,1309],{"class":157},[147,59383,51607],{"class":153},[147,59385,51580],{"class":157},[147,59387,59388,59390,59392,59394,59396,59398],{"class":149,"line":1489},[147,59389,52417],{"class":157},[147,59391,51617],{"class":153},[147,59393,51620],{"class":2237},[147,59395,445],{"class":157},[147,59397,51625],{"class":504},[147,59399,59400],{"class":157}," \u002F>\n",[147,59402,59403,59405,59407,59409,59411,59413,59415,59417,59419],{"class":149,"line":1495},[147,59404,52417],{"class":157},[147,59406,51617],{"class":153},[147,59408,51636],{"class":2237},[147,59410,445],{"class":157},[147,59412,51641],{"class":504},[147,59414,51644],{"class":2237},[147,59416,445],{"class":157},[147,59418,51649],{"class":504},[147,59420,59400],{"class":157},[147,59422,59423,59425,59427,59429,59431,59433,59435,59437,59439],{"class":149,"line":1586},[147,59424,52417],{"class":157},[147,59426,51617],{"class":153},[147,59428,15193],{"class":2237},[147,59430,445],{"class":157},[147,59432,51664],{"class":504},[147,59434,51644],{"class":2237},[147,59436,445],{"class":157},[147,59438,51671],{"class":504},[147,59440,59400],{"class":157},[147,59442,59443,59445,59447,59450,59452],{"class":149,"line":1592},[147,59444,52417],{"class":157},[147,59446,51680],{"class":153},[147,59448,59449],{"class":157},">轮播图点击切换\u003C\u002F",[147,59451,51680],{"class":153},[147,59453,51580],{"class":157},[147,59455,59456,59458,59460],{"class":149,"line":1604},[147,59457,52417],{"class":157},[147,59459,308],{"class":153},[147,59461,51580],{"class":157},[147,59463,59464],{"class":149,"line":1886},[147,59465,59466],{"class":157},"    * {\n",[147,59468,59469],{"class":149,"line":1891},[147,59470,59471],{"class":157},"      box-sizing: border-box;\n",[147,59473,59474],{"class":149,"line":1897},[147,59475,2461],{"class":157},[147,59477,59478],{"class":149,"line":1902},[147,59479,2674],{"emptyLinePlaceholder":324},[147,59481,59482],{"class":149,"line":1916},[147,59483,59484],{"class":157},"    .slider {\n",[147,59486,59487],{"class":149,"line":1921},[147,59488,59489],{"class":157},"      width: 560px;\n",[147,59491,59492],{"class":149,"line":1927},[147,59493,59494],{"class":157},"      height: 400px;\n",[147,59496,59497],{"class":149,"line":1948},[147,59498,59499],{"class":157},"      overflow: hidden;\n",[147,59501,59502],{"class":149,"line":1953},[147,59503,2461],{"class":157},[147,59505,59506],{"class":149,"line":1967},[147,59507,2674],{"emptyLinePlaceholder":324},[147,59509,59510],{"class":149,"line":1972},[147,59511,59512],{"class":157},"    .slider-wrapper {\n",[147,59514,59515],{"class":149,"line":2001},[147,59516,59517],{"class":157},"      width: 100%;\n",[147,59519,59520],{"class":149,"line":2006},[147,59521,59522],{"class":157},"      height: 320px;\n",[147,59524,59525],{"class":149,"line":2023},[147,59526,2461],{"class":157},[147,59528,59529],{"class":149,"line":2028},[147,59530,2674],{"emptyLinePlaceholder":324},[147,59532,59533],{"class":149,"line":2033},[147,59534,59535],{"class":157},"    .slider-wrapper img {\n",[147,59537,59538],{"class":149,"line":2038},[147,59539,59517],{"class":157},[147,59541,59542],{"class":149,"line":2052},[147,59543,59544],{"class":157},"      height: 100%;\n",[147,59546,59547],{"class":149,"line":2057},[147,59548,59549],{"class":157},"      display: block;\n",[147,59551,59552],{"class":149,"line":2851},[147,59553,2461],{"class":157},[147,59555,59556],{"class":149,"line":2865},[147,59557,2674],{"emptyLinePlaceholder":324},[147,59559,59560],{"class":149,"line":2873},[147,59561,59562],{"class":157},"    .slider-footer {\n",[147,59564,59565],{"class":149,"line":2878},[147,59566,59567],{"class":157},"      height: 80px;\n",[147,59569,59570],{"class":149,"line":2884},[147,59571,59572],{"class":157},"      background-color: rgb(100, 67, 68);\n",[147,59574,59575],{"class":149,"line":2890},[147,59576,59577],{"class":157},"      padding: 12px 12px 0 12px;\n",[147,59579,59580],{"class":149,"line":2895},[147,59581,59582],{"class":157},"      position: relative;\n",[147,59584,59585],{"class":149,"line":8222},[147,59586,2461],{"class":157},[147,59588,59589],{"class":149,"line":8246},[147,59590,2674],{"emptyLinePlaceholder":324},[147,59592,59593],{"class":149,"line":8251},[147,59594,59595],{"class":157},"    .slider-footer .toggle {\n",[147,59597,59598],{"class":149,"line":8257},[147,59599,59600],{"class":157},"      position: absolute;\n",[147,59602,59603],{"class":149,"line":8284},[147,59604,59605],{"class":157},"      right: 0;\n",[147,59607,59608],{"class":149,"line":8289},[147,59609,59610],{"class":157},"      top: 12px;\n",[147,59612,59613],{"class":149,"line":8295},[147,59614,59615],{"class":157},"      display: flex;\n",[147,59617,59618],{"class":149,"line":8307},[147,59619,2461],{"class":157},[147,59621,59622],{"class":149,"line":8319},[147,59623,2674],{"emptyLinePlaceholder":324},[147,59625,59626],{"class":149,"line":8331},[147,59627,59628],{"class":157},"    .slider-footer .toggle button {\n",[147,59630,59631],{"class":149,"line":9990},[147,59632,59633],{"class":157},"      margin-right: 12px;\n",[147,59635,59636],{"class":149,"line":10015},[147,59637,59638],{"class":157},"      width: 28px;\n",[147,59640,59641],{"class":149,"line":10038},[147,59642,59643],{"class":157},"      height: 28px;\n",[147,59645,59646],{"class":149,"line":10062},[147,59647,59648],{"class":157},"      appearance: none;\n",[147,59650,59651],{"class":149,"line":10067},[147,59652,59653],{"class":157},"      border: none;\n",[147,59655,59656],{"class":149,"line":10072},[147,59657,59658],{"class":157},"      background: rgba(255, 255, 255, 0.1);\n",[147,59660,59661],{"class":149,"line":10077},[147,59662,59663],{"class":157},"      color: #fff;\n",[147,59665,59666],{"class":149,"line":10086},[147,59667,59668],{"class":157},"      border-radius: 4px;\n",[147,59670,59671],{"class":149,"line":10091},[147,59672,59673],{"class":157},"      cursor: pointer;\n",[147,59675,59676],{"class":149,"line":10097},[147,59677,2461],{"class":157},[147,59679,59680],{"class":149,"line":10118},[147,59681,2674],{"emptyLinePlaceholder":324},[147,59683,59684],{"class":149,"line":10124},[147,59685,59686],{"class":157},"    .slider-footer .toggle button:hover {\n",[147,59688,59689],{"class":149,"line":10138},[147,59690,59691],{"class":157},"      background: rgba(255, 255, 255, 0.2);\n",[147,59693,59694],{"class":149,"line":10144},[147,59695,2461],{"class":157},[147,59697,59698],{"class":149,"line":10171},[147,59699,2674],{"emptyLinePlaceholder":324},[147,59701,59702],{"class":149,"line":10180},[147,59703,59704],{"class":157},"    .slider-footer p {\n",[147,59706,59707],{"class":149,"line":10186},[147,59708,59709],{"class":157},"      margin: 0;\n",[147,59711,59712],{"class":149,"line":10194},[147,59713,59663],{"class":157},[147,59715,59716],{"class":149,"line":10199},[147,59717,59718],{"class":157},"      font-size: 18px;\n",[147,59720,59721],{"class":149,"line":16877},[147,59722,59723],{"class":157},"      margin-bottom: 10px;\n",[147,59725,59726],{"class":149,"line":16883},[147,59727,2461],{"class":157},[147,59729,59730],{"class":149,"line":16906},[147,59731,2674],{"emptyLinePlaceholder":324},[147,59733,59734],{"class":149,"line":16912},[147,59735,59736],{"class":157},"    .slider-indicator {\n",[147,59738,59739],{"class":149,"line":16935},[147,59740,59709],{"class":157},[147,59742,59743],{"class":149,"line":16949},[147,59744,59745],{"class":157},"      padding: 0;\n",[147,59747,59748],{"class":149,"line":16969},[147,59749,59750],{"class":157},"      list-style: none;\n",[147,59752,59753],{"class":149,"line":16975},[147,59754,59615],{"class":157},[147,59756,59757],{"class":149,"line":16986},[147,59758,59759],{"class":157},"      align-items: center;\n",[147,59761,59762],{"class":149,"line":17009},[147,59763,2461],{"class":157},[147,59765,59766],{"class":149,"line":17031},[147,59767,2674],{"emptyLinePlaceholder":324},[147,59769,59770],{"class":149,"line":17036},[147,59771,59772],{"class":157},"    .slider-indicator li {\n",[147,59774,59775],{"class":149,"line":17042},[147,59776,59777],{"class":157},"      width: 8px;\n",[147,59779,59780],{"class":149,"line":17056},[147,59781,59782],{"class":157},"      height: 8px;\n",[147,59784,59785],{"class":149,"line":17069},[147,59786,59787],{"class":157},"      margin: 4px;\n",[147,59789,59790],{"class":149,"line":17074},[147,59791,59792],{"class":157},"      border-radius: 50%;\n",[147,59794,59795],{"class":149,"line":17088},[147,59796,59797],{"class":157},"      background: #fff;\n",[147,59799,59800],{"class":149,"line":17093},[147,59801,59802],{"class":157},"      opacity: 0.4;\n",[147,59804,59805],{"class":149,"line":17099},[147,59806,59673],{"class":157},[147,59808,59809],{"class":149,"line":17104},[147,59810,2461],{"class":157},[147,59812,59813],{"class":149,"line":17118},[147,59814,2674],{"emptyLinePlaceholder":324},[147,59816,59817],{"class":149,"line":17123},[147,59818,59819],{"class":157},"    .slider-indicator li.active {\n",[147,59821,59822],{"class":149,"line":17128},[147,59823,59824],{"class":157},"      width: 12px;\n",[147,59826,59827],{"class":149,"line":17142},[147,59828,59829],{"class":157},"      height: 12px;\n",[147,59831,59832],{"class":149,"line":17154},[147,59833,59834],{"class":157},"      opacity: 1;\n",[147,59836,59837],{"class":149,"line":17159},[147,59838,2461],{"class":157},[147,59840,59841,59843,59845],{"class":149,"line":17172},[147,59842,52690],{"class":157},[147,59844,308],{"class":153},[147,59846,51580],{"class":157},[147,59848,59849,59851,59853],{"class":149,"line":17177},[147,59850,52058],{"class":157},[147,59852,51607],{"class":153},[147,59854,51580],{"class":157},[147,59856,59857],{"class":149,"line":17182},[147,59858,2674],{"emptyLinePlaceholder":324},[147,59860,59861,59863,59865],{"class":149,"line":17187},[147,59862,1309],{"class":157},[147,59864,52073],{"class":153},[147,59866,51580],{"class":157},[147,59868,59869,59871,59873,59875,59877,59880],{"class":149,"line":17200},[147,59870,52417],{"class":157},[147,59872,51884],{"class":153},[147,59874,53759],{"class":2237},[147,59876,445],{"class":157},[147,59878,59879],{"class":504},"\"slider\"",[147,59881,51580],{"class":157},[147,59883,59884,59886,59888,59890,59892,59894],{"class":149,"line":17205},[147,59885,51614],{"class":157},[147,59887,51884],{"class":153},[147,59889,53759],{"class":2237},[147,59891,445],{"class":157},[147,59893,55500],{"class":504},[147,59895,51580],{"class":157},[147,59897,59898,59900,59902,59904,59906,59909,59911,59913,59915],{"class":149,"line":32907},[147,59899,55507],{"class":157},[147,59901,29],{"class":153},[147,59903,55512],{"class":2237},[147,59905,445],{"class":157},[147,59907,59908],{"class":504},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[147,59910,55520],{"class":2237},[147,59912,445],{"class":157},[147,59914,7926],{"class":504},[147,59916,59400],{"class":157},[147,59918,59919,59921,59923],{"class":149,"line":32913},[147,59920,52049],{"class":157},[147,59922,51884],{"class":153},[147,59924,51580],{"class":157},[147,59926,59927,59929,59931,59933,59935,59937],{"class":149,"line":32919},[147,59928,51614],{"class":157},[147,59930,51884],{"class":153},[147,59932,53759],{"class":2237},[147,59934,445],{"class":157},[147,59936,55547],{"class":504},[147,59938,51580],{"class":157},[147,59940,59941,59943,59945,59948,59950],{"class":149,"line":32925},[147,59942,55507],{"class":157},[147,59944,19],{"class":153},[147,59946,59947],{"class":157},">对人类来说会不会太超前了？\u003C\u002F",[147,59949,19],{"class":153},[147,59951,51580],{"class":157},[147,59953,59954,59956,59958,59960,59962,59965],{"class":149,"line":32931},[147,59955,55507],{"class":157},[147,59957,1406],{"class":153},[147,59959,53759],{"class":2237},[147,59961,445],{"class":157},[147,59963,59964],{"class":504},"\"slider-indicator\"",[147,59966,51580],{"class":157},[147,59968,59969,59971,59973,59975,59977,59980,59982,59984],{"class":149,"line":32942},[147,59970,55575],{"class":157},[147,59972,353],{"class":153},[147,59974,53759],{"class":2237},[147,59976,445],{"class":157},[147,59978,59979],{"class":504},"\"active\"",[147,59981,55587],{"class":157},[147,59983,353],{"class":153},[147,59985,51580],{"class":157},[147,59987,59988,59990,59992,59994,59996],{"class":149,"line":32948},[147,59989,55575],{"class":157},[147,59991,353],{"class":153},[147,59993,55587],{"class":157},[147,59995,353],{"class":153},[147,59997,51580],{"class":157},[147,59999,60000,60002,60004,60006,60008],{"class":149,"line":32968},[147,60001,55575],{"class":157},[147,60003,353],{"class":153},[147,60005,55587],{"class":157},[147,60007,353],{"class":153},[147,60009,51580],{"class":157},[147,60011,60012,60014,60016,60018,60020],{"class":149,"line":32974},[147,60013,55575],{"class":157},[147,60015,353],{"class":153},[147,60017,55587],{"class":157},[147,60019,353],{"class":153},[147,60021,51580],{"class":157},[147,60023,60024,60026,60028,60030,60032],{"class":149,"line":32985},[147,60025,55575],{"class":157},[147,60027,353],{"class":153},[147,60029,55587],{"class":157},[147,60031,353],{"class":153},[147,60033,51580],{"class":157},[147,60035,60036,60038,60040,60042,60044],{"class":149,"line":32991},[147,60037,55575],{"class":157},[147,60039,353],{"class":153},[147,60041,55587],{"class":157},[147,60043,353],{"class":153},[147,60045,51580],{"class":157},[147,60047,60048,60050,60052,60054,60056],{"class":149,"line":32997},[147,60049,55575],{"class":157},[147,60051,353],{"class":153},[147,60053,55587],{"class":157},[147,60055,353],{"class":153},[147,60057,51580],{"class":157},[147,60059,60060,60062,60064,60066,60068],{"class":149,"line":33003},[147,60061,55575],{"class":157},[147,60063,353],{"class":153},[147,60065,55587],{"class":157},[147,60067,353],{"class":153},[147,60069,51580],{"class":157},[147,60071,60072,60074,60076],{"class":149,"line":33009},[147,60073,55680],{"class":157},[147,60075,1406],{"class":153},[147,60077,51580],{"class":157},[147,60079,60080,60082,60084,60086,60088,60091],{"class":149,"line":33015},[147,60081,55507],{"class":157},[147,60083,51884],{"class":153},[147,60085,53759],{"class":2237},[147,60087,445],{"class":157},[147,60089,60090],{"class":504},"\"toggle\"",[147,60092,51580],{"class":157},[147,60094,60095,60097,60099,60101,60103,60106,60108,60111,60113,60115],{"class":149,"line":33021},[147,60096,55575],{"class":157},[147,60098,54160],{"class":153},[147,60100,53759],{"class":2237},[147,60102,445],{"class":157},[147,60104,60105],{"class":504},"\"prev\"",[147,60107,1359],{"class":157},[147,60109,60110],{"class":448},"&lt;",[147,60112,52058],{"class":157},[147,60114,54160],{"class":153},[147,60116,51580],{"class":157},[147,60118,60119,60121,60123,60125,60127,60130,60132,60135,60137,60139],{"class":149,"line":33027},[147,60120,55575],{"class":157},[147,60122,54160],{"class":153},[147,60124,53759],{"class":2237},[147,60126,445],{"class":157},[147,60128,60129],{"class":504},"\"next\"",[147,60131,1359],{"class":157},[147,60133,60134],{"class":448},"&gt;",[147,60136,52058],{"class":157},[147,60138,54160],{"class":153},[147,60140,51580],{"class":157},[147,60142,60143,60145,60147],{"class":149,"line":33047},[147,60144,55680],{"class":157},[147,60146,51884],{"class":153},[147,60148,51580],{"class":157},[147,60150,60151,60153,60155],{"class":149,"line":33053},[147,60152,52049],{"class":157},[147,60154,51884],{"class":153},[147,60156,51580],{"class":157},[147,60158,60159,60161,60163],{"class":149,"line":33069},[147,60160,52690],{"class":157},[147,60162,51884],{"class":153},[147,60164,51580],{"class":157},[147,60166,60167,60169,60171],{"class":149,"line":33075},[147,60168,52417],{"class":157},[147,60170,52086],{"class":153},[147,60172,51580],{"class":157},[147,60174,60175],{"class":149,"line":33089},[147,60176,60177],{"class":157},"    \u002F\u002F 1. 初始数据\n",[147,60179,60180],{"class":149,"line":33095},[147,60181,60182],{"class":157},"    const data = [\n",[147,60184,60185],{"class":149,"line":33110},[147,60186,60187],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[147,60189,60190],{"class":149,"line":33116},[147,60191,60192],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[147,60194,60195],{"class":149,"line":33125},[147,60196,60197],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[147,60199,60200],{"class":149,"line":33131},[147,60201,60202],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[147,60204,60205],{"class":149,"line":33140},[147,60206,60207],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[147,60209,60210],{"class":149,"line":33146},[147,60211,60212],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[147,60214,60215],{"class":149,"line":33152},[147,60216,60217],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[147,60219,60220],{"class":149,"line":33161},[147,60221,60222],{"class":157},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[147,60224,60225],{"class":149,"line":33167},[147,60226,53382],{"class":157},[147,60228,60229],{"class":149,"line":33178},[147,60230,60231],{"class":157},"    \u002F\u002F 获取元素\n",[147,60233,60234],{"class":149,"line":33184},[147,60235,60236],{"class":157},"    const img = document.querySelector('.slider-wrapper img')\n",[147,60238,60239],{"class":149,"line":33203},[147,60240,60241],{"class":157},"    const p = document.querySelector('.slider-footer p')\n",[147,60243,60244],{"class":149,"line":33209},[147,60245,60246],{"class":157},"    const footer = document.querySelector('.slider-footer')\n",[147,60248,60249],{"class":149,"line":33220},[147,60250,60251],{"class":157},"    \u002F\u002F 1. 右按钮业务\n",[147,60253,60254],{"class":149,"line":33226},[147,60255,60256],{"class":157},"    \u002F\u002F 1.1 获取右侧按钮 \n",[147,60258,60259],{"class":149,"line":33246},[147,60260,60261],{"class":157},"    const next = document.querySelector('.next')\n",[147,60263,60264],{"class":149,"line":33262},[147,60265,60266],{"class":157},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[147,60268,60269],{"class":149,"line":33268},[147,60270,60271],{"class":157},"    \u002F\u002F 1.2 注册点击事件\n",[147,60273,60274],{"class":149,"line":33282},[147,60275,2674],{"emptyLinePlaceholder":324},[147,60277,60278],{"class":149,"line":33288},[147,60279,60280],{"class":157},"    next.addEventListener('click', function () {\n",[147,60282,60283],{"class":149,"line":33294},[147,60284,60285],{"class":157},"      \u002F\u002F console.log(11)\n",[147,60287,60288],{"class":149,"line":33305},[147,60289,60290],{"class":157},"      i++\n",[147,60292,60293],{"class":149,"line":33311},[147,60294,60295],{"class":157},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[147,60297,60298],{"class":149,"line":33317},[147,60299,60300],{"class":157},"      \u002F\u002F if (i >= 8) {\n",[147,60302,60303],{"class":149,"line":33327},[147,60304,60305],{"class":157},"      \u002F\u002F   i = 0\n",[147,60307,60308],{"class":149,"line":33333},[147,60309,60310],{"class":157},"      \u002F\u002F }\n",[147,60312,60313],{"class":149,"line":33344},[147,60314,60315],{"class":157},"      i = i >= data.length ? 0 : i\n",[147,60317,60318],{"class":149,"line":33350},[147,60319,60320],{"class":157},"      \u002F\u002F 1.3 得到对应的对象\n",[147,60322,60323],{"class":149,"line":33360},[147,60324,60325],{"class":157},"      \u002F\u002F console.log(data[i])\n",[147,60327,60328],{"class":149,"line":33365},[147,60329,60330],{"class":157},"      \u002F\u002F 调用函数\n",[147,60332,60333],{"class":149,"line":33371},[147,60334,60335],{"class":157},"      toggle()\n",[147,60337,60338],{"class":149,"line":33420},[147,60339,33735],{"class":157},[147,60341,60342],{"class":149,"line":33467},[147,60343,2674],{"emptyLinePlaceholder":324},[147,60345,60346],{"class":149,"line":33472},[147,60347,60348],{"class":157},"    \u002F\u002F 2. 左侧按钮业务\n",[147,60350,60351],{"class":149,"line":33478},[147,60352,60353],{"class":157},"    \u002F\u002F 2.1 获取左侧按钮 \n",[147,60355,60356],{"class":149,"line":33497},[147,60357,60358],{"class":157},"    const prev = document.querySelector('.prev')\n",[147,60360,60361],{"class":149,"line":33503},[147,60362,60271],{"class":157},[147,60364,60365],{"class":149,"line":33523},[147,60366,60367],{"class":157},"    prev.addEventListener('click', function () {\n",[147,60369,60370],{"class":149,"line":33529},[147,60371,60372],{"class":157},"      i--\n",[147,60374,60375],{"class":149,"line":33535},[147,60376,60377],{"class":157},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[147,60379,60380],{"class":149,"line":33545},[147,60381,60382],{"class":157},"      \u002F\u002F if (i \u003C 0) {\n",[147,60384,60385],{"class":149,"line":33550},[147,60386,60387],{"class":157},"      \u002F\u002F   i = 7\n",[147,60389,60390],{"class":149,"line":33556},[147,60391,60310],{"class":157},[147,60393,60394],{"class":149,"line":33572},[147,60395,60396],{"class":157},"      i = i \u003C 0 ? data.length - 1 : i\n",[147,60398,60399],{"class":149,"line":33617},[147,60400,60320],{"class":157},[147,60402,60403],{"class":149,"line":33623},[147,60404,60325],{"class":157},[147,60406,60407],{"class":149,"line":33629},[147,60408,60330],{"class":157},[147,60410,60411],{"class":149,"line":33635},[147,60412,60335],{"class":157},[147,60414,60415],{"class":149,"line":33646},[147,60416,33735],{"class":157},[147,60418,60419],{"class":149,"line":33652},[147,60420,2674],{"emptyLinePlaceholder":324},[147,60422,60423],{"class":149,"line":33658},[147,60424,60425],{"class":157},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[147,60427,60428],{"class":149,"line":33664},[147,60429,60430],{"class":157},"    function toggle() {\n",[147,60432,60433],{"class":149,"line":33682},[147,60434,60435],{"class":157},"      \u002F\u002F 1.4 渲染对应的数据\n",[147,60437,60438],{"class":149,"line":33696},[147,60439,60440],{"class":157},"      img.src = data[i].url\n",[147,60442,60443],{"class":149,"line":33705},[147,60444,60445],{"class":157},"      p.innerHTML = data[i].title\n",[147,60447,60448],{"class":149,"line":33714},[147,60449,60450],{"class":157},"      footer.style.backgroundColor = data[i].color\n",[147,60452,60453],{"class":149,"line":33723},[147,60454,60455],{"class":157},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[147,60457,60458],{"class":149,"line":33732},[147,60459,60460],{"class":157},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[147,60462,60463],{"class":149,"line":33738},[147,60464,60465],{"class":157},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[147,60467,60468],{"class":149,"line":33744},[147,60469,2461],{"class":157},[147,60471,60472],{"class":149,"line":33752},[147,60473,2674],{"emptyLinePlaceholder":324},[147,60475,60476],{"class":149,"line":33757},[147,60477,60478],{"class":157},"    \u002F\u002F 3. 自动播放模块\n",[147,60480,60481],{"class":149,"line":33763},[147,60482,60483],{"class":157},"    let timerId = setInterval(function () {\n",[147,60485,60486],{"class":149,"line":33774},[147,60487,60488],{"class":157},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[147,60490,60491],{"class":149,"line":33780},[147,60492,60493],{"class":157},"      next.click()\n",[147,60495,60496],{"class":149,"line":33800},[147,60497,60498],{"class":157},"    }, 1000)\n",[147,60500,60501],{"class":149,"line":33806},[147,60502,2674],{"emptyLinePlaceholder":324},[147,60504,60505],{"class":149,"line":33812},[147,60506,60507],{"class":157},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[147,60509,60510],{"class":149,"line":33818},[147,60511,60512],{"class":157},"    const slider = document.querySelector('.slider')\n",[147,60514,60515],{"class":149,"line":33835},[147,60516,60517],{"class":157},"    \u002F\u002F 注册事件\n",[147,60519,60520],{"class":149,"line":33841},[147,60521,60522],{"class":157},"    slider.addEventListener('mouseenter', function () {\n",[147,60524,60525],{"class":149,"line":33847},[147,60526,60527],{"class":157},"      \u002F\u002F 停止定时器\n",[147,60529,60530],{"class":149,"line":33853},[147,60531,60532],{"class":157},"      clearInterval(timerId)\n",[147,60534,60535],{"class":149,"line":33859},[147,60536,33735],{"class":157},[147,60538,60539],{"class":149,"line":33865},[147,60540,2674],{"emptyLinePlaceholder":324},[147,60542,60543],{"class":149,"line":33892},[147,60544,60545],{"class":157},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[147,60547,60548],{"class":149,"line":33916},[147,60549,60517],{"class":157},[147,60551,60552],{"class":149,"line":33922},[147,60553,60554],{"class":157},"    slider.addEventListener('mouseleave', function () {\n",[147,60556,60557],{"class":149,"line":33928},[147,60558,60527],{"class":157},[147,60560,60561],{"class":149,"line":33934},[147,60562,60563],{"class":157},"      if (timerId) clearInterval(timerId)\n",[147,60565,60566],{"class":149,"line":33945},[147,60567,60568],{"class":157},"      \u002F\u002F 开启定时器\n",[147,60570,60571],{"class":149,"line":33956},[147,60572,60573],{"class":157},"      timerId = setInterval(function () {\n",[147,60575,60576],{"class":149,"line":33962},[147,60577,60578],{"class":157},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[147,60580,60581],{"class":149,"line":33979},[147,60582,60583],{"class":157},"        next.click()\n",[147,60585,60586],{"class":149,"line":34002},[147,60587,60588],{"class":157},"      }, 1000)\n",[147,60590,60591],{"class":149,"line":34025},[147,60592,33735],{"class":157},[147,60594,60595,60597,60599],{"class":149,"line":34031},[147,60596,52690],{"class":157},[147,60598,52086],{"class":153},[147,60600,51580],{"class":157},[147,60602,60603,60605,60607],{"class":149,"line":34036},[147,60604,52058],{"class":157},[147,60606,52073],{"class":153},[147,60608,51580],{"class":157},[147,60610,60611],{"class":149,"line":34045},[147,60612,2674],{"emptyLinePlaceholder":324},[147,60614,60615,60617,60619],{"class":149,"line":34055},[147,60616,52058],{"class":157},[147,60618,50909],{"class":153},[147,60620,51580],{"class":157},[22271,60622,60624],{"id":60623},"_3252-焦点事件","3.2.5.2 焦点事件",[19,60626,60627],{},"小米搜索框案例：",[138,60629,60631],{"className":50907,"code":60630,"language":50909,"meta":143,"style":143},"\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",[51,60632,60633,60643,60657,60661,60669,60683,60703,60723,60735,60743,60749,60759,60769,60781,60785,60789,60796,60800,60811,60815,60819,60826,60837,60850,60864,60868,60872,60881,60893,60905,60919,60932,60945,60963,60974,60978,60982,60991,61008,61012,61016,61023,61033,61043,61054,61067,61079,61095,61106,61118,61122,61126,61134,61145,61162,61174,61186,61197,61201,61205,61216,61227,61231,61239,61243,61251,61255,61263,61278,61301,61316,61347,61374,61401,61428,61455,61482,61509,61518,61526,61534,61539,61559,61579,61584,61589,61607,61612,61622,61627,61641,61646,61651,61668,61677,61689,61693,61701,61709,61713],{"__ignoreMap":143},[147,60634,60635,60637,60639,60641],{"class":149,"line":150},[147,60636,51571],{"class":157},[147,60638,51574],{"class":153},[147,60640,51577],{"class":2237},[147,60642,51580],{"class":157},[147,60644,60645,60647,60649,60651,60653,60655],{"class":149,"line":312},[147,60646,1309],{"class":157},[147,60648,50909],{"class":153},[147,60650,51589],{"class":2237},[147,60652,445],{"class":157},[147,60654,51594],{"class":504},[147,60656,51580],{"class":157},[147,60658,60659],{"class":149,"line":1454},[147,60660,2674],{"emptyLinePlaceholder":324},[147,60662,60663,60665,60667],{"class":149,"line":1469},[147,60664,1309],{"class":157},[147,60666,51607],{"class":153},[147,60668,51580],{"class":157},[147,60670,60671,60673,60675,60677,60679,60681],{"class":149,"line":1475},[147,60672,51614],{"class":157},[147,60674,51617],{"class":153},[147,60676,51620],{"class":2237},[147,60678,445],{"class":157},[147,60680,51625],{"class":504},[147,60682,51580],{"class":157},[147,60684,60685,60687,60689,60691,60693,60695,60697,60699,60701],{"class":149,"line":1489},[147,60686,51614],{"class":157},[147,60688,51617],{"class":153},[147,60690,51636],{"class":2237},[147,60692,445],{"class":157},[147,60694,51641],{"class":504},[147,60696,51644],{"class":2237},[147,60698,445],{"class":157},[147,60700,51649],{"class":504},[147,60702,51580],{"class":157},[147,60704,60705,60707,60709,60711,60713,60715,60717,60719,60721],{"class":149,"line":1495},[147,60706,51614],{"class":157},[147,60708,51617],{"class":153},[147,60710,15193],{"class":2237},[147,60712,445],{"class":157},[147,60714,51664],{"class":504},[147,60716,51644],{"class":2237},[147,60718,445],{"class":157},[147,60720,51671],{"class":504},[147,60722,51580],{"class":157},[147,60724,60725,60727,60729,60731,60733],{"class":149,"line":1586},[147,60726,51614],{"class":157},[147,60728,51680],{"class":153},[147,60730,51683],{"class":157},[147,60732,51680],{"class":153},[147,60734,51580],{"class":157},[147,60736,60737,60739,60741],{"class":149,"line":1592},[147,60738,51614],{"class":157},[147,60740,308],{"class":153},[147,60742,51580],{"class":157},[147,60744,60745,60747],{"class":149,"line":1604},[147,60746,51700],{"class":153},[147,60748,15845],{"class":157},[147,60750,60751,60753,60755,60757],{"class":149,"line":1886},[147,60752,51707],{"class":448},[147,60754,51710],{"class":157},[147,60756,590],{"class":448},[147,60758,1565],{"class":157},[147,60760,60761,60763,60765,60767],{"class":149,"line":1891},[147,60762,51719],{"class":448},[147,60764,51710],{"class":157},[147,60766,590],{"class":448},[147,60768,1565],{"class":157},[147,60770,60771,60774,60776,60779],{"class":149,"line":1897},[147,60772,60773],{"class":448},"            box-sizing",[147,60775,51710],{"class":157},[147,60777,60778],{"class":448},"border-box",[147,60780,1565],{"class":157},[147,60782,60783],{"class":149,"line":1902},[147,60784,2803],{"class":157},[147,60786,60787],{"class":149,"line":1916},[147,60788,2674],{"emptyLinePlaceholder":324},[147,60790,60791,60794],{"class":149,"line":1921},[147,60792,60793],{"class":153},"        ul",[147,60795,15845],{"class":157},[147,60797,60798],{"class":149,"line":1927},[147,60799,2674],{"emptyLinePlaceholder":324},[147,60801,60802,60805,60807,60809],{"class":149,"line":1948},[147,60803,60804],{"class":448},"            list-style",[147,60806,51710],{"class":157},[147,60808,55010],{"class":448},[147,60810,1565],{"class":157},[147,60812,60813],{"class":149,"line":1953},[147,60814,2803],{"class":157},[147,60816,60817],{"class":149,"line":1967},[147,60818,2674],{"emptyLinePlaceholder":324},[147,60820,60821,60824],{"class":149,"line":1972},[147,60822,60823],{"class":2237},"        .mi",[147,60825,15845],{"class":157},[147,60827,60828,60831,60833,60835],{"class":149,"line":2001},[147,60829,60830],{"class":448},"            position",[147,60832,51710],{"class":157},[147,60834,55037],{"class":448},[147,60836,1565],{"class":157},[147,60838,60839,60841,60843,60846,60848],{"class":149,"line":2006},[147,60840,51757],{"class":448},[147,60842,51710],{"class":157},[147,60844,60845],{"class":448},"223",[147,60847,51765],{"class":397},[147,60849,1565],{"class":157},[147,60851,60852,60854,60856,60858,60860,60862],{"class":149,"line":2023},[147,60853,51707],{"class":448},[147,60855,51710],{"class":157},[147,60857,710],{"class":448},[147,60859,51765],{"class":397},[147,60861,51829],{"class":448},[147,60863,1565],{"class":157},[147,60865,60866],{"class":149,"line":2028},[147,60867,2803],{"class":157},[147,60869,60870],{"class":149,"line":2033},[147,60871,2674],{"emptyLinePlaceholder":324},[147,60873,60874,60876,60879],{"class":149,"line":2038},[147,60875,60823],{"class":2237},[147,60877,60878],{"class":153}," input",[147,60880,15845],{"class":157},[147,60882,60883,60885,60887,60889,60891],{"class":149,"line":2052},[147,60884,51757],{"class":448},[147,60886,51710],{"class":157},[147,60888,60845],{"class":448},[147,60890,51765],{"class":397},[147,60892,1565],{"class":157},[147,60894,60895,60897,60899,60901,60903],{"class":149,"line":2057},[147,60896,51772],{"class":448},[147,60898,51710],{"class":157},[147,60900,1006],{"class":448},[147,60902,51765],{"class":397},[147,60904,1565],{"class":157},[147,60906,60907,60909,60911,60913,60915,60917],{"class":149,"line":2851},[147,60908,51719],{"class":448},[147,60910,51710],{"class":157},[147,60912,590],{"class":448},[147,60914,2312],{"class":448},[147,60916,51765],{"class":397},[147,60918,1565],{"class":157},[147,60920,60921,60924,60926,60928,60930],{"class":149,"line":2865},[147,60922,60923],{"class":448},"            font-size",[147,60925,51710],{"class":157},[147,60927,948],{"class":448},[147,60929,51765],{"class":397},[147,60931,1565],{"class":157},[147,60933,60934,60937,60939,60941,60943],{"class":149,"line":2873},[147,60935,60936],{"class":448},"            line-height",[147,60938,51710],{"class":157},[147,60940,1006],{"class":448},[147,60942,51765],{"class":397},[147,60944,1565],{"class":157},[147,60946,60947,60950,60952,60954,60956,60958,60961],{"class":149,"line":2878},[147,60948,60949],{"class":448},"            border",[147,60951,51710],{"class":157},[147,60953,616],{"class":448},[147,60955,51765],{"class":397},[147,60957,51794],{"class":448},[147,60959,60960],{"class":448}," #e0e0e0",[147,60962,1565],{"class":157},[147,60964,60965,60968,60970,60972],{"class":149,"line":2884},[147,60966,60967],{"class":448},"            outline",[147,60969,51710],{"class":157},[147,60971,55010],{"class":448},[147,60973,1565],{"class":157},[147,60975,60976],{"class":149,"line":2890},[147,60977,2803],{"class":157},[147,60979,60980],{"class":149,"line":2895},[147,60981,2674],{"emptyLinePlaceholder":324},[147,60983,60984,60986,60989],{"class":149,"line":8222},[147,60985,60823],{"class":2237},[147,60987,60988],{"class":2237}," .search",[147,60990,15845],{"class":157},[147,60992,60993,60995,60997,60999,61001,61003,61006],{"class":149,"line":8246},[147,60994,60949],{"class":448},[147,60996,51710],{"class":157},[147,60998,616],{"class":448},[147,61000,51765],{"class":397},[147,61002,51794],{"class":448},[147,61004,61005],{"class":448}," #ff6700",[147,61007,1565],{"class":157},[147,61009,61010],{"class":149,"line":8251},[147,61011,2803],{"class":157},[147,61013,61014],{"class":149,"line":8257},[147,61015,2674],{"emptyLinePlaceholder":324},[147,61017,61018,61021],{"class":149,"line":8284},[147,61019,61020],{"class":2237},"        .result-list",[147,61022,15845],{"class":157},[147,61024,61025,61027,61029,61031],{"class":149,"line":8289},[147,61026,51745],{"class":448},[147,61028,51710],{"class":157},[147,61030,55010],{"class":448},[147,61032,1565],{"class":157},[147,61034,61035,61037,61039,61041],{"class":149,"line":8295},[147,61036,60830],{"class":448},[147,61038,51710],{"class":157},[147,61040,55104],{"class":448},[147,61042,1565],{"class":157},[147,61044,61045,61048,61050,61052],{"class":149,"line":8307},[147,61046,61047],{"class":448},"            left",[147,61049,51710],{"class":157},[147,61051,590],{"class":448},[147,61053,1565],{"class":157},[147,61055,61056,61059,61061,61063,61065],{"class":149,"line":8319},[147,61057,61058],{"class":448},"            top",[147,61060,51710],{"class":157},[147,61062,1006],{"class":448},[147,61064,51765],{"class":397},[147,61066,1565],{"class":157},[147,61068,61069,61071,61073,61075,61077],{"class":149,"line":8331},[147,61070,51757],{"class":448},[147,61072,51710],{"class":157},[147,61074,60845],{"class":448},[147,61076,51765],{"class":397},[147,61078,1565],{"class":157},[147,61080,61081,61083,61085,61087,61089,61091,61093],{"class":149,"line":9990},[147,61082,60949],{"class":448},[147,61084,51710],{"class":157},[147,61086,616],{"class":448},[147,61088,51765],{"class":397},[147,61090,51794],{"class":448},[147,61092,61005],{"class":448},[147,61094,1565],{"class":157},[147,61096,61097,61100,61102,61104],{"class":149,"line":10015},[147,61098,61099],{"class":448},"            border-top",[147,61101,51710],{"class":157},[147,61103,590],{"class":448},[147,61105,1565],{"class":157},[147,61107,61108,61111,61113,61116],{"class":149,"line":10038},[147,61109,61110],{"class":448},"            background",[147,61112,51710],{"class":157},[147,61114,61115],{"class":448},"#fff",[147,61117,1565],{"class":157},[147,61119,61120],{"class":149,"line":10062},[147,61121,2803],{"class":157},[147,61123,61124],{"class":149,"line":10067},[147,61125,2674],{"emptyLinePlaceholder":324},[147,61127,61128,61130,61132],{"class":149,"line":10072},[147,61129,61020],{"class":2237},[147,61131,1673],{"class":153},[147,61133,15845],{"class":157},[147,61135,61136,61138,61140,61143],{"class":149,"line":10077},[147,61137,51745],{"class":448},[147,61139,51710],{"class":157},[147,61141,61142],{"class":448},"block",[147,61144,1565],{"class":157},[147,61146,61147,61149,61151,61153,61155,61158,61160],{"class":149,"line":10086},[147,61148,51719],{"class":448},[147,61150,51710],{"class":157},[147,61152,743],{"class":448},[147,61154,51765],{"class":397},[147,61156,61157],{"class":448}," 15",[147,61159,51765],{"class":397},[147,61161,1565],{"class":157},[147,61163,61164,61166,61168,61170,61172],{"class":149,"line":10091},[147,61165,60923],{"class":448},[147,61167,51710],{"class":157},[147,61169,897],{"class":448},[147,61171,51765],{"class":397},[147,61173,1565],{"class":157},[147,61175,61176,61179,61181,61184],{"class":149,"line":10097},[147,61177,61178],{"class":448},"            color",[147,61180,51710],{"class":157},[147,61182,61183],{"class":448},"#424242",[147,61185,1565],{"class":157},[147,61187,61188,61191,61193,61195],{"class":149,"line":10118},[147,61189,61190],{"class":448},"            text-decoration",[147,61192,51710],{"class":157},[147,61194,55010],{"class":448},[147,61196,1565],{"class":157},[147,61198,61199],{"class":149,"line":10124},[147,61200,2803],{"class":157},[147,61202,61203],{"class":149,"line":10138},[147,61204,2674],{"emptyLinePlaceholder":324},[147,61206,61207,61209,61211,61214],{"class":149,"line":10144},[147,61208,61020],{"class":2237},[147,61210,1673],{"class":153},[147,61212,61213],{"class":2237},":hover",[147,61215,15845],{"class":157},[147,61217,61218,61220,61222,61225],{"class":149,"line":10171},[147,61219,51913],{"class":448},[147,61221,51710],{"class":157},[147,61223,61224],{"class":448},"#eee",[147,61226,1565],{"class":157},[147,61228,61229],{"class":149,"line":10180},[147,61230,2803],{"class":157},[147,61232,61233,61235,61237],{"class":149,"line":10186},[147,61234,52049],{"class":157},[147,61236,308],{"class":153},[147,61238,51580],{"class":157},[147,61240,61241],{"class":149,"line":10194},[147,61242,2674],{"emptyLinePlaceholder":324},[147,61244,61245,61247,61249],{"class":149,"line":10199},[147,61246,52058],{"class":157},[147,61248,51607],{"class":153},[147,61250,51580],{"class":157},[147,61252,61253],{"class":149,"line":16877},[147,61254,2674],{"emptyLinePlaceholder":324},[147,61256,61257,61259,61261],{"class":149,"line":16883},[147,61258,1309],{"class":157},[147,61260,52073],{"class":153},[147,61262,51580],{"class":157},[147,61264,61265,61267,61269,61271,61273,61276],{"class":149,"line":16906},[147,61266,51614],{"class":157},[147,61268,51884],{"class":153},[147,61270,53759],{"class":2237},[147,61272,445],{"class":157},[147,61274,61275],{"class":504},"\"mi\"",[147,61277,51580],{"class":157},[147,61279,61280,61282,61284,61286,61288,61291,61294,61296,61299],{"class":149,"line":16912},[147,61281,55575],{"class":157},[147,61283,54094],{"class":153},[147,61285,54097],{"class":2237},[147,61287,445],{"class":157},[147,61289,61290],{"class":504},"\"search\"",[147,61292,61293],{"class":2237}," placeholder",[147,61295,445],{"class":157},[147,61297,61298],{"class":504},"\"小米笔记本\"",[147,61300,51580],{"class":157},[147,61302,61303,61305,61307,61309,61311,61314],{"class":149,"line":16935},[147,61304,55575],{"class":157},[147,61306,1406],{"class":153},[147,61308,53759],{"class":2237},[147,61310,445],{"class":157},[147,61312,61313],{"class":504},"\"result-list\"",[147,61315,51580],{"class":157},[147,61317,61318,61321,61323,61326,61328,61331,61333,61336,61339,61341,61343,61345],{"class":149,"line":16949},[147,61319,61320],{"class":157},"            \u003C",[147,61322,353],{"class":153},[147,61324,61325],{"class":157},">\u003C",[147,61327,637],{"class":153},[147,61329,61330],{"class":2237}," href",[147,61332,445],{"class":157},[147,61334,61335],{"class":504},"\"#\"",[147,61337,61338],{"class":157},">全部商品\u003C\u002F",[147,61340,637],{"class":153},[147,61342,55587],{"class":157},[147,61344,353],{"class":153},[147,61346,51580],{"class":157},[147,61348,61349,61351,61353,61355,61357,61359,61361,61363,61366,61368,61370,61372],{"class":149,"line":16969},[147,61350,61320],{"class":157},[147,61352,353],{"class":153},[147,61354,61325],{"class":157},[147,61356,637],{"class":153},[147,61358,61330],{"class":2237},[147,61360,445],{"class":157},[147,61362,61335],{"class":504},[147,61364,61365],{"class":157},">小米11\u003C\u002F",[147,61367,637],{"class":153},[147,61369,55587],{"class":157},[147,61371,353],{"class":153},[147,61373,51580],{"class":157},[147,61375,61376,61378,61380,61382,61384,61386,61388,61390,61393,61395,61397,61399],{"class":149,"line":16975},[147,61377,61320],{"class":157},[147,61379,353],{"class":153},[147,61381,61325],{"class":157},[147,61383,637],{"class":153},[147,61385,61330],{"class":2237},[147,61387,445],{"class":157},[147,61389,61335],{"class":504},[147,61391,61392],{"class":157},">小米10S\u003C\u002F",[147,61394,637],{"class":153},[147,61396,55587],{"class":157},[147,61398,353],{"class":153},[147,61400,51580],{"class":157},[147,61402,61403,61405,61407,61409,61411,61413,61415,61417,61420,61422,61424,61426],{"class":149,"line":16986},[147,61404,61320],{"class":157},[147,61406,353],{"class":153},[147,61408,61325],{"class":157},[147,61410,637],{"class":153},[147,61412,61330],{"class":2237},[147,61414,445],{"class":157},[147,61416,61335],{"class":504},[147,61418,61419],{"class":157},">小米笔记本\u003C\u002F",[147,61421,637],{"class":153},[147,61423,55587],{"class":157},[147,61425,353],{"class":153},[147,61427,51580],{"class":157},[147,61429,61430,61432,61434,61436,61438,61440,61442,61444,61447,61449,61451,61453],{"class":149,"line":17009},[147,61431,61320],{"class":157},[147,61433,353],{"class":153},[147,61435,61325],{"class":157},[147,61437,637],{"class":153},[147,61439,61330],{"class":2237},[147,61441,445],{"class":157},[147,61443,61335],{"class":504},[147,61445,61446],{"class":157},">小米手机\u003C\u002F",[147,61448,637],{"class":153},[147,61450,55587],{"class":157},[147,61452,353],{"class":153},[147,61454,51580],{"class":157},[147,61456,61457,61459,61461,61463,61465,61467,61469,61471,61474,61476,61478,61480],{"class":149,"line":17031},[147,61458,61320],{"class":157},[147,61460,353],{"class":153},[147,61462,61325],{"class":157},[147,61464,637],{"class":153},[147,61466,61330],{"class":2237},[147,61468,445],{"class":157},[147,61470,61335],{"class":504},[147,61472,61473],{"class":157},">黑鲨4\u003C\u002F",[147,61475,637],{"class":153},[147,61477,55587],{"class":157},[147,61479,353],{"class":153},[147,61481,51580],{"class":157},[147,61483,61484,61486,61488,61490,61492,61494,61496,61498,61501,61503,61505,61507],{"class":149,"line":17036},[147,61485,61320],{"class":157},[147,61487,353],{"class":153},[147,61489,61325],{"class":157},[147,61491,637],{"class":153},[147,61493,61330],{"class":2237},[147,61495,445],{"class":157},[147,61497,61335],{"class":504},[147,61499,61500],{"class":157},">空调\u003C\u002F",[147,61502,637],{"class":153},[147,61504,55587],{"class":157},[147,61506,353],{"class":153},[147,61508,51580],{"class":157},[147,61510,61511,61514,61516],{"class":149,"line":17042},[147,61512,61513],{"class":157},"        \u003C\u002F",[147,61515,1406],{"class":153},[147,61517,51580],{"class":157},[147,61519,61520,61522,61524],{"class":149,"line":17056},[147,61521,52049],{"class":157},[147,61523,51884],{"class":153},[147,61525,51580],{"class":157},[147,61527,61528,61530,61532],{"class":149,"line":17069},[147,61529,51614],{"class":157},[147,61531,52086],{"class":153},[147,61533,51580],{"class":157},[147,61535,61536],{"class":149,"line":17074},[147,61537,61538],{"class":458},"        \u002F\u002F 1. 获取元素\n",[147,61540,61541,61544,61546,61548,61550,61552,61554,61557],{"class":149,"line":17088},[147,61542,61543],{"class":397},"        const",[147,61545,60878],{"class":448},[147,61547,13838],{"class":397},[147,61549,54669],{"class":157},[147,61551,54672],{"class":2237},[147,61553,401],{"class":157},[147,61555,61556],{"class":504},"'[type=search]'",[147,61558,407],{"class":157},[147,61560,61561,61563,61566,61568,61570,61572,61574,61577],{"class":149,"line":17093},[147,61562,61543],{"class":397},[147,61564,61565],{"class":448}," ul",[147,61567,13838],{"class":397},[147,61569,54669],{"class":157},[147,61571,54672],{"class":2237},[147,61573,401],{"class":157},[147,61575,61576],{"class":504},"'.result-list'",[147,61578,407],{"class":157},[147,61580,61581],{"class":149,"line":17099},[147,61582,61583],{"class":458},"        \u002F\u002F console.log(input)\n",[147,61585,61586],{"class":149,"line":17104},[147,61587,61588],{"class":458},"        \u002F\u002F 2. 监听事件 获得焦点\n",[147,61590,61591,61594,61596,61598,61601,61603,61605],{"class":149,"line":17118},[147,61592,61593],{"class":157},"        input.",[147,61595,58086],{"class":2237},[147,61597,401],{"class":157},[147,61599,61600],{"class":504},"'focus'",[147,61602,12709],{"class":157},[147,61604,54722],{"class":397},[147,61606,54725],{"class":157},[147,61608,61609],{"class":149,"line":17123},[147,61610,61611],{"class":458},"            \u002F\u002F ul显示\n",[147,61613,61614,61617,61619],{"class":149,"line":17128},[147,61615,61616],{"class":157},"            ul.style.display ",[147,61618,445],{"class":397},[147,61620,61621],{"class":504}," 'block'\n",[147,61623,61624],{"class":149,"line":17142},[147,61625,61626],{"class":458},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[147,61628,61629,61632,61634,61636,61639],{"class":149,"line":17154},[147,61630,61631],{"class":157},"            input.classList.",[147,61633,5608],{"class":2237},[147,61635,401],{"class":157},[147,61637,61638],{"class":504},"'search'",[147,61640,407],{"class":157},[147,61642,61643],{"class":149,"line":17159},[147,61644,61645],{"class":157},"        })\n",[147,61647,61648],{"class":149,"line":17172},[147,61649,61650],{"class":458},"        \u002F\u002F 3. 监听事件 失去焦点\n",[147,61652,61653,61655,61657,61659,61662,61664,61666],{"class":149,"line":17177},[147,61654,61593],{"class":157},[147,61656,58086],{"class":2237},[147,61658,401],{"class":157},[147,61660,61661],{"class":504},"'blur'",[147,61663,12709],{"class":157},[147,61665,54722],{"class":397},[147,61667,54725],{"class":157},[147,61669,61670,61672,61674],{"class":149,"line":17182},[147,61671,61616],{"class":157},[147,61673,445],{"class":397},[147,61675,61676],{"class":504}," 'none'\n",[147,61678,61679,61681,61683,61685,61687],{"class":149,"line":17187},[147,61680,61631],{"class":157},[147,61682,57279],{"class":2237},[147,61684,401],{"class":157},[147,61686,61638],{"class":504},[147,61688,407],{"class":157},[147,61690,61691],{"class":149,"line":17200},[147,61692,61645],{"class":157},[147,61694,61695,61697,61699],{"class":149,"line":17205},[147,61696,52049],{"class":157},[147,61698,52086],{"class":153},[147,61700,51580],{"class":157},[147,61702,61703,61705,61707],{"class":149,"line":32907},[147,61704,52058],{"class":157},[147,61706,52073],{"class":153},[147,61708,51580],{"class":157},[147,61710,61711],{"class":149,"line":32913},[147,61712,2674],{"emptyLinePlaceholder":324},[147,61714,61715,61717,61719],{"class":149,"line":32919},[147,61716,52058],{"class":157},[147,61718,50909],{"class":153},[147,61720,51580],{"class":157},[22271,61722,61724],{"id":61723},"_3253-键盘事件","3.2.5.3 键盘事件",[19,61726,61727],{},"评论字数统计案例",[19,61729,61730],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,61732,61733],{},"牢记focus伪类选择器",[51617,61735],{"charSet":61736},"UTF-8",[51617,61738],{"name":61739,"content":61740},"viewport","width=device-width, initial-scale=1.0",[51680,61742,61743],{},"Document",[308,61745,61746],{},"\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",[54094,61748],{"type":5461},[1406,61750,61751,61754],{},[353,61752,61753],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[353,61755,61756],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[138,61758,61760],{"className":50907,"code":61759,"language":50909,"meta":143,"style":143},"\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",[51,61761,61762,61772,61786,61790,61798,61812,61832,61852,61865,61873,61880,61893,61907,61917,61927,61931,61935,61942,61954,61966,61978,61990,62019,62032,62036,62040,62049,62060,62072,62083,62094,62106,62117,62129,62145,62157,62161,62165,62176,62187,62197,62209,62213,62217,62225,62236,62246,62257,62269,62282,62294,62306,62310,62314,62323,62335,62346,62359,62370,62384,62388,62392,62399,62411,62423,62433,62437,62441,62450,62462,62472,62476,62480,62491,62501,62520,62533,62537,62541,62551,62561,62565,62569,62580,62591,62603,62615,62619,62623,62634,62645,62659,62663,62667,62678,62688,62700,62704,62712,62720,62724,62732,62747,62766,62806,62819,62827,62841,62861,62869,62884,62907,62925,62940,62960,62980,63000,63008,63016,63024,63032,63052,63072,63077,63094,63103,63107,63112,63128,63136,63140,63145,63162,63167,63192,63196,63200,63205,63210,63218,63226,63230],{"__ignoreMap":143},[147,61763,61764,61766,61768,61770],{"class":149,"line":150},[147,61765,51571],{"class":157},[147,61767,51574],{"class":153},[147,61769,51577],{"class":2237},[147,61771,51580],{"class":157},[147,61773,61774,61776,61778,61780,61782,61784],{"class":149,"line":312},[147,61775,1309],{"class":157},[147,61777,50909],{"class":153},[147,61779,51589],{"class":2237},[147,61781,445],{"class":157},[147,61783,51594],{"class":504},[147,61785,51580],{"class":157},[147,61787,61788],{"class":149,"line":1454},[147,61789,2674],{"emptyLinePlaceholder":324},[147,61791,61792,61794,61796],{"class":149,"line":1469},[147,61793,1309],{"class":157},[147,61795,51607],{"class":153},[147,61797,51580],{"class":157},[147,61799,61800,61802,61804,61806,61808,61810],{"class":149,"line":1475},[147,61801,52417],{"class":157},[147,61803,51617],{"class":153},[147,61805,51620],{"class":2237},[147,61807,445],{"class":157},[147,61809,51625],{"class":504},[147,61811,51580],{"class":157},[147,61813,61814,61816,61818,61820,61822,61824,61826,61828,61830],{"class":149,"line":1489},[147,61815,52417],{"class":157},[147,61817,51617],{"class":153},[147,61819,51636],{"class":2237},[147,61821,445],{"class":157},[147,61823,51641],{"class":504},[147,61825,51644],{"class":2237},[147,61827,445],{"class":157},[147,61829,51649],{"class":504},[147,61831,51580],{"class":157},[147,61833,61834,61836,61838,61840,61842,61844,61846,61848,61850],{"class":149,"line":1495},[147,61835,52417],{"class":157},[147,61837,51617],{"class":153},[147,61839,15193],{"class":2237},[147,61841,445],{"class":157},[147,61843,51664],{"class":504},[147,61845,51644],{"class":2237},[147,61847,445],{"class":157},[147,61849,51671],{"class":504},[147,61851,51580],{"class":157},[147,61853,61854,61856,61858,61861,61863],{"class":149,"line":1586},[147,61855,52417],{"class":157},[147,61857,51680],{"class":153},[147,61859,61860],{"class":157},">评论回车发布\u003C\u002F",[147,61862,51680],{"class":153},[147,61864,51580],{"class":157},[147,61866,61867,61869,61871],{"class":149,"line":1592},[147,61868,52417],{"class":157},[147,61870,308],{"class":153},[147,61872,51580],{"class":157},[147,61874,61875,61878],{"class":149,"line":1604},[147,61876,61877],{"class":2237},"    .wrapper",[147,61879,15845],{"class":157},[147,61881,61882,61885,61887,61889,61891],{"class":149,"line":1886},[147,61883,61884],{"class":448},"      min-width",[147,61886,51710],{"class":157},[147,61888,4261],{"class":448},[147,61890,51765],{"class":397},[147,61892,1565],{"class":157},[147,61894,61895,61898,61900,61903,61905],{"class":149,"line":1891},[147,61896,61897],{"class":448},"      max-width",[147,61899,51710],{"class":157},[147,61901,61902],{"class":448},"800",[147,61904,51765],{"class":397},[147,61906,1565],{"class":157},[147,61908,61909,61911,61913,61915],{"class":149,"line":1897},[147,61910,55282],{"class":448},[147,61912,51710],{"class":157},[147,61914,51750],{"class":448},[147,61916,1565],{"class":157},[147,61918,61919,61921,61923,61925],{"class":149,"line":1902},[147,61920,55293],{"class":448},[147,61922,51710],{"class":157},[147,61924,51853],{"class":448},[147,61926,1565],{"class":157},[147,61928,61929],{"class":149,"line":1916},[147,61930,2461],{"class":157},[147,61932,61933],{"class":149,"line":1921},[147,61934,2674],{"emptyLinePlaceholder":324},[147,61936,61937,61940],{"class":149,"line":1927},[147,61938,61939],{"class":2237},"    .avatar",[147,61941,15845],{"class":157},[147,61943,61944,61946,61948,61950,61952],{"class":149,"line":1948},[147,61945,55044],{"class":448},[147,61947,51710],{"class":157},[147,61949,1006],{"class":448},[147,61951,51765],{"class":397},[147,61953,1565],{"class":157},[147,61955,61956,61958,61960,61962,61964],{"class":149,"line":1953},[147,61957,55058],{"class":448},[147,61959,51710],{"class":157},[147,61961,1006],{"class":448},[147,61963,51765],{"class":397},[147,61965,1565],{"class":157},[147,61967,61968,61970,61972,61974,61976],{"class":149,"line":1967},[147,61969,55407],{"class":448},[147,61971,51710],{"class":157},[147,61973,1055],{"class":448},[147,61975,727],{"class":397},[147,61977,1565],{"class":157},[147,61979,61980,61983,61985,61988],{"class":149,"line":1972},[147,61981,61982],{"class":448},"      overflow",[147,61984,51710],{"class":157},[147,61986,61987],{"class":448},"hidden",[147,61989,1565],{"class":157},[147,61991,61992,61995,61997,62000,62002,62005,62007,62010,62012,62014,62017],{"class":149,"line":2001},[147,61993,61994],{"class":448},"      background",[147,61996,51710],{"class":157},[147,61998,61999],{"class":448},"url",[147,62001,401],{"class":157},[147,62003,62004],{"class":5490},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[147,62006,13988],{"class":157},[147,62008,62009],{"class":448},"no-repeat",[147,62011,17417],{"class":448},[147,62013,25252],{"class":157},[147,62015,62016],{"class":448},"cover",[147,62018,1565],{"class":157},[147,62020,62021,62024,62026,62028,62030],{"class":149,"line":2006},[147,62022,62023],{"class":448},"      margin-right",[147,62025,51710],{"class":157},[147,62027,1099],{"class":448},[147,62029,51765],{"class":397},[147,62031,1565],{"class":157},[147,62033,62034],{"class":149,"line":2023},[147,62035,2461],{"class":157},[147,62037,62038],{"class":149,"line":2028},[147,62039,2674],{"emptyLinePlaceholder":324},[147,62041,62042,62044,62047],{"class":149,"line":2033},[147,62043,61877],{"class":2237},[147,62045,62046],{"class":153}," textarea",[147,62048,15845],{"class":157},[147,62050,62051,62054,62056,62058],{"class":149,"line":2038},[147,62052,62053],{"class":448},"      outline",[147,62055,51710],{"class":157},[147,62057,55010],{"class":448},[147,62059,1565],{"class":157},[147,62061,62062,62065,62067,62070],{"class":149,"line":2052},[147,62063,62064],{"class":448},"      border-color",[147,62066,51710],{"class":157},[147,62068,62069],{"class":448},"transparent",[147,62071,1565],{"class":157},[147,62073,62074,62077,62079,62081],{"class":149,"line":2057},[147,62075,62076],{"class":448},"      resize",[147,62078,51710],{"class":157},[147,62080,55010],{"class":448},[147,62082,1565],{"class":157},[147,62084,62085,62087,62089,62092],{"class":149,"line":2851},[147,62086,61994],{"class":448},[147,62088,51710],{"class":157},[147,62090,62091],{"class":448},"#f5f5f5",[147,62093,1565],{"class":157},[147,62095,62096,62098,62100,62102,62104],{"class":149,"line":2865},[147,62097,55407],{"class":448},[147,62099,51710],{"class":157},[147,62101,692],{"class":448},[147,62103,51765],{"class":397},[147,62105,1565],{"class":157},[147,62107,62108,62111,62113,62115],{"class":149,"line":2873},[147,62109,62110],{"class":448},"      flex",[147,62112,51710],{"class":157},[147,62114,616],{"class":448},[147,62116,1565],{"class":157},[147,62118,62119,62121,62123,62125,62127],{"class":149,"line":2878},[147,62120,54968],{"class":448},[147,62122,51710],{"class":157},[147,62124,845],{"class":448},[147,62126,51765],{"class":397},[147,62128,1565],{"class":157},[147,62130,62131,62134,62136,62138,62141,62143],{"class":149,"line":2884},[147,62132,62133],{"class":448},"      transition",[147,62135,51710],{"class":157},[147,62137,28395],{"class":448},[147,62139,62140],{"class":448}," 0.5",[147,62142,1094],{"class":397},[147,62144,1565],{"class":157},[147,62146,62147,62149,62151,62153,62155],{"class":149,"line":2890},[147,62148,55058],{"class":448},[147,62150,51710],{"class":157},[147,62152,1350],{"class":448},[147,62154,51765],{"class":397},[147,62156,1565],{"class":157},[147,62158,62159],{"class":149,"line":2895},[147,62160,2461],{"class":157},[147,62162,62163],{"class":149,"line":8222},[147,62164,2674],{"emptyLinePlaceholder":324},[147,62166,62167,62169,62171,62174],{"class":149,"line":8246},[147,62168,61877],{"class":2237},[147,62170,62046],{"class":153},[147,62172,62173],{"class":2237},":focus",[147,62175,15845],{"class":157},[147,62177,62178,62180,62182,62185],{"class":149,"line":8251},[147,62179,62064],{"class":448},[147,62181,51710],{"class":157},[147,62183,62184],{"class":448},"#e4e4e4",[147,62186,1565],{"class":157},[147,62188,62189,62191,62193,62195],{"class":149,"line":8257},[147,62190,61994],{"class":448},[147,62192,51710],{"class":157},[147,62194,61115],{"class":448},[147,62196,1565],{"class":157},[147,62198,62199,62201,62203,62205,62207],{"class":149,"line":8284},[147,62200,55058],{"class":448},[147,62202,51710],{"class":157},[147,62204,1055],{"class":448},[147,62206,51765],{"class":397},[147,62208,1565],{"class":157},[147,62210,62211],{"class":149,"line":8289},[147,62212,2461],{"class":157},[147,62214,62215],{"class":149,"line":8295},[147,62216,2674],{"emptyLinePlaceholder":324},[147,62218,62219,62221,62223],{"class":149,"line":8307},[147,62220,61877],{"class":2237},[147,62222,57740],{"class":153},[147,62224,15845],{"class":157},[147,62226,62227,62229,62231,62234],{"class":149,"line":8319},[147,62228,61994],{"class":448},[147,62230,51710],{"class":157},[147,62232,62233],{"class":448},"#00aeec",[147,62235,1565],{"class":157},[147,62237,62238,62240,62242,62244],{"class":149,"line":8331},[147,62239,57689],{"class":448},[147,62241,51710],{"class":157},[147,62243,61115],{"class":448},[147,62245,1565],{"class":157},[147,62247,62248,62251,62253,62255],{"class":149,"line":9990},[147,62249,62250],{"class":448},"      border",[147,62252,51710],{"class":157},[147,62254,55010],{"class":448},[147,62256,1565],{"class":157},[147,62258,62259,62261,62263,62265,62267],{"class":149,"line":10015},[147,62260,55407],{"class":448},[147,62262,51710],{"class":157},[147,62264,692],{"class":448},[147,62266,51765],{"class":397},[147,62268,1565],{"class":157},[147,62270,62271,62274,62276,62278,62280],{"class":149,"line":10038},[147,62272,62273],{"class":448},"      margin-left",[147,62275,51710],{"class":157},[147,62277,845],{"class":448},[147,62279,51765],{"class":397},[147,62281,1565],{"class":157},[147,62283,62284,62286,62288,62290,62292],{"class":149,"line":10062},[147,62285,55044],{"class":448},[147,62287,51710],{"class":157},[147,62289,755],{"class":448},[147,62291,51765],{"class":397},[147,62293,1565],{"class":157},[147,62295,62296,62299,62301,62304],{"class":149,"line":10067},[147,62297,62298],{"class":448},"      cursor",[147,62300,51710],{"class":157},[147,62302,62303],{"class":448},"pointer",[147,62305,1565],{"class":157},[147,62307,62308],{"class":149,"line":10072},[147,62309,2461],{"class":157},[147,62311,62312],{"class":149,"line":10077},[147,62313,2674],{"emptyLinePlaceholder":324},[147,62315,62316,62318,62321],{"class":149,"line":10086},[147,62317,61877],{"class":2237},[147,62319,62320],{"class":2237}," .total",[147,62322,15845],{"class":157},[147,62324,62325,62327,62329,62331,62333],{"class":149,"line":10091},[147,62326,62023],{"class":448},[147,62328,51710],{"class":157},[147,62330,1011],{"class":448},[147,62332,51765],{"class":397},[147,62334,1565],{"class":157},[147,62336,62337,62339,62341,62344],{"class":149,"line":10097},[147,62338,57689],{"class":448},[147,62340,51710],{"class":157},[147,62342,62343],{"class":448},"#999",[147,62345,1565],{"class":157},[147,62347,62348,62351,62353,62355,62357],{"class":149,"line":10118},[147,62349,62350],{"class":448},"      margin-top",[147,62352,51710],{"class":157},[147,62354,718],{"class":448},[147,62356,51765],{"class":397},[147,62358,1565],{"class":157},[147,62360,62361,62364,62366,62368],{"class":149,"line":10124},[147,62362,62363],{"class":448},"      opacity",[147,62365,51710],{"class":157},[147,62367,590],{"class":448},[147,62369,1565],{"class":157},[147,62371,62372,62374,62376,62378,62380,62382],{"class":149,"line":10138},[147,62373,62133],{"class":448},[147,62375,51710],{"class":157},[147,62377,28395],{"class":448},[147,62379,62140],{"class":448},[147,62381,1094],{"class":397},[147,62383,1565],{"class":157},[147,62385,62386],{"class":149,"line":10144},[147,62387,2461],{"class":157},[147,62389,62390],{"class":149,"line":10171},[147,62391,2674],{"emptyLinePlaceholder":324},[147,62393,62394,62397],{"class":149,"line":10180},[147,62395,62396],{"class":2237},"    .list",[147,62398,15845],{"class":157},[147,62400,62401,62403,62405,62407,62409],{"class":149,"line":10186},[147,62402,61884],{"class":448},[147,62404,51710],{"class":157},[147,62406,4261],{"class":448},[147,62408,51765],{"class":397},[147,62410,1565],{"class":157},[147,62412,62413,62415,62417,62419,62421],{"class":149,"line":10194},[147,62414,61897],{"class":448},[147,62416,51710],{"class":157},[147,62418,61902],{"class":448},[147,62420,51765],{"class":397},[147,62422,1565],{"class":157},[147,62424,62425,62427,62429,62431],{"class":149,"line":10199},[147,62426,55282],{"class":448},[147,62428,51710],{"class":157},[147,62430,51750],{"class":448},[147,62432,1565],{"class":157},[147,62434,62435],{"class":149,"line":16877},[147,62436,2461],{"class":157},[147,62438,62439],{"class":149,"line":16883},[147,62440,2674],{"emptyLinePlaceholder":324},[147,62442,62443,62445,62448],{"class":149,"line":16906},[147,62444,62396],{"class":2237},[147,62446,62447],{"class":2237}," .item",[147,62449,15845],{"class":157},[147,62451,62452,62454,62456,62458,62460],{"class":149,"line":16912},[147,62453,55044],{"class":448},[147,62455,51710],{"class":157},[147,62457,710],{"class":448},[147,62459,727],{"class":397},[147,62461,1565],{"class":157},[147,62463,62464,62466,62468,62470],{"class":149,"line":16935},[147,62465,55282],{"class":448},[147,62467,51710],{"class":157},[147,62469,51750],{"class":448},[147,62471,1565],{"class":157},[147,62473,62474],{"class":149,"line":16949},[147,62475,2461],{"class":157},[147,62477,62478],{"class":149,"line":16969},[147,62479,2674],{"emptyLinePlaceholder":324},[147,62481,62482,62484,62486,62489],{"class":149,"line":16975},[147,62483,62396],{"class":2237},[147,62485,62447],{"class":2237},[147,62487,62488],{"class":2237}," .info",[147,62490,15845],{"class":157},[147,62492,62493,62495,62497,62499],{"class":149,"line":16986},[147,62494,62110],{"class":448},[147,62496,51710],{"class":157},[147,62498,616],{"class":448},[147,62500,1565],{"class":157},[147,62502,62503,62506,62508,62510,62512,62515,62518],{"class":149,"line":17009},[147,62504,62505],{"class":448},"      border-bottom",[147,62507,51710],{"class":157},[147,62509,616],{"class":448},[147,62511,51765],{"class":397},[147,62513,62514],{"class":448}," dashed",[147,62516,62517],{"class":448}," #e4e4e4",[147,62519,1565],{"class":157},[147,62521,62522,62525,62527,62529,62531],{"class":149,"line":17031},[147,62523,62524],{"class":448},"      padding-bottom",[147,62526,51710],{"class":157},[147,62528,845],{"class":448},[147,62530,51765],{"class":397},[147,62532,1565],{"class":157},[147,62534,62535],{"class":149,"line":17036},[147,62536,2461],{"class":157},[147,62538,62539],{"class":149,"line":17042},[147,62540,2674],{"emptyLinePlaceholder":324},[147,62542,62543,62545,62547,62549],{"class":149,"line":17056},[147,62544,62396],{"class":2237},[147,62546,62447],{"class":2237},[147,62548,7099],{"class":153},[147,62550,15845],{"class":157},[147,62552,62553,62555,62557,62559],{"class":149,"line":17069},[147,62554,54979],{"class":448},[147,62556,51710],{"class":157},[147,62558,590],{"class":448},[147,62560,1565],{"class":157},[147,62562,62563],{"class":149,"line":17074},[147,62564,2461],{"class":157},[147,62566,62567],{"class":149,"line":17088},[147,62568,2674],{"emptyLinePlaceholder":324},[147,62570,62571,62573,62575,62578],{"class":149,"line":17093},[147,62572,62396],{"class":2237},[147,62574,62447],{"class":2237},[147,62576,62577],{"class":2237}," .name",[147,62579,15845],{"class":157},[147,62581,62582,62584,62586,62589],{"class":149,"line":17099},[147,62583,57689],{"class":448},[147,62585,51710],{"class":157},[147,62587,62588],{"class":448},"#FB7299",[147,62590,1565],{"class":157},[147,62592,62593,62595,62597,62599,62601],{"class":149,"line":17104},[147,62594,55195],{"class":448},[147,62596,51710],{"class":157},[147,62598,948],{"class":448},[147,62600,51765],{"class":397},[147,62602,1565],{"class":157},[147,62604,62605,62608,62610,62613],{"class":149,"line":17118},[147,62606,62607],{"class":448},"      font-weight",[147,62609,51710],{"class":157},[147,62611,62612],{"class":448},"bold",[147,62614,1565],{"class":157},[147,62616,62617],{"class":149,"line":17123},[147,62618,2461],{"class":157},[147,62620,62621],{"class":149,"line":17128},[147,62622,2674],{"emptyLinePlaceholder":324},[147,62624,62625,62627,62629,62632],{"class":149,"line":17142},[147,62626,62396],{"class":2237},[147,62628,62447],{"class":2237},[147,62630,62631],{"class":2237}," .text",[147,62633,15845],{"class":157},[147,62635,62636,62638,62640,62643],{"class":149,"line":17154},[147,62637,57689],{"class":448},[147,62639,51710],{"class":157},[147,62641,62642],{"class":448},"#333",[147,62644,1565],{"class":157},[147,62646,62647,62649,62651,62653,62655,62657],{"class":149,"line":17159},[147,62648,54968],{"class":448},[147,62650,51710],{"class":157},[147,62652,845],{"class":448},[147,62654,51765],{"class":397},[147,62656,4367],{"class":448},[147,62658,1565],{"class":157},[147,62660,62661],{"class":149,"line":17172},[147,62662,2461],{"class":157},[147,62664,62665],{"class":149,"line":17177},[147,62666,2674],{"emptyLinePlaceholder":324},[147,62668,62669,62671,62673,62676],{"class":149,"line":17182},[147,62670,62396],{"class":2237},[147,62672,62447],{"class":2237},[147,62674,62675],{"class":2237}," .time",[147,62677,15845],{"class":157},[147,62679,62680,62682,62684,62686],{"class":149,"line":17187},[147,62681,57689],{"class":448},[147,62683,51710],{"class":157},[147,62685,62343],{"class":448},[147,62687,1565],{"class":157},[147,62689,62690,62692,62694,62696,62698],{"class":149,"line":17200},[147,62691,55195],{"class":448},[147,62693,51710],{"class":157},[147,62695,897],{"class":448},[147,62697,51765],{"class":397},[147,62699,1565],{"class":157},[147,62701,62702],{"class":149,"line":17205},[147,62703,2461],{"class":157},[147,62705,62706,62708,62710],{"class":149,"line":32907},[147,62707,52690],{"class":157},[147,62709,308],{"class":153},[147,62711,51580],{"class":157},[147,62713,62714,62716,62718],{"class":149,"line":32913},[147,62715,52058],{"class":157},[147,62717,51607],{"class":153},[147,62719,51580],{"class":157},[147,62721,62722],{"class":149,"line":32919},[147,62723,2674],{"emptyLinePlaceholder":324},[147,62725,62726,62728,62730],{"class":149,"line":32925},[147,62727,1309],{"class":157},[147,62729,52073],{"class":153},[147,62731,51580],{"class":157},[147,62733,62734,62736,62738,62740,62742,62745],{"class":149,"line":32931},[147,62735,52417],{"class":157},[147,62737,51884],{"class":153},[147,62739,53759],{"class":2237},[147,62741,445],{"class":157},[147,62743,62744],{"class":504},"\"wrapper\"",[147,62746,51580],{"class":157},[147,62748,62749,62751,62753,62755,62757,62760,62762,62764],{"class":149,"line":32942},[147,62750,51614],{"class":157},[147,62752,840],{"class":153},[147,62754,53759],{"class":2237},[147,62756,445],{"class":157},[147,62758,62759],{"class":504},"\"avatar\"",[147,62761,55587],{"class":157},[147,62763,840],{"class":153},[147,62765,51580],{"class":157},[147,62767,62768,62770,62772,62774,62776,62779,62781,62783,62786,62788,62790,62792,62795,62797,62800,62802,62804],{"class":149,"line":32948},[147,62769,51614],{"class":157},[147,62771,54561],{"class":153},[147,62773,15232],{"class":2237},[147,62775,445],{"class":157},[147,62777,62778],{"class":504},"\"tx\"",[147,62780,61293],{"class":2237},[147,62782,445],{"class":157},[147,62784,62785],{"class":504},"\"发一条友善的评论\"",[147,62787,54584],{"class":2237},[147,62789,445],{"class":157},[147,62791,3975],{"class":504},[147,62793,62794],{"class":2237}," maxlength",[147,62796,445],{"class":157},[147,62798,62799],{"class":504},"\"200\"",[147,62801,55587],{"class":157},[147,62803,54561],{"class":153},[147,62805,51580],{"class":157},[147,62807,62808,62810,62812,62815,62817],{"class":149,"line":32968},[147,62809,51614],{"class":157},[147,62811,54160],{"class":153},[147,62813,62814],{"class":157},">发布\u003C\u002F",[147,62816,54160],{"class":153},[147,62818,51580],{"class":157},[147,62820,62821,62823,62825],{"class":149,"line":32974},[147,62822,52690],{"class":157},[147,62824,51884],{"class":153},[147,62826,51580],{"class":157},[147,62828,62829,62831,62833,62835,62837,62839],{"class":149,"line":32985},[147,62830,52417],{"class":157},[147,62832,51884],{"class":153},[147,62834,53759],{"class":2237},[147,62836,445],{"class":157},[147,62838,62744],{"class":504},[147,62840,51580],{"class":157},[147,62842,62843,62845,62847,62849,62851,62854,62857,62859],{"class":149,"line":32991},[147,62844,51614],{"class":157},[147,62846,147],{"class":153},[147,62848,53759],{"class":2237},[147,62850,445],{"class":157},[147,62852,62853],{"class":504},"\"total\"",[147,62855,62856],{"class":157},">0\u002F200字\u003C\u002F",[147,62858,147],{"class":153},[147,62860,51580],{"class":157},[147,62862,62863,62865,62867],{"class":149,"line":32997},[147,62864,52690],{"class":157},[147,62866,51884],{"class":153},[147,62868,51580],{"class":157},[147,62870,62871,62873,62875,62877,62879,62882],{"class":149,"line":33003},[147,62872,52417],{"class":157},[147,62874,51884],{"class":153},[147,62876,53759],{"class":2237},[147,62878,445],{"class":157},[147,62880,62881],{"class":504},"\"list\"",[147,62883,51580],{"class":157},[147,62885,62886,62888,62890,62892,62894,62897,62900,62902,62905],{"class":149,"line":33009},[147,62887,51614],{"class":157},[147,62889,51884],{"class":153},[147,62891,53759],{"class":2237},[147,62893,445],{"class":157},[147,62895,62896],{"class":504},"\"item\"",[147,62898,62899],{"class":2237}," style",[147,62901,445],{"class":157},[147,62903,62904],{"class":504},"\"display: none;\"",[147,62906,51580],{"class":157},[147,62908,62909,62911,62913,62915,62917,62919,62921,62923],{"class":149,"line":33015},[147,62910,55507],{"class":157},[147,62912,840],{"class":153},[147,62914,53759],{"class":2237},[147,62916,445],{"class":157},[147,62918,62759],{"class":504},[147,62920,55587],{"class":157},[147,62922,840],{"class":153},[147,62924,51580],{"class":157},[147,62926,62927,62929,62931,62933,62935,62938],{"class":149,"line":33021},[147,62928,55507],{"class":157},[147,62930,51884],{"class":153},[147,62932,53759],{"class":2237},[147,62934,445],{"class":157},[147,62936,62937],{"class":504},"\"info\"",[147,62939,51580],{"class":157},[147,62941,62942,62944,62946,62948,62950,62953,62956,62958],{"class":149,"line":33027},[147,62943,55575],{"class":157},[147,62945,19],{"class":153},[147,62947,53759],{"class":2237},[147,62949,445],{"class":157},[147,62951,62952],{"class":504},"\"name\"",[147,62954,62955],{"class":157},">清风徐来\u003C\u002F",[147,62957,19],{"class":153},[147,62959,51580],{"class":157},[147,62961,62962,62964,62966,62968,62970,62973,62976,62978],{"class":149,"line":33047},[147,62963,55575],{"class":157},[147,62965,19],{"class":153},[147,62967,53759],{"class":2237},[147,62969,445],{"class":157},[147,62971,62972],{"class":504},"\"text\"",[147,62974,62975],{"class":157},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[147,62977,19],{"class":153},[147,62979,51580],{"class":157},[147,62981,62982,62984,62986,62988,62990,62993,62996,62998],{"class":149,"line":33053},[147,62983,55575],{"class":157},[147,62985,19],{"class":153},[147,62987,53759],{"class":2237},[147,62989,445],{"class":157},[147,62991,62992],{"class":504},"\"time\"",[147,62994,62995],{"class":157},">2022-10-10 20:29:21\u003C\u002F",[147,62997,19],{"class":153},[147,62999,51580],{"class":157},[147,63001,63002,63004,63006],{"class":149,"line":33069},[147,63003,55680],{"class":157},[147,63005,51884],{"class":153},[147,63007,51580],{"class":157},[147,63009,63010,63012,63014],{"class":149,"line":33075},[147,63011,52049],{"class":157},[147,63013,51884],{"class":153},[147,63015,51580],{"class":157},[147,63017,63018,63020,63022],{"class":149,"line":33089},[147,63019,52690],{"class":157},[147,63021,51884],{"class":153},[147,63023,51580],{"class":157},[147,63025,63026,63028,63030],{"class":149,"line":33095},[147,63027,52417],{"class":157},[147,63029,52086],{"class":153},[147,63031,51580],{"class":157},[147,63033,63034,63036,63039,63041,63043,63045,63047,63050],{"class":149,"line":33110},[147,63035,11495],{"class":397},[147,63037,63038],{"class":448}," tx",[147,63040,13838],{"class":397},[147,63042,54669],{"class":157},[147,63044,54672],{"class":2237},[147,63046,401],{"class":157},[147,63048,63049],{"class":504},"'#tx'",[147,63051,407],{"class":157},[147,63053,63054,63056,63059,63061,63063,63065,63067,63070],{"class":149,"line":33116},[147,63055,11495],{"class":397},[147,63057,63058],{"class":448}," total",[147,63060,13838],{"class":397},[147,63062,54669],{"class":157},[147,63064,54672],{"class":2237},[147,63066,401],{"class":157},[147,63068,63069],{"class":504},"'.total'",[147,63071,407],{"class":157},[147,63073,63074],{"class":149,"line":33125},[147,63075,63076],{"class":458},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[147,63078,63079,63082,63084,63086,63088,63090,63092],{"class":149,"line":33131},[147,63080,63081],{"class":157},"    tx.",[147,63083,58086],{"class":2237},[147,63085,401],{"class":157},[147,63087,61600],{"class":504},[147,63089,12709],{"class":157},[147,63091,54722],{"class":397},[147,63093,54725],{"class":157},[147,63095,63096,63099,63101],{"class":149,"line":33140},[147,63097,63098],{"class":157},"      total.style.opacity ",[147,63100,445],{"class":397},[147,63102,55972],{"class":448},[147,63104,63105],{"class":149,"line":33146},[147,63106,33735],{"class":157},[147,63108,63109],{"class":149,"line":33152},[147,63110,63111],{"class":458},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[147,63113,63114,63116,63118,63120,63122,63124,63126],{"class":149,"line":33161},[147,63115,63081],{"class":157},[147,63117,58086],{"class":2237},[147,63119,401],{"class":157},[147,63121,61661],{"class":504},[147,63123,12709],{"class":157},[147,63125,54722],{"class":397},[147,63127,54725],{"class":157},[147,63129,63130,63132,63134],{"class":149,"line":33167},[147,63131,63098],{"class":157},[147,63133,445],{"class":397},[147,63135,47607],{"class":448},[147,63137,63138],{"class":149,"line":33178},[147,63139,33735],{"class":157},[147,63141,63142],{"class":149,"line":33184},[147,63143,63144],{"class":458},"    \u002F\u002F 3. 检测用户输入\n",[147,63146,63147,63149,63151,63153,63156,63158,63160],{"class":149,"line":33203},[147,63148,63081],{"class":157},[147,63150,58086],{"class":2237},[147,63152,401],{"class":157},[147,63154,63155],{"class":504},"'input'",[147,63157,12709],{"class":157},[147,63159,54722],{"class":397},[147,63161,54725],{"class":157},[147,63163,63164],{"class":149,"line":33209},[147,63165,63166],{"class":458},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[147,63168,63169,63172,63174,63177,63180,63182,63185,63187,63189],{"class":149,"line":33220},[147,63170,63171],{"class":157},"      total.innerHTML ",[147,63173,445],{"class":397},[147,63175,63176],{"class":504}," `${",[147,63178,63179],{"class":157},"tx",[147,63181,957],{"class":504},[147,63183,63184],{"class":157},"value",[147,63186,957],{"class":504},[147,63188,52241],{"class":448},[147,63190,63191],{"class":504},"}\u002F200字`\n",[147,63193,63194],{"class":149,"line":33226},[147,63195,33735],{"class":157},[147,63197,63198],{"class":149,"line":33246},[147,63199,2674],{"emptyLinePlaceholder":324},[147,63201,63202],{"class":149,"line":33262},[147,63203,63204],{"class":458},"    \u002F\u002F const str = 'andy'\n",[147,63206,63207],{"class":149,"line":33268},[147,63208,63209],{"class":458},"    \u002F\u002F console.log(str.length)\n",[147,63211,63212,63214,63216],{"class":149,"line":33282},[147,63213,52690],{"class":157},[147,63215,52086],{"class":153},[147,63217,51580],{"class":157},[147,63219,63220,63222,63224],{"class":149,"line":33288},[147,63221,52058],{"class":157},[147,63223,52073],{"class":153},[147,63225,51580],{"class":157},[147,63227,63228],{"class":149,"line":33294},[147,63229,2674],{"emptyLinePlaceholder":324},[147,63231,63232,63234,63236],{"class":149,"line":33305},[147,63233,52058],{"class":157},[147,63235,50909],{"class":153},[147,63237,51580],{"class":157},[22271,63239,63241],{"id":63240},"_3254-change事件","3.2.5.4 change事件",[19,63243,63244],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,63246,63247],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,63249,63250],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[138,63252,63254],{"className":50907,"code":63253,"language":50909,"meta":143,"style":143},"\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",[51,63255,63256,63266,63280,63284,63292,63306,63326,63338,63346,63350,63358,63372,63380,63398,63416,63428,63432,63440,63448,63452],{"__ignoreMap":143},[147,63257,63258,63260,63262,63264],{"class":149,"line":150},[147,63259,51571],{"class":157},[147,63261,51574],{"class":153},[147,63263,51577],{"class":2237},[147,63265,51580],{"class":157},[147,63267,63268,63270,63272,63274,63276,63278],{"class":149,"line":312},[147,63269,1309],{"class":157},[147,63271,50909],{"class":153},[147,63273,51589],{"class":2237},[147,63275,445],{"class":157},[147,63277,51594],{"class":504},[147,63279,51580],{"class":157},[147,63281,63282],{"class":149,"line":1454},[147,63283,2674],{"emptyLinePlaceholder":324},[147,63285,63286,63288,63290],{"class":149,"line":1469},[147,63287,1309],{"class":157},[147,63289,51607],{"class":153},[147,63291,51580],{"class":157},[147,63293,63294,63296,63298,63300,63302,63304],{"class":149,"line":1475},[147,63295,52417],{"class":157},[147,63297,51617],{"class":153},[147,63299,51620],{"class":2237},[147,63301,445],{"class":157},[147,63303,51625],{"class":504},[147,63305,51580],{"class":157},[147,63307,63308,63310,63312,63314,63316,63318,63320,63322,63324],{"class":149,"line":1489},[147,63309,52417],{"class":157},[147,63311,51617],{"class":153},[147,63313,15193],{"class":2237},[147,63315,445],{"class":157},[147,63317,51664],{"class":504},[147,63319,51644],{"class":2237},[147,63321,445],{"class":157},[147,63323,51671],{"class":504},[147,63325,51580],{"class":157},[147,63327,63328,63330,63332,63334,63336],{"class":149,"line":1495},[147,63329,52417],{"class":157},[147,63331,51680],{"class":153},[147,63333,51683],{"class":157},[147,63335,51680],{"class":153},[147,63337,51580],{"class":157},[147,63339,63340,63342,63344],{"class":149,"line":1586},[147,63341,52058],{"class":157},[147,63343,51607],{"class":153},[147,63345,51580],{"class":157},[147,63347,63348],{"class":149,"line":1592},[147,63349,2674],{"emptyLinePlaceholder":324},[147,63351,63352,63354,63356],{"class":149,"line":1604},[147,63353,1309],{"class":157},[147,63355,52073],{"class":153},[147,63357,51580],{"class":157},[147,63359,63360,63362,63364,63366,63368,63370],{"class":149,"line":1886},[147,63361,52417],{"class":157},[147,63363,54094],{"class":153},[147,63365,54097],{"class":2237},[147,63367,445],{"class":157},[147,63369,62972],{"class":504},[147,63371,51580],{"class":157},[147,63373,63374,63376,63378],{"class":149,"line":1891},[147,63375,52417],{"class":157},[147,63377,52086],{"class":153},[147,63379,51580],{"class":157},[147,63381,63382,63384,63386,63388,63390,63392,63394,63396],{"class":149,"line":1897},[147,63383,11495],{"class":397},[147,63385,60878],{"class":448},[147,63387,13838],{"class":397},[147,63389,54669],{"class":157},[147,63391,54672],{"class":2237},[147,63393,401],{"class":157},[147,63395,63155],{"class":504},[147,63397,407],{"class":157},[147,63399,63400,63403,63405,63407,63410,63412,63414],{"class":149,"line":1902},[147,63401,63402],{"class":157},"    input.",[147,63404,58086],{"class":2237},[147,63406,401],{"class":157},[147,63408,63409],{"class":504},"'change'",[147,63411,12709],{"class":157},[147,63413,54722],{"class":397},[147,63415,54725],{"class":157},[147,63417,63418,63420,63422,63424,63426],{"class":149,"line":1916},[147,63419,58517],{"class":157},[147,63421,58520],{"class":2237},[147,63423,401],{"class":157},[147,63425,992],{"class":448},[147,63427,407],{"class":157},[147,63429,63430],{"class":149,"line":1921},[147,63431,33735],{"class":157},[147,63433,63434,63436,63438],{"class":149,"line":1927},[147,63435,52690],{"class":157},[147,63437,52086],{"class":153},[147,63439,51580],{"class":157},[147,63441,63442,63444,63446],{"class":149,"line":1948},[147,63443,52058],{"class":157},[147,63445,52073],{"class":153},[147,63447,51580],{"class":157},[147,63449,63450],{"class":149,"line":1953},[147,63451,2674],{"emptyLinePlaceholder":324},[147,63453,63454,63456,63458],{"class":149,"line":1967},[147,63455,52058],{"class":157},[147,63457,50909],{"class":153},[147,63459,51580],{"class":157},[19,63461,63462],{},"总结：内容发生改变才回去触发",[367,63464,63466],{"id":63465},"_326-事件对象","3.2.6 事件对象",[22271,63468,63470],{"id":63469},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,63472,63473],{},[29,63474],{"alt":143,"src":63475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,63477,63478],{},[29,63479],{"alt":143,"src":63480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,63482,63483],{},"点击一次，就输出了事件对象，它是个对象",[19,63485,63486],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,63488,63489],{},[29,63490],{"alt":143,"src":63491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22271,63493,63495],{"id":63494},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,63497,63498],{},[29,63499],{"alt":143,"src":63500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,63502,63503],{},"实现按特殊字符才是实现打印输出效果：",[138,63505,63507],{"className":53340,"code":63506,"language":53342,"meta":143,"style":143},"\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",[51,63508,63509,63517,63522,63536,63544,63549,63554,63559,63564,63569,63574,63579,63584,63589,63593,63597,63605],{"__ignoreMap":143},[147,63510,63511,63513,63515],{"class":149,"line":150},[147,63512,1309],{"class":157},[147,63514,52073],{"class":153},[147,63516,51580],{"class":157},[147,63518,63519],{"class":149,"line":312},[147,63520,63521],{"class":458},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[147,63523,63524,63526,63528,63530,63532,63534],{"class":149,"line":1454},[147,63525,52417],{"class":157},[147,63527,54094],{"class":153},[147,63529,54097],{"class":2237},[147,63531,445],{"class":157},[147,63533,62972],{"class":504},[147,63535,51580],{"class":157},[147,63537,63538,63540,63542],{"class":149,"line":1469},[147,63539,52417],{"class":157},[147,63541,52086],{"class":153},[147,63543,51580],{"class":157},[147,63545,63546],{"class":149,"line":1475},[147,63547,63548],{"class":157},"    \u002F\u002F const btn = document.querySelector('button')\n",[147,63550,63551],{"class":149,"line":1489},[147,63552,63553],{"class":157},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[147,63555,63556],{"class":149,"line":1495},[147,63557,63558],{"class":157},"    \u002F\u002F   console.log(e);\n",[147,63560,63561],{"class":149,"line":1586},[147,63562,63563],{"class":157},"    \u002F\u002F })\n",[147,63565,63566],{"class":149,"line":1592},[147,63567,63568],{"class":157},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[147,63570,63571],{"class":149,"line":1604},[147,63572,63573],{"class":157},"    const input = document.querySelector('input')\n",[147,63575,63576],{"class":149,"line":1886},[147,63577,63578],{"class":157},"    input.addEventListener('keyup', function (e) {\n",[147,63580,63581],{"class":149,"line":1891},[147,63582,63583],{"class":157},"      if (e.key === 'Enter') {\n",[147,63585,63586],{"class":149,"line":1897},[147,63587,63588],{"class":157},"        console.log('我按下了回车键')\n",[147,63590,63591],{"class":149,"line":1902},[147,63592,52671],{"class":157},[147,63594,63595],{"class":149,"line":1916},[147,63596,33735],{"class":157},[147,63598,63599,63601,63603],{"class":149,"line":1921},[147,63600,52690],{"class":157},[147,63602,52086],{"class":153},[147,63604,51580],{"class":157},[147,63606,63607,63609,63611],{"class":149,"line":1927},[147,63608,52058],{"class":157},[147,63610,52073],{"class":153},[147,63612,51580],{"class":157},[22271,63614,63616],{"id":63615},"_3263-trim方法","3.2.6.3 trim方法",[19,63618,63619],{},[29,63620],{"alt":143,"src":63621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,63623,63624],{},[29,63625],{"alt":143,"src":63626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,63628,63629],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,63631,63632],{},"str.trim()",[367,63634,63636],{"id":63635},"_327-环境对象","3.2.7 环境对象",[19,63638,63639],{},[29,63640],{"alt":143,"src":63641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,63643,63644],{},[29,63645],{"alt":143,"src":63646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,63648,63649],{},[29,63650],{"alt":143,"src":63651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,63653,63654],{},"实际函数调用是window.fn()",[19,63656,63657],{},"普通函数里面this指向的是window",[1406,63659,63660,63663,63666],{},[353,63661,63662],{},"在普通函数下，this指向的是window",[353,63664,63665],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[353,63667,63668],{},"箭头函数没有this",[19,63670,63671],{},"粗略记法就是：谁调用，this就指向谁",[19,63673,63674],{},[29,63675],{"alt":143,"src":63676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,63678,63679],{},[29,63680],{"alt":143,"src":63681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,63683,63684],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,63686,63687],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[138,63689,63691],{"className":53340,"code":63690,"language":53342,"meta":143,"style":143},"\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",[51,63692,63693,63701,63713,63721,63726,63731,63736,63741,63745,63753],{"__ignoreMap":143},[147,63694,63695,63697,63699],{"class":149,"line":150},[147,63696,1309],{"class":157},[147,63698,52073],{"class":153},[147,63700,51580],{"class":157},[147,63702,63703,63705,63707,63709,63711],{"class":149,"line":312},[147,63704,52417],{"class":157},[147,63706,54160],{"class":153},[147,63708,54166],{"class":157},[147,63710,54160],{"class":153},[147,63712,51580],{"class":157},[147,63714,63715,63717,63719],{"class":149,"line":1454},[147,63716,52417],{"class":157},[147,63718,52086],{"class":153},[147,63720,51580],{"class":157},[147,63722,63723],{"class":149,"line":1469},[147,63724,63725],{"class":157},"    const button = document.querySelector('button')\n",[147,63727,63728],{"class":149,"line":1475},[147,63729,63730],{"class":157},"    button.addEventListener('click', function () {\n",[147,63732,63733],{"class":149,"line":1489},[147,63734,63735],{"class":157},"      \u002F\u002F console.log(this);\n",[147,63737,63738],{"class":149,"line":1495},[147,63739,63740],{"class":157},"      this.style.color = 'pink'\n",[147,63742,63743],{"class":149,"line":1586},[147,63744,33735],{"class":157},[147,63746,63747,63749,63751],{"class":149,"line":1592},[147,63748,52690],{"class":157},[147,63750,52086],{"class":153},[147,63752,51580],{"class":157},[147,63754,63755,63757,63759],{"class":149,"line":1604},[147,63756,52058],{"class":157},[147,63758,52073],{"class":153},[147,63760,51580],{"class":157},[367,63762,63764],{"id":63763},"_328-回调函数","3.2.8 回调函数",[19,63766,63767],{},[29,63768],{"alt":143,"src":63769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,63771,63772],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,63774,11606],{},[1406,63776,63777,63780,63783],{},[353,63778,63779],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[353,63781,63782],{},"回调函数本质还是函数，只不过把它当成参数使用",[353,63784,63785],{},"使用匿名函数做为回调函数比较常见",[367,63787,63789],{"id":63788},"_329-tab栏切换","3.2.9 tab栏切换",[19,63791,63792],{},[29,63793],{"alt":143,"src":63794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[138,63796,63798],{"className":50907,"code":63797,"language":50909,"meta":143,"style":143},"\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",[51,63799,63800,63810,63824,63828,63836,63850,63870,63890,63903,63911,63917,63927,63937,63941,63945,63952,63965,63978,63990,64006,64010,64014,64021,64033,64045,64057,64067,64077,64081,64085,64094,64106,64117,64129,64133,64137,64145,64155,64165,64175,64179,64183,64193,64207,64219,64223,64227,64239,64250,64267,64277,64281,64285,64300,64311,64321,64325,64329,64336,64351,64355,64359,64367,64377,64381,64385,64394,64404,64408,64416,64424,64428,64436,64451,64466,64479,64487,64521,64548,64575,64602,64629,64637,64645,64660,64697,64732,64767,64802,64837,64845,64853,64861,64866,64871,64891,64896,64925,64930,64935,64953,64958,64963,64968,64990,64995,65011,65015,65020,65025,65046,65051,65080,65084,65089,65093,65101,65109,65113],{"__ignoreMap":143},[147,63801,63802,63804,63806,63808],{"class":149,"line":150},[147,63803,51571],{"class":157},[147,63805,51574],{"class":153},[147,63807,51577],{"class":2237},[147,63809,51580],{"class":157},[147,63811,63812,63814,63816,63818,63820,63822],{"class":149,"line":312},[147,63813,1309],{"class":157},[147,63815,50909],{"class":153},[147,63817,51589],{"class":2237},[147,63819,445],{"class":157},[147,63821,51594],{"class":504},[147,63823,51580],{"class":157},[147,63825,63826],{"class":149,"line":1454},[147,63827,2674],{"emptyLinePlaceholder":324},[147,63829,63830,63832,63834],{"class":149,"line":1469},[147,63831,1309],{"class":157},[147,63833,51607],{"class":153},[147,63835,51580],{"class":157},[147,63837,63838,63840,63842,63844,63846,63848],{"class":149,"line":1475},[147,63839,52417],{"class":157},[147,63841,51617],{"class":153},[147,63843,51620],{"class":2237},[147,63845,445],{"class":157},[147,63847,51625],{"class":504},[147,63849,59400],{"class":157},[147,63851,63852,63854,63856,63858,63860,63862,63864,63866,63868],{"class":149,"line":1489},[147,63853,52417],{"class":157},[147,63855,51617],{"class":153},[147,63857,51636],{"class":2237},[147,63859,445],{"class":157},[147,63861,51641],{"class":504},[147,63863,51644],{"class":2237},[147,63865,445],{"class":157},[147,63867,51649],{"class":504},[147,63869,59400],{"class":157},[147,63871,63872,63874,63876,63878,63880,63882,63884,63886,63888],{"class":149,"line":1495},[147,63873,52417],{"class":157},[147,63875,51617],{"class":153},[147,63877,15193],{"class":2237},[147,63879,445],{"class":157},[147,63881,51664],{"class":504},[147,63883,51644],{"class":2237},[147,63885,445],{"class":157},[147,63887,51671],{"class":504},[147,63889,59400],{"class":157},[147,63891,63892,63894,63896,63899,63901],{"class":149,"line":1586},[147,63893,52417],{"class":157},[147,63895,51680],{"class":153},[147,63897,63898],{"class":157},">tab栏切换\u003C\u002F",[147,63900,51680],{"class":153},[147,63902,51580],{"class":157},[147,63904,63905,63907,63909],{"class":149,"line":1592},[147,63906,52417],{"class":157},[147,63908,308],{"class":153},[147,63910,51580],{"class":157},[147,63912,63913,63915],{"class":149,"line":1604},[147,63914,6677],{"class":153},[147,63916,15845],{"class":157},[147,63918,63919,63921,63923,63925],{"class":149,"line":1886},[147,63920,54979],{"class":448},[147,63922,51710],{"class":157},[147,63924,590],{"class":448},[147,63926,1565],{"class":157},[147,63928,63929,63931,63933,63935],{"class":149,"line":1891},[147,63930,54968],{"class":448},[147,63932,51710],{"class":157},[147,63934,590],{"class":448},[147,63936,1565],{"class":157},[147,63938,63939],{"class":149,"line":1897},[147,63940,2461],{"class":157},[147,63942,63943],{"class":149,"line":1902},[147,63944,2674],{"emptyLinePlaceholder":324},[147,63946,63947,63950],{"class":149,"line":1916},[147,63948,63949],{"class":2237},"    .tab",[147,63951,15845],{"class":157},[147,63953,63954,63956,63958,63961,63963],{"class":149,"line":1921},[147,63955,55044],{"class":448},[147,63957,51710],{"class":157},[147,63959,63960],{"class":448},"590",[147,63962,51765],{"class":397},[147,63964,1565],{"class":157},[147,63966,63967,63969,63971,63974,63976],{"class":149,"line":1927},[147,63968,55058],{"class":448},[147,63970,51710],{"class":157},[147,63972,63973],{"class":448},"340",[147,63975,51765],{"class":397},[147,63977,1565],{"class":157},[147,63979,63980,63982,63984,63986,63988],{"class":149,"line":1948},[147,63981,54979],{"class":448},[147,63983,51710],{"class":157},[147,63985,1099],{"class":448},[147,63987,51765],{"class":397},[147,63989,1565],{"class":157},[147,63991,63992,63994,63996,63998,64000,64002,64004],{"class":149,"line":1953},[147,63993,62250],{"class":448},[147,63995,51710],{"class":157},[147,63997,616],{"class":448},[147,63999,51765],{"class":397},[147,64001,51794],{"class":448},[147,64003,62517],{"class":448},[147,64005,1565],{"class":157},[147,64007,64008],{"class":149,"line":1967},[147,64009,2461],{"class":157},[147,64011,64012],{"class":149,"line":1972},[147,64013,2674],{"emptyLinePlaceholder":324},[147,64015,64016,64019],{"class":149,"line":2001},[147,64017,64018],{"class":2237},"    .tab-nav",[147,64020,15845],{"class":157},[147,64022,64023,64025,64027,64029,64031],{"class":149,"line":2006},[147,64024,55044],{"class":448},[147,64026,51710],{"class":157},[147,64028,710],{"class":448},[147,64030,727],{"class":397},[147,64032,1565],{"class":157},[147,64034,64035,64037,64039,64041,64043],{"class":149,"line":2023},[147,64036,55058],{"class":448},[147,64038,51710],{"class":157},[147,64040,1306],{"class":448},[147,64042,51765],{"class":397},[147,64044,1565],{"class":157},[147,64046,64047,64049,64051,64053,64055],{"class":149,"line":2028},[147,64048,57632],{"class":448},[147,64050,51710],{"class":157},[147,64052,1306],{"class":448},[147,64054,51765],{"class":397},[147,64056,1565],{"class":157},[147,64058,64059,64061,64063,64065],{"class":149,"line":2033},[147,64060,55282],{"class":448},[147,64062,51710],{"class":157},[147,64064,51750],{"class":448},[147,64066,1565],{"class":157},[147,64068,64069,64071,64073,64075],{"class":149,"line":2038},[147,64070,55293],{"class":448},[147,64072,51710],{"class":157},[147,64074,51941],{"class":448},[147,64076,1565],{"class":157},[147,64078,64079],{"class":149,"line":2052},[147,64080,2461],{"class":157},[147,64082,64083],{"class":149,"line":2057},[147,64084,2674],{"emptyLinePlaceholder":324},[147,64086,64087,64089,64092],{"class":149,"line":2851},[147,64088,64018],{"class":2237},[147,64090,64091],{"class":153}," h3",[147,64093,15845],{"class":157},[147,64095,64096,64098,64100,64102,64104],{"class":149,"line":2865},[147,64097,55195],{"class":448},[147,64099,51710],{"class":157},[147,64101,1199],{"class":448},[147,64103,51765],{"class":397},[147,64105,1565],{"class":157},[147,64107,64108,64110,64112,64115],{"class":149,"line":2873},[147,64109,62607],{"class":448},[147,64111,51710],{"class":157},[147,64113,64114],{"class":448},"normal",[147,64116,1565],{"class":157},[147,64118,64119,64121,64123,64125,64127],{"class":149,"line":2878},[147,64120,62273],{"class":448},[147,64122,51710],{"class":157},[147,64124,1099],{"class":448},[147,64126,51765],{"class":397},[147,64128,1565],{"class":157},[147,64130,64131],{"class":149,"line":2884},[147,64132,2461],{"class":157},[147,64134,64135],{"class":149,"line":2890},[147,64136,2674],{"emptyLinePlaceholder":324},[147,64138,64139,64141,64143],{"class":149,"line":2895},[147,64140,64018],{"class":2237},[147,64142,61565],{"class":153},[147,64144,15845],{"class":157},[147,64146,64147,64149,64151,64153],{"class":149,"line":8222},[147,64148,55005],{"class":448},[147,64150,51710],{"class":157},[147,64152,55010],{"class":448},[147,64154,1565],{"class":157},[147,64156,64157,64159,64161,64163],{"class":149,"line":8246},[147,64158,55282],{"class":448},[147,64160,51710],{"class":157},[147,64162,51750],{"class":448},[147,64164,1565],{"class":157},[147,64166,64167,64169,64171,64173],{"class":149,"line":8251},[147,64168,55293],{"class":448},[147,64170,51710],{"class":157},[147,64172,51853],{"class":448},[147,64174,1565],{"class":157},[147,64176,64177],{"class":149,"line":8257},[147,64178,2461],{"class":157},[147,64180,64181],{"class":149,"line":8284},[147,64182,2674],{"emptyLinePlaceholder":324},[147,64184,64185,64187,64189,64191],{"class":149,"line":8289},[147,64186,64018],{"class":2237},[147,64188,61565],{"class":153},[147,64190,55348],{"class":153},[147,64192,15845],{"class":157},[147,64194,64195,64197,64199,64201,64203,64205],{"class":149,"line":8295},[147,64196,54979],{"class":448},[147,64198,51710],{"class":157},[147,64200,590],{"class":448},[147,64202,9224],{"class":448},[147,64204,51765],{"class":397},[147,64206,1565],{"class":157},[147,64208,64209,64211,64213,64215,64217],{"class":149,"line":8307},[147,64210,55195],{"class":448},[147,64212,51710],{"class":157},[147,64214,948],{"class":448},[147,64216,51765],{"class":397},[147,64218,1565],{"class":157},[147,64220,64221],{"class":149,"line":8319},[147,64222,2461],{"class":157},[147,64224,64225],{"class":149,"line":8331},[147,64226,2674],{"emptyLinePlaceholder":324},[147,64228,64229,64231,64233,64235,64237],{"class":149,"line":9990},[147,64230,64018],{"class":2237},[147,64232,61565],{"class":153},[147,64234,55348],{"class":153},[147,64236,1673],{"class":153},[147,64238,15845],{"class":157},[147,64240,64241,64244,64246,64248],{"class":149,"line":10015},[147,64242,64243],{"class":448},"      text-decoration",[147,64245,51710],{"class":157},[147,64247,55010],{"class":448},[147,64249,1565],{"class":157},[147,64251,64252,64254,64256,64258,64260,64262,64265],{"class":149,"line":10038},[147,64253,62505],{"class":448},[147,64255,51710],{"class":157},[147,64257,477],{"class":448},[147,64259,51765],{"class":397},[147,64261,51794],{"class":448},[147,64263,64264],{"class":448}," transparent",[147,64266,1565],{"class":157},[147,64268,64269,64271,64273,64275],{"class":149,"line":10062},[147,64270,57689],{"class":448},[147,64272,51710],{"class":157},[147,64274,62642],{"class":448},[147,64276,1565],{"class":157},[147,64278,64279],{"class":149,"line":10067},[147,64280,2461],{"class":157},[147,64282,64283],{"class":149,"line":10072},[147,64284,2674],{"emptyLinePlaceholder":324},[147,64286,64287,64289,64291,64293,64295,64298],{"class":149,"line":10077},[147,64288,64018],{"class":2237},[147,64290,61565],{"class":153},[147,64292,55348],{"class":153},[147,64294,1673],{"class":153},[147,64296,64297],{"class":2237},".active",[147,64299,15845],{"class":157},[147,64301,64302,64304,64306,64309],{"class":149,"line":10086},[147,64303,62064],{"class":448},[147,64305,51710],{"class":157},[147,64307,64308],{"class":448},"#e1251b",[147,64310,1565],{"class":157},[147,64312,64313,64315,64317,64319],{"class":149,"line":10091},[147,64314,57689],{"class":448},[147,64316,51710],{"class":157},[147,64318,64308],{"class":448},[147,64320,1565],{"class":157},[147,64322,64323],{"class":149,"line":10097},[147,64324,2461],{"class":157},[147,64326,64327],{"class":149,"line":10118},[147,64328,2674],{"emptyLinePlaceholder":324},[147,64330,64331,64334],{"class":149,"line":10124},[147,64332,64333],{"class":2237},"    .tab-content",[147,64335,15845],{"class":157},[147,64337,64338,64340,64342,64344,64347,64349],{"class":149,"line":10138},[147,64339,54968],{"class":448},[147,64341,51710],{"class":157},[147,64343,590],{"class":448},[147,64345,64346],{"class":448}," 16",[147,64348,51765],{"class":397},[147,64350,1565],{"class":157},[147,64352,64353],{"class":149,"line":10144},[147,64354,2461],{"class":157},[147,64356,64357],{"class":149,"line":10171},[147,64358,2674],{"emptyLinePlaceholder":324},[147,64360,64361,64363,64365],{"class":149,"line":10180},[147,64362,64333],{"class":2237},[147,64364,62447],{"class":2237},[147,64366,15845],{"class":157},[147,64368,64369,64371,64373,64375],{"class":149,"line":10186},[147,64370,55282],{"class":448},[147,64372,51710],{"class":157},[147,64374,55010],{"class":448},[147,64376,1565],{"class":157},[147,64378,64379],{"class":149,"line":10194},[147,64380,2461],{"class":157},[147,64382,64383],{"class":149,"line":10199},[147,64384,2674],{"emptyLinePlaceholder":324},[147,64386,64387,64389,64392],{"class":149,"line":16877},[147,64388,64333],{"class":2237},[147,64390,64391],{"class":2237}," .item.active",[147,64393,15845],{"class":157},[147,64395,64396,64398,64400,64402],{"class":149,"line":16883},[147,64397,55282],{"class":448},[147,64399,51710],{"class":157},[147,64401,61142],{"class":448},[147,64403,1565],{"class":157},[147,64405,64406],{"class":149,"line":16906},[147,64407,2461],{"class":157},[147,64409,64410,64412,64414],{"class":149,"line":16912},[147,64411,52690],{"class":157},[147,64413,308],{"class":153},[147,64415,51580],{"class":157},[147,64417,64418,64420,64422],{"class":149,"line":16935},[147,64419,52058],{"class":157},[147,64421,51607],{"class":153},[147,64423,51580],{"class":157},[147,64425,64426],{"class":149,"line":16949},[147,64427,2674],{"emptyLinePlaceholder":324},[147,64429,64430,64432,64434],{"class":149,"line":16969},[147,64431,1309],{"class":157},[147,64433,52073],{"class":153},[147,64435,51580],{"class":157},[147,64437,64438,64440,64442,64444,64446,64449],{"class":149,"line":16975},[147,64439,52417],{"class":157},[147,64441,51884],{"class":153},[147,64443,53759],{"class":2237},[147,64445,445],{"class":157},[147,64447,64448],{"class":504},"\"tab\"",[147,64450,51580],{"class":157},[147,64452,64453,64455,64457,64459,64461,64464],{"class":149,"line":16986},[147,64454,51614],{"class":157},[147,64456,51884],{"class":153},[147,64458,53759],{"class":2237},[147,64460,445],{"class":157},[147,64462,64463],{"class":504},"\"tab-nav\"",[147,64465,51580],{"class":157},[147,64467,64468,64470,64472,64475,64477],{"class":149,"line":17009},[147,64469,55507],{"class":157},[147,64471,367],{"class":153},[147,64473,64474],{"class":157},">每日特价\u003C\u002F",[147,64476,367],{"class":153},[147,64478,51580],{"class":157},[147,64480,64481,64483,64485],{"class":149,"line":17031},[147,64482,55507],{"class":157},[147,64484,1406],{"class":153},[147,64486,51580],{"class":157},[147,64488,64489,64491,64493,64495,64497,64499,64501,64503,64505,64507,64510,64513,64515,64517,64519],{"class":149,"line":17036},[147,64490,55575],{"class":157},[147,64492,353],{"class":153},[147,64494,61325],{"class":157},[147,64496,637],{"class":153},[147,64498,53759],{"class":2237},[147,64500,445],{"class":157},[147,64502,59979],{"class":504},[147,64504,61330],{"class":2237},[147,64506,445],{"class":157},[147,64508,64509],{"class":504},"\"javascript:;\"",[147,64511,64512],{"class":157},">精选\u003C\u002F",[147,64514,637],{"class":153},[147,64516,55587],{"class":157},[147,64518,353],{"class":153},[147,64520,51580],{"class":157},[147,64522,64523,64525,64527,64529,64531,64533,64535,64537,64540,64542,64544,64546],{"class":149,"line":17042},[147,64524,55575],{"class":157},[147,64526,353],{"class":153},[147,64528,61325],{"class":157},[147,64530,637],{"class":153},[147,64532,61330],{"class":2237},[147,64534,445],{"class":157},[147,64536,64509],{"class":504},[147,64538,64539],{"class":157},">美食\u003C\u002F",[147,64541,637],{"class":153},[147,64543,55587],{"class":157},[147,64545,353],{"class":153},[147,64547,51580],{"class":157},[147,64549,64550,64552,64554,64556,64558,64560,64562,64564,64567,64569,64571,64573],{"class":149,"line":17056},[147,64551,55575],{"class":157},[147,64553,353],{"class":153},[147,64555,61325],{"class":157},[147,64557,637],{"class":153},[147,64559,61330],{"class":2237},[147,64561,445],{"class":157},[147,64563,64509],{"class":504},[147,64565,64566],{"class":157},">百货\u003C\u002F",[147,64568,637],{"class":153},[147,64570,55587],{"class":157},[147,64572,353],{"class":153},[147,64574,51580],{"class":157},[147,64576,64577,64579,64581,64583,64585,64587,64589,64591,64594,64596,64598,64600],{"class":149,"line":17069},[147,64578,55575],{"class":157},[147,64580,353],{"class":153},[147,64582,61325],{"class":157},[147,64584,637],{"class":153},[147,64586,61330],{"class":2237},[147,64588,445],{"class":157},[147,64590,64509],{"class":504},[147,64592,64593],{"class":157},">个护\u003C\u002F",[147,64595,637],{"class":153},[147,64597,55587],{"class":157},[147,64599,353],{"class":153},[147,64601,51580],{"class":157},[147,64603,64604,64606,64608,64610,64612,64614,64616,64618,64621,64623,64625,64627],{"class":149,"line":17074},[147,64605,55575],{"class":157},[147,64607,353],{"class":153},[147,64609,61325],{"class":157},[147,64611,637],{"class":153},[147,64613,61330],{"class":2237},[147,64615,445],{"class":157},[147,64617,64509],{"class":504},[147,64619,64620],{"class":157},">预告\u003C\u002F",[147,64622,637],{"class":153},[147,64624,55587],{"class":157},[147,64626,353],{"class":153},[147,64628,51580],{"class":157},[147,64630,64631,64633,64635],{"class":149,"line":17088},[147,64632,55680],{"class":157},[147,64634,1406],{"class":153},[147,64636,51580],{"class":157},[147,64638,64639,64641,64643],{"class":149,"line":17093},[147,64640,52049],{"class":157},[147,64642,51884],{"class":153},[147,64644,51580],{"class":157},[147,64646,64647,64649,64651,64653,64655,64658],{"class":149,"line":17099},[147,64648,51614],{"class":157},[147,64650,51884],{"class":153},[147,64652,53759],{"class":2237},[147,64654,445],{"class":157},[147,64656,64657],{"class":504},"\"tab-content\"",[147,64659,51580],{"class":157},[147,64661,64662,64664,64666,64668,64670,64673,64675,64677,64679,64681,64684,64686,64688,64690,64693,64695],{"class":149,"line":17104},[147,64663,55507],{"class":157},[147,64665,51884],{"class":153},[147,64667,53759],{"class":2237},[147,64669,445],{"class":157},[147,64671,64672],{"class":504},"\"item active\"",[147,64674,61325],{"class":157},[147,64676,29],{"class":153},[147,64678,55512],{"class":2237},[147,64680,445],{"class":157},[147,64682,64683],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[147,64685,55520],{"class":2237},[147,64687,445],{"class":157},[147,64689,7926],{"class":504},[147,64691,64692],{"class":157}," \u002F>\u003C\u002F",[147,64694,51884],{"class":153},[147,64696,51580],{"class":157},[147,64698,64699,64701,64703,64705,64707,64709,64711,64713,64715,64717,64720,64722,64724,64726,64728,64730],{"class":149,"line":17118},[147,64700,55507],{"class":157},[147,64702,51884],{"class":153},[147,64704,53759],{"class":2237},[147,64706,445],{"class":157},[147,64708,62896],{"class":504},[147,64710,61325],{"class":157},[147,64712,29],{"class":153},[147,64714,55512],{"class":2237},[147,64716,445],{"class":157},[147,64718,64719],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[147,64721,55520],{"class":2237},[147,64723,445],{"class":157},[147,64725,7926],{"class":504},[147,64727,64692],{"class":157},[147,64729,51884],{"class":153},[147,64731,51580],{"class":157},[147,64733,64734,64736,64738,64740,64742,64744,64746,64748,64750,64752,64755,64757,64759,64761,64763,64765],{"class":149,"line":17123},[147,64735,55507],{"class":157},[147,64737,51884],{"class":153},[147,64739,53759],{"class":2237},[147,64741,445],{"class":157},[147,64743,62896],{"class":504},[147,64745,61325],{"class":157},[147,64747,29],{"class":153},[147,64749,55512],{"class":2237},[147,64751,445],{"class":157},[147,64753,64754],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[147,64756,55520],{"class":2237},[147,64758,445],{"class":157},[147,64760,7926],{"class":504},[147,64762,64692],{"class":157},[147,64764,51884],{"class":153},[147,64766,51580],{"class":157},[147,64768,64769,64771,64773,64775,64777,64779,64781,64783,64785,64787,64790,64792,64794,64796,64798,64800],{"class":149,"line":17128},[147,64770,55507],{"class":157},[147,64772,51884],{"class":153},[147,64774,53759],{"class":2237},[147,64776,445],{"class":157},[147,64778,62896],{"class":504},[147,64780,61325],{"class":157},[147,64782,29],{"class":153},[147,64784,55512],{"class":2237},[147,64786,445],{"class":157},[147,64788,64789],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[147,64791,55520],{"class":2237},[147,64793,445],{"class":157},[147,64795,7926],{"class":504},[147,64797,64692],{"class":157},[147,64799,51884],{"class":153},[147,64801,51580],{"class":157},[147,64803,64804,64806,64808,64810,64812,64814,64816,64818,64820,64822,64825,64827,64829,64831,64833,64835],{"class":149,"line":17142},[147,64805,55507],{"class":157},[147,64807,51884],{"class":153},[147,64809,53759],{"class":2237},[147,64811,445],{"class":157},[147,64813,62896],{"class":504},[147,64815,61325],{"class":157},[147,64817,29],{"class":153},[147,64819,55512],{"class":2237},[147,64821,445],{"class":157},[147,64823,64824],{"class":504},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[147,64826,55520],{"class":2237},[147,64828,445],{"class":157},[147,64830,7926],{"class":504},[147,64832,64692],{"class":157},[147,64834,51884],{"class":153},[147,64836,51580],{"class":157},[147,64838,64839,64841,64843],{"class":149,"line":17154},[147,64840,52049],{"class":157},[147,64842,51884],{"class":153},[147,64844,51580],{"class":157},[147,64846,64847,64849,64851],{"class":149,"line":17159},[147,64848,52690],{"class":157},[147,64850,51884],{"class":153},[147,64852,51580],{"class":157},[147,64854,64855,64857,64859],{"class":149,"line":17172},[147,64856,52417],{"class":157},[147,64858,52086],{"class":153},[147,64860,51580],{"class":157},[147,64862,64863],{"class":149,"line":17177},[147,64864,64865],{"class":458},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[147,64867,64868],{"class":149,"line":17182},[147,64869,64870],{"class":458},"    \u002F\u002F 1.1 获取 a 元素 \n",[147,64872,64873,64875,64878,64880,64882,64884,64886,64889],{"class":149,"line":17187},[147,64874,11495],{"class":397},[147,64876,64877],{"class":448}," as",[147,64879,13838],{"class":397},[147,64881,54669],{"class":157},[147,64883,55954],{"class":2237},[147,64885,401],{"class":157},[147,64887,64888],{"class":504},"'.tab-nav a'",[147,64890,407],{"class":157},[147,64892,64893],{"class":149,"line":17200},[147,64894,64895],{"class":458},"    \u002F\u002F console.log(as) \n",[147,64897,64898,64900,64902,64904,64906,64908,64910,64912,64914,64917,64919,64921,64923],{"class":149,"line":17205},[147,64899,3475],{"class":397},[147,64901,1932],{"class":157},[147,64903,52120],{"class":397},[147,64905,9712],{"class":157},[147,64907,445],{"class":397},[147,64909,4367],{"class":448},[147,64911,9719],{"class":157},[147,64913,1309],{"class":397},[147,64915,64916],{"class":157}," as.",[147,64918,52241],{"class":448},[147,64920,3488],{"class":157},[147,64922,2566],{"class":397},[147,64924,12716],{"class":157},[147,64926,64927],{"class":149,"line":32907},[147,64928,64929],{"class":458},"      \u002F\u002F console.log(as[i])\n",[147,64931,64932],{"class":149,"line":32913},[147,64933,64934],{"class":458},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[147,64936,64937,64940,64942,64944,64947,64949,64951],{"class":149,"line":32919},[147,64938,64939],{"class":157},"      as[i].",[147,64941,58086],{"class":2237},[147,64943,401],{"class":157},[147,64945,64946],{"class":504},"'mouseenter'",[147,64948,12709],{"class":157},[147,64950,54722],{"class":397},[147,64952,54725],{"class":157},[147,64954,64955],{"class":149,"line":32925},[147,64956,64957],{"class":458},"        \u002F\u002F console.log('鼠标经过')\n",[147,64959,64960],{"class":149,"line":32931},[147,64961,64962],{"class":458},"        \u002F\u002F 排他思想  \n",[147,64964,64965],{"class":149,"line":32942},[147,64966,64967],{"class":458},"        \u002F\u002F 干掉别人 移除类active\n",[147,64969,64970,64972,64974,64976,64979,64981,64983,64985,64988],{"class":149,"line":32948},[147,64971,52198],{"class":157},[147,64973,54672],{"class":2237},[147,64975,401],{"class":157},[147,64977,64978],{"class":504},"'.tab-nav .active'",[147,64980,57276],{"class":157},[147,64982,57279],{"class":2237},[147,64984,401],{"class":157},[147,64986,64987],{"class":504},"'active'",[147,64989,407],{"class":157},[147,64991,64992],{"class":149,"line":32968},[147,64993,64994],{"class":458},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[147,64996,64997,65000,65003,65005,65007,65009],{"class":149,"line":32974},[147,64998,64999],{"class":448},"        this",[147,65001,65002],{"class":157},".classList.",[147,65004,5608],{"class":2237},[147,65006,401],{"class":157},[147,65008,64987],{"class":504},[147,65010,407],{"class":157},[147,65012,65013],{"class":149,"line":32985},[147,65014,2674],{"emptyLinePlaceholder":324},[147,65016,65017],{"class":149,"line":32991},[147,65018,65019],{"class":458},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[147,65021,65022],{"class":149,"line":32997},[147,65023,65024],{"class":458},"        \u002F\u002F 干掉别人\n",[147,65026,65027,65029,65031,65033,65036,65038,65040,65042,65044],{"class":149,"line":33003},[147,65028,52198],{"class":157},[147,65030,54672],{"class":2237},[147,65032,401],{"class":157},[147,65034,65035],{"class":504},"'.tab-content .active'",[147,65037,57276],{"class":157},[147,65039,57279],{"class":2237},[147,65041,401],{"class":157},[147,65043,64987],{"class":504},[147,65045,407],{"class":157},[147,65047,65048],{"class":149,"line":33009},[147,65049,65050],{"class":458},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[147,65052,65053,65055,65057,65059,65062,65064,65066,65068,65070,65072,65074,65076,65078],{"class":149,"line":33015},[147,65054,52198],{"class":157},[147,65056,54672],{"class":2237},[147,65058,401],{"class":157},[147,65060,65061],{"class":504},"`.tab-content .item:nth-child(${",[147,65063,840],{"class":157},[147,65065,45840],{"class":397},[147,65067,25392],{"class":448},[147,65069,57305],{"class":504},[147,65071,57276],{"class":157},[147,65073,5608],{"class":2237},[147,65075,401],{"class":157},[147,65077,64987],{"class":504},[147,65079,407],{"class":157},[147,65081,65082],{"class":149,"line":33021},[147,65083,2674],{"emptyLinePlaceholder":324},[147,65085,65086],{"class":149,"line":33027},[147,65087,65088],{"class":157},"      })\n",[147,65090,65091],{"class":149,"line":33047},[147,65092,2461],{"class":157},[147,65094,65095,65097,65099],{"class":149,"line":33053},[147,65096,52690],{"class":157},[147,65098,52086],{"class":153},[147,65100,51580],{"class":157},[147,65102,65103,65105,65107],{"class":149,"line":33069},[147,65104,52058],{"class":157},[147,65106,52073],{"class":153},[147,65108,51580],{"class":157},[147,65110,65111],{"class":149,"line":33075},[147,65112,2674],{"emptyLinePlaceholder":324},[147,65114,65115,65117,65119],{"class":149,"line":33089},[147,65116,52058],{"class":157},[147,65118,50909],{"class":153},[147,65120,51580],{"class":157},[19,65122,65123],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,65125,65126],{},"在监听事件中，this指向的就是他的调用者",[19,65128,65129],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,65131,53993],{},[19,65133,65134],{},"(function () {",[19,65136,65137],{},"const list = document.querySelector('.xtx-elevator-list')",[19,65139,65140],{},"list.addEventListener('click', function (e) {",[19,65142,65143],{},"if (e.target.tagName === 'A') {",[19,65145,65146],{},"\u002F\u002F 排他思想",[19,65148,65149],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,65151,65152],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,65154,65155],{},"\u002F\u002F console.log(old);",[19,65157,65158],{},"\u002F\u002F 判断",[19,65160,65161],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,65163,65164],{},"if (old) old.classList.remove('active')",[19,65166,65167],{},"e.target.classList.add('active')",[19,65169,1345],{},[19,65171,52737],{},[19,65173,65174],{},"})();",[367,65176,65178],{"id":65177},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[138,65180,65182],{"className":50907,"code":65181,"language":50909,"meta":143,"style":143},"\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",[51,65183,65184,65194,65198,65206,65210,65224,65238,65250,65258,65264,65274,65284,65288,65292,65299,65311,65322,65339,65352,65366,65376,65380,65384,65391,65402,65420,65430,65442,65446,65450,65457,65474,65485,65497,65501,65505,65512,65524,65528,65536,65544,65548,65556,65564,65572,65587,65631,65639,65652,65665,65678,65686,65694,65702,65730,65738,65750,65763,65776,65784,65792,65800,65826,65834,65847,65859,65872,65880,65888,65896,65922,65930,65943,65955,65968,65976,65984,65992,65997,66017,66022,66042,66047,66064,66069,66077,66082,66111,66124,66128,66132,66137,66141,66169,66174,66191,66196,66201,66206,66211,66237,66241,66245,66253,66261,66265],{"__ignoreMap":143},[147,65185,65186,65188,65190,65192],{"class":149,"line":150},[147,65187,51571],{"class":157},[147,65189,51574],{"class":153},[147,65191,51577],{"class":2237},[147,65193,51580],{"class":157},[147,65195,65196],{"class":149,"line":312},[147,65197,2674],{"emptyLinePlaceholder":324},[147,65199,65200,65202,65204],{"class":149,"line":1454},[147,65201,1309],{"class":157},[147,65203,50909],{"class":153},[147,65205,51580],{"class":157},[147,65207,65208],{"class":149,"line":1469},[147,65209,2674],{"emptyLinePlaceholder":324},[147,65211,65212,65214,65216,65218,65220,65222],{"class":149,"line":1475},[147,65213,1309],{"class":157},[147,65215,51607],{"class":153},[147,65217,51589],{"class":2237},[147,65219,445],{"class":157},[147,65221,51594],{"class":504},[147,65223,51580],{"class":157},[147,65225,65226,65228,65230,65232,65234,65236],{"class":149,"line":1489},[147,65227,52417],{"class":157},[147,65229,51617],{"class":153},[147,65231,51620],{"class":2237},[147,65233,445],{"class":157},[147,65235,51625],{"class":504},[147,65237,51580],{"class":157},[147,65239,65240,65242,65244,65246,65248],{"class":149,"line":1495},[147,65241,52417],{"class":157},[147,65243,51680],{"class":153},[147,65245,55587],{"class":157},[147,65247,51680],{"class":153},[147,65249,51580],{"class":157},[147,65251,65252,65254,65256],{"class":149,"line":1586},[147,65253,52417],{"class":157},[147,65255,308],{"class":153},[147,65257,51580],{"class":157},[147,65259,65260,65262],{"class":149,"line":1592},[147,65261,6677],{"class":153},[147,65263,15845],{"class":157},[147,65265,65266,65268,65270,65272],{"class":149,"line":1604},[147,65267,54979],{"class":448},[147,65269,51710],{"class":157},[147,65271,590],{"class":448},[147,65273,1565],{"class":157},[147,65275,65276,65278,65280,65282],{"class":149,"line":1886},[147,65277,54968],{"class":448},[147,65279,51710],{"class":157},[147,65281,590],{"class":448},[147,65283,1565],{"class":157},[147,65285,65286],{"class":149,"line":1891},[147,65287,2461],{"class":157},[147,65289,65290],{"class":149,"line":1897},[147,65291,2674],{"emptyLinePlaceholder":324},[147,65293,65294,65297],{"class":149,"line":1902},[147,65295,65296],{"class":153},"    table",[147,65298,15845],{"class":157},[147,65300,65301,65304,65306,65309],{"class":149,"line":1916},[147,65302,65303],{"class":448},"      border-collapse",[147,65305,51710],{"class":157},[147,65307,65308],{"class":448},"collapse",[147,65310,1565],{"class":157},[147,65312,65313,65316,65318,65320],{"class":149,"line":1921},[147,65314,65315],{"class":448},"      border-spacing",[147,65317,51710],{"class":157},[147,65319,590],{"class":448},[147,65321,1565],{"class":157},[147,65323,65324,65326,65328,65330,65332,65334,65337],{"class":149,"line":1927},[147,65325,62250],{"class":448},[147,65327,51710],{"class":157},[147,65329,616],{"class":448},[147,65331,51765],{"class":397},[147,65333,51794],{"class":448},[147,65335,65336],{"class":448}," #c0c0c0",[147,65338,1565],{"class":157},[147,65340,65341,65343,65345,65348,65350],{"class":149,"line":1948},[147,65342,55044],{"class":448},[147,65344,51710],{"class":157},[147,65346,65347],{"class":448},"500",[147,65349,51765],{"class":397},[147,65351,1565],{"class":157},[147,65353,65354,65356,65358,65360,65362,65364],{"class":149,"line":1953},[147,65355,54979],{"class":448},[147,65357,51710],{"class":157},[147,65359,710],{"class":448},[147,65361,51765],{"class":397},[147,65363,51829],{"class":448},[147,65365,1565],{"class":157},[147,65367,65368,65370,65372,65374],{"class":149,"line":1967},[147,65369,57559],{"class":448},[147,65371,51710],{"class":157},[147,65373,51865],{"class":448},[147,65375,1565],{"class":157},[147,65377,65378],{"class":149,"line":1972},[147,65379,2461],{"class":157},[147,65381,65382],{"class":149,"line":2001},[147,65383,2674],{"emptyLinePlaceholder":324},[147,65385,65386,65389],{"class":149,"line":2006},[147,65387,65388],{"class":153},"    th",[147,65390,15845],{"class":157},[147,65392,65393,65395,65397,65400],{"class":149,"line":2023},[147,65394,55157],{"class":448},[147,65396,51710],{"class":157},[147,65398,65399],{"class":448},"#09c",[147,65401,1565],{"class":157},[147,65403,65404,65407,65409,65411,65413,65415,65418],{"class":149,"line":2028},[147,65405,65406],{"class":448},"      font",[147,65408,51710],{"class":157},[147,65410,62612],{"class":448},[147,65412,64346],{"class":448},[147,65414,51765],{"class":397},[147,65416,65417],{"class":504}," \"微软雅黑\"",[147,65419,1565],{"class":157},[147,65421,65422,65424,65426,65428],{"class":149,"line":2033},[147,65423,57689],{"class":448},[147,65425,51710],{"class":157},[147,65427,61115],{"class":448},[147,65429,1565],{"class":157},[147,65431,65432,65434,65436,65438,65440],{"class":149,"line":2038},[147,65433,55058],{"class":448},[147,65435,51710],{"class":157},[147,65437,1199],{"class":448},[147,65439,51765],{"class":397},[147,65441,1565],{"class":157},[147,65443,65444],{"class":149,"line":2052},[147,65445,2461],{"class":157},[147,65447,65448],{"class":149,"line":2057},[147,65449,2674],{"emptyLinePlaceholder":324},[147,65451,65452,65455],{"class":149,"line":2851},[147,65453,65454],{"class":153},"    td",[147,65456,15845],{"class":157},[147,65458,65459,65461,65463,65465,65467,65469,65472],{"class":149,"line":2865},[147,65460,62250],{"class":448},[147,65462,51710],{"class":157},[147,65464,616],{"class":448},[147,65466,51765],{"class":397},[147,65468,51794],{"class":448},[147,65470,65471],{"class":448}," #d0d0d0",[147,65473,1565],{"class":157},[147,65475,65476,65478,65480,65483],{"class":149,"line":2873},[147,65477,57689],{"class":448},[147,65479,51710],{"class":157},[147,65481,65482],{"class":448},"#404060",[147,65484,1565],{"class":157},[147,65486,65487,65489,65491,65493,65495],{"class":149,"line":2878},[147,65488,54968],{"class":448},[147,65490,51710],{"class":157},[147,65492,845],{"class":448},[147,65494,51765],{"class":397},[147,65496,1565],{"class":157},[147,65498,65499],{"class":149,"line":2884},[147,65500,2461],{"class":157},[147,65502,65503],{"class":149,"line":2890},[147,65504,2674],{"emptyLinePlaceholder":324},[147,65506,65507,65510],{"class":149,"line":2895},[147,65508,65509],{"class":2237},"    .allCheck",[147,65511,15845],{"class":157},[147,65513,65514,65516,65518,65520,65522],{"class":149,"line":8222},[147,65515,55044],{"class":448},[147,65517,51710],{"class":157},[147,65519,1011],{"class":448},[147,65521,51765],{"class":397},[147,65523,1565],{"class":157},[147,65525,65526],{"class":149,"line":8246},[147,65527,2461],{"class":157},[147,65529,65530,65532,65534],{"class":149,"line":8251},[147,65531,52690],{"class":157},[147,65533,308],{"class":153},[147,65535,51580],{"class":157},[147,65537,65538,65540,65542],{"class":149,"line":8257},[147,65539,52058],{"class":157},[147,65541,51607],{"class":153},[147,65543,51580],{"class":157},[147,65545,65546],{"class":149,"line":8284},[147,65547,2674],{"emptyLinePlaceholder":324},[147,65549,65550,65552,65554],{"class":149,"line":8289},[147,65551,1309],{"class":157},[147,65553,52073],{"class":153},[147,65555,51580],{"class":157},[147,65557,65558,65560,65562],{"class":149,"line":8295},[147,65559,52417],{"class":157},[147,65561,537],{"class":153},[147,65563,51580],{"class":157},[147,65565,65566,65568,65570],{"class":149,"line":8307},[147,65567,51614],{"class":157},[147,65569,543],{"class":153},[147,65571,51580],{"class":157},[147,65573,65574,65576,65578,65580,65582,65585],{"class":149,"line":8319},[147,65575,55507],{"class":157},[147,65577,546],{"class":153},[147,65579,53759],{"class":2237},[147,65581,445],{"class":157},[147,65583,65584],{"class":504},"\"allCheck\"",[147,65586,51580],{"class":157},[147,65588,65589,65591,65593,65595,65597,65599,65601,65603,65605,65607,65609,65612,65615,65617,65619,65621,65624,65627,65629],{"class":149,"line":8331},[147,65590,55575],{"class":157},[147,65592,54094],{"class":153},[147,65594,54097],{"class":2237},[147,65596,445],{"class":157},[147,65598,54102],{"class":504},[147,65600,15193],{"class":2237},[147,65602,445],{"class":157},[147,65604,7926],{"class":504},[147,65606,15232],{"class":2237},[147,65608,445],{"class":157},[147,65610,65611],{"class":504},"\"checkAll\"",[147,65613,65614],{"class":157},"> \u003C",[147,65616,147],{"class":153},[147,65618,53759],{"class":2237},[147,65620,445],{"class":157},[147,65622,65623],{"class":504},"\"all\"",[147,65625,65626],{"class":157},">全选\u003C\u002F",[147,65628,147],{"class":153},[147,65630,51580],{"class":157},[147,65632,65633,65635,65637],{"class":149,"line":9990},[147,65634,55680],{"class":157},[147,65636,546],{"class":153},[147,65638,51580],{"class":157},[147,65640,65641,65643,65645,65648,65650],{"class":149,"line":10015},[147,65642,55507],{"class":157},[147,65644,546],{"class":153},[147,65646,65647],{"class":157},">商品\u003C\u002F",[147,65649,546],{"class":153},[147,65651,51580],{"class":157},[147,65653,65654,65656,65658,65661,65663],{"class":149,"line":10038},[147,65655,55507],{"class":157},[147,65657,546],{"class":153},[147,65659,65660],{"class":157},">商家\u003C\u002F",[147,65662,546],{"class":153},[147,65664,51580],{"class":157},[147,65666,65667,65669,65671,65674,65676],{"class":149,"line":10062},[147,65668,55507],{"class":157},[147,65670,546],{"class":153},[147,65672,65673],{"class":157},">价格\u003C\u002F",[147,65675,546],{"class":153},[147,65677,51580],{"class":157},[147,65679,65680,65682,65684],{"class":149,"line":10067},[147,65681,52049],{"class":157},[147,65683,543],{"class":153},[147,65685,51580],{"class":157},[147,65687,65688,65690,65692],{"class":149,"line":10072},[147,65689,51614],{"class":157},[147,65691,543],{"class":153},[147,65693,51580],{"class":157},[147,65695,65696,65698,65700],{"class":149,"line":10077},[147,65697,55507],{"class":157},[147,65699,588],{"class":153},[147,65701,51580],{"class":157},[147,65703,65704,65706,65708,65710,65712,65714,65716,65718,65721,65723,65725,65728],{"class":149,"line":10086},[147,65705,55575],{"class":157},[147,65707,54094],{"class":153},[147,65709,54097],{"class":2237},[147,65711,445],{"class":157},[147,65713,54102],{"class":504},[147,65715,15193],{"class":2237},[147,65717,445],{"class":157},[147,65719,65720],{"class":504},"\"check\"",[147,65722,53759],{"class":2237},[147,65724,445],{"class":157},[147,65726,65727],{"class":504},"\"ck\"",[147,65729,51580],{"class":157},[147,65731,65732,65734,65736],{"class":149,"line":10091},[147,65733,55680],{"class":157},[147,65735,588],{"class":153},[147,65737,51580],{"class":157},[147,65739,65740,65742,65744,65746,65748],{"class":149,"line":10097},[147,65741,55507],{"class":157},[147,65743,588],{"class":153},[147,65745,61446],{"class":157},[147,65747,588],{"class":153},[147,65749,51580],{"class":157},[147,65751,65752,65754,65756,65759,65761],{"class":149,"line":10118},[147,65753,55507],{"class":157},[147,65755,588],{"class":153},[147,65757,65758],{"class":157},">小米\u003C\u002F",[147,65760,588],{"class":153},[147,65762,51580],{"class":157},[147,65764,65765,65767,65769,65772,65774],{"class":149,"line":10124},[147,65766,55507],{"class":157},[147,65768,588],{"class":153},[147,65770,65771],{"class":157},">￥1999\u003C\u002F",[147,65773,588],{"class":153},[147,65775,51580],{"class":157},[147,65777,65778,65780,65782],{"class":149,"line":10138},[147,65779,52049],{"class":157},[147,65781,543],{"class":153},[147,65783,51580],{"class":157},[147,65785,65786,65788,65790],{"class":149,"line":10144},[147,65787,51614],{"class":157},[147,65789,543],{"class":153},[147,65791,51580],{"class":157},[147,65793,65794,65796,65798],{"class":149,"line":10171},[147,65795,55507],{"class":157},[147,65797,588],{"class":153},[147,65799,51580],{"class":157},[147,65801,65802,65804,65806,65808,65810,65812,65814,65816,65818,65820,65822,65824],{"class":149,"line":10180},[147,65803,55575],{"class":157},[147,65805,54094],{"class":153},[147,65807,54097],{"class":2237},[147,65809,445],{"class":157},[147,65811,54102],{"class":504},[147,65813,15193],{"class":2237},[147,65815,445],{"class":157},[147,65817,65720],{"class":504},[147,65819,53759],{"class":2237},[147,65821,445],{"class":157},[147,65823,65727],{"class":504},[147,65825,51580],{"class":157},[147,65827,65828,65830,65832],{"class":149,"line":10186},[147,65829,55680],{"class":157},[147,65831,588],{"class":153},[147,65833,51580],{"class":157},[147,65835,65836,65838,65840,65843,65845],{"class":149,"line":10194},[147,65837,55507],{"class":157},[147,65839,588],{"class":153},[147,65841,65842],{"class":157},">小米净水器\u003C\u002F",[147,65844,588],{"class":153},[147,65846,51580],{"class":157},[147,65848,65849,65851,65853,65855,65857],{"class":149,"line":10199},[147,65850,55507],{"class":157},[147,65852,588],{"class":153},[147,65854,65758],{"class":157},[147,65856,588],{"class":153},[147,65858,51580],{"class":157},[147,65860,65861,65863,65865,65868,65870],{"class":149,"line":16877},[147,65862,55507],{"class":157},[147,65864,588],{"class":153},[147,65866,65867],{"class":157},">￥4999\u003C\u002F",[147,65869,588],{"class":153},[147,65871,51580],{"class":157},[147,65873,65874,65876,65878],{"class":149,"line":16883},[147,65875,52049],{"class":157},[147,65877,543],{"class":153},[147,65879,51580],{"class":157},[147,65881,65882,65884,65886],{"class":149,"line":16906},[147,65883,51614],{"class":157},[147,65885,543],{"class":153},[147,65887,51580],{"class":157},[147,65889,65890,65892,65894],{"class":149,"line":16912},[147,65891,55507],{"class":157},[147,65893,588],{"class":153},[147,65895,51580],{"class":157},[147,65897,65898,65900,65902,65904,65906,65908,65910,65912,65914,65916,65918,65920],{"class":149,"line":16935},[147,65899,55575],{"class":157},[147,65901,54094],{"class":153},[147,65903,54097],{"class":2237},[147,65905,445],{"class":157},[147,65907,54102],{"class":504},[147,65909,15193],{"class":2237},[147,65911,445],{"class":157},[147,65913,65720],{"class":504},[147,65915,53759],{"class":2237},[147,65917,445],{"class":157},[147,65919,65727],{"class":504},[147,65921,51580],{"class":157},[147,65923,65924,65926,65928],{"class":149,"line":16949},[147,65925,55680],{"class":157},[147,65927,588],{"class":153},[147,65929,51580],{"class":157},[147,65931,65932,65934,65936,65939,65941],{"class":149,"line":16969},[147,65933,55507],{"class":157},[147,65935,588],{"class":153},[147,65937,65938],{"class":157},">小米电视\u003C\u002F",[147,65940,588],{"class":153},[147,65942,51580],{"class":157},[147,65944,65945,65947,65949,65951,65953],{"class":149,"line":16975},[147,65946,55507],{"class":157},[147,65948,588],{"class":153},[147,65950,65758],{"class":157},[147,65952,588],{"class":153},[147,65954,51580],{"class":157},[147,65956,65957,65959,65961,65964,65966],{"class":149,"line":16986},[147,65958,55507],{"class":157},[147,65960,588],{"class":153},[147,65962,65963],{"class":157},">￥5999\u003C\u002F",[147,65965,588],{"class":153},[147,65967,51580],{"class":157},[147,65969,65970,65972,65974],{"class":149,"line":17009},[147,65971,52049],{"class":157},[147,65973,543],{"class":153},[147,65975,51580],{"class":157},[147,65977,65978,65980,65982],{"class":149,"line":17031},[147,65979,52690],{"class":157},[147,65981,537],{"class":153},[147,65983,51580],{"class":157},[147,65985,65986,65988,65990],{"class":149,"line":17036},[147,65987,52417],{"class":157},[147,65989,52086],{"class":153},[147,65991,51580],{"class":157},[147,65993,65994],{"class":149,"line":17042},[147,65995,65996],{"class":458},"    \u002F\u002F 1. 获取大复选框\n",[147,65998,65999,66001,66004,66006,66008,66010,66012,66015],{"class":149,"line":17056},[147,66000,11495],{"class":397},[147,66002,66003],{"class":448}," checkAll",[147,66005,13838],{"class":397},[147,66007,54669],{"class":157},[147,66009,54672],{"class":2237},[147,66011,401],{"class":157},[147,66013,66014],{"class":504},"'#checkAll'",[147,66016,407],{"class":157},[147,66018,66019],{"class":149,"line":17069},[147,66020,66021],{"class":458},"    \u002F\u002F 2. 获取所有的小复选框\n",[147,66023,66024,66026,66029,66031,66033,66035,66037,66040],{"class":149,"line":17074},[147,66025,11495],{"class":397},[147,66027,66028],{"class":448}," cks",[147,66030,13838],{"class":397},[147,66032,54669],{"class":157},[147,66034,55954],{"class":2237},[147,66036,401],{"class":157},[147,66038,66039],{"class":504},"'.ck'",[147,66041,407],{"class":157},[147,66043,66044],{"class":149,"line":17088},[147,66045,66046],{"class":458},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[147,66048,66049,66052,66054,66056,66058,66060,66062],{"class":149,"line":17093},[147,66050,66051],{"class":157},"    checkAll.",[147,66053,58086],{"class":2237},[147,66055,401],{"class":157},[147,66057,58091],{"class":504},[147,66059,12709],{"class":157},[147,66061,54722],{"class":397},[147,66063,54725],{"class":157},[147,66065,66066],{"class":149,"line":17099},[147,66067,66068],{"class":458},"      \u002F\u002F 得到当前大复选框的选中状态\n",[147,66070,66071,66074],{"class":149,"line":17104},[147,66072,66073],{"class":458},"      \u002F\u002F console.log(checkAll.checked)",[147,66075,66076],{"class":458},"  \u002F\u002F 得到 是 true 或者是 false\n",[147,66078,66079],{"class":149,"line":17118},[147,66080,66081],{"class":458},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[147,66083,66084,66086,66088,66090,66092,66094,66096,66098,66100,66103,66105,66107,66109],{"class":149,"line":17123},[147,66085,52557],{"class":397},[147,66087,1932],{"class":157},[147,66089,52120],{"class":397},[147,66091,9712],{"class":157},[147,66093,445],{"class":397},[147,66095,4367],{"class":448},[147,66097,9719],{"class":157},[147,66099,1309],{"class":397},[147,66101,66102],{"class":157}," cks.",[147,66104,52241],{"class":448},[147,66106,3488],{"class":157},[147,66108,2566],{"class":397},[147,66110,12716],{"class":157},[147,66112,66113,66116,66118,66121],{"class":149,"line":17128},[147,66114,66115],{"class":157},"        cks[i].checked ",[147,66117,445],{"class":397},[147,66119,66120],{"class":448}," this",[147,66122,66123],{"class":157},".checked\n",[147,66125,66126],{"class":149,"line":17142},[147,66127,52671],{"class":157},[147,66129,66130],{"class":149,"line":17154},[147,66131,33735],{"class":157},[147,66133,66134],{"class":149,"line":17159},[147,66135,66136],{"class":458},"    \u002F\u002F 5. 小复选框控制大复选框\n",[147,66138,66139],{"class":149,"line":17172},[147,66140,2674],{"emptyLinePlaceholder":324},[147,66142,66143,66145,66147,66149,66151,66153,66155,66157,66159,66161,66163,66165,66167],{"class":149,"line":17177},[147,66144,3475],{"class":397},[147,66146,1932],{"class":157},[147,66148,52120],{"class":397},[147,66150,9712],{"class":157},[147,66152,445],{"class":397},[147,66154,4367],{"class":448},[147,66156,9719],{"class":157},[147,66158,1309],{"class":397},[147,66160,66102],{"class":157},[147,66162,52241],{"class":448},[147,66164,3488],{"class":157},[147,66166,2566],{"class":397},[147,66168,12716],{"class":157},[147,66170,66171],{"class":149,"line":17182},[147,66172,66173],{"class":458},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[147,66175,66176,66179,66181,66183,66185,66187,66189],{"class":149,"line":17187},[147,66177,66178],{"class":157},"      cks[i].",[147,66180,58086],{"class":2237},[147,66182,401],{"class":157},[147,66184,58091],{"class":504},[147,66186,12709],{"class":157},[147,66188,54722],{"class":397},[147,66190,54725],{"class":157},[147,66192,66193],{"class":149,"line":17200},[147,66194,66195],{"class":458},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[147,66197,66198],{"class":149,"line":17205},[147,66199,66200],{"class":458},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[147,66202,66203],{"class":149,"line":32907},[147,66204,66205],{"class":458},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[147,66207,66208],{"class":149,"line":32913},[147,66209,66210],{"class":458},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[147,66212,66213,66216,66218,66220,66222,66224,66227,66229,66231,66233,66235],{"class":149,"line":32919},[147,66214,66215],{"class":157},"        checkAll.checked ",[147,66217,445],{"class":397},[147,66219,54669],{"class":157},[147,66221,55954],{"class":2237},[147,66223,401],{"class":157},[147,66225,66226],{"class":504},"'.ck:checked'",[147,66228,31100],{"class":157},[147,66230,52241],{"class":448},[147,66232,58179],{"class":397},[147,66234,66102],{"class":157},[147,66236,56104],{"class":448},[147,66238,66239],{"class":149,"line":32925},[147,66240,65088],{"class":157},[147,66242,66243],{"class":149,"line":32931},[147,66244,2461],{"class":157},[147,66246,66247,66249,66251],{"class":149,"line":32942},[147,66248,52690],{"class":157},[147,66250,52086],{"class":153},[147,66252,51580],{"class":157},[147,66254,66255,66257,66259],{"class":149,"line":32948},[147,66256,52058],{"class":157},[147,66258,52073],{"class":153},[147,66260,51580],{"class":157},[147,66262,66263],{"class":149,"line":32968},[147,66264,2674],{"emptyLinePlaceholder":324},[147,66266,66267,66269,66271],{"class":149,"line":32974},[147,66268,52058],{"class":157},[147,66270,50909],{"class":153},[147,66272,51580],{"class":157},[19,66274,66275],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,66277,66278],{},"用好之间比较得到的布尔值！！！",[19,66280,66281,66282,66285,66286,1932,66289,983,66291,66294],{},"在 JS 里访问的时候，",[51,66283,66284],{},"checkbox.checked"," 是一个 ",[234,66287,66288],{},"布尔值",[51,66290,1637],{},[51,66292,66293],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,66296,66297,66298,66301,66302],{},"HTML 的 ",[51,66299,66300],{},"checked=\"checked\""," 只是 ",[234,66303,66304,66305,66308],{},"初始值；JS 的 ",[51,66306,66307],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,66310,66311],{},"：checked是一个伪类选择器",[19,66313,66314],{},[29,66315],{"alt":143,"src":66316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,66318,66319,66322],{},[66320,66321],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,66324,66325],{},[29,66326],{"alt":143,"src":66327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,66329,66331],{"id":66330},"_33-dom事件进阶","3.3 DOM事件进阶",[367,66333,66335],{"id":66334},"_331-事件流","3.3.1 事件流",[19,66337,66338],{},[29,66339],{"alt":143,"src":66340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22271,66342,66344],{"id":66343},"_3311-事件捕获","3.3.1.1 事件捕获",[19,66346,66347],{},[29,66348],{"alt":143,"src":66349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[138,66351,66353],{"className":50907,"code":66352,"language":50909,"meta":143,"style":143},"\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",[51,66354,66355,66365,66379,66383,66391,66405,66425,66437,66445,66452,66464,66476,66486,66490,66494,66501,66513,66525,66535,66539,66547,66555,66559,66567,66582,66601,66609,66617,66637,66657,66673,66684,66692,66709,66720,66728,66745,66756,66764,66772,66780,66784],{"__ignoreMap":143},[147,66356,66357,66359,66361,66363],{"class":149,"line":150},[147,66358,51571],{"class":157},[147,66360,51574],{"class":153},[147,66362,51577],{"class":2237},[147,66364,51580],{"class":157},[147,66366,66367,66369,66371,66373,66375,66377],{"class":149,"line":312},[147,66368,1309],{"class":157},[147,66370,50909],{"class":153},[147,66372,51589],{"class":2237},[147,66374,445],{"class":157},[147,66376,51594],{"class":504},[147,66378,51580],{"class":157},[147,66380,66381],{"class":149,"line":1454},[147,66382,2674],{"emptyLinePlaceholder":324},[147,66384,66385,66387,66389],{"class":149,"line":1469},[147,66386,1309],{"class":157},[147,66388,51607],{"class":153},[147,66390,51580],{"class":157},[147,66392,66393,66395,66397,66399,66401,66403],{"class":149,"line":1475},[147,66394,52417],{"class":157},[147,66396,51617],{"class":153},[147,66398,51620],{"class":2237},[147,66400,445],{"class":157},[147,66402,51625],{"class":504},[147,66404,51580],{"class":157},[147,66406,66407,66409,66411,66413,66415,66417,66419,66421,66423],{"class":149,"line":1489},[147,66408,52417],{"class":157},[147,66410,51617],{"class":153},[147,66412,15193],{"class":2237},[147,66414,445],{"class":157},[147,66416,51664],{"class":504},[147,66418,51644],{"class":2237},[147,66420,445],{"class":157},[147,66422,51671],{"class":504},[147,66424,51580],{"class":157},[147,66426,66427,66429,66431,66433,66435],{"class":149,"line":1495},[147,66428,52417],{"class":157},[147,66430,51680],{"class":153},[147,66432,51683],{"class":157},[147,66434,51680],{"class":153},[147,66436,51580],{"class":157},[147,66438,66439,66441,66443],{"class":149,"line":1586},[147,66440,52417],{"class":157},[147,66442,308],{"class":153},[147,66444,51580],{"class":157},[147,66446,66447,66450],{"class":149,"line":1592},[147,66448,66449],{"class":2237},"    .father",[147,66451,15845],{"class":157},[147,66453,66454,66456,66458,66460,66462],{"class":149,"line":1604},[147,66455,55044],{"class":448},[147,66457,51710],{"class":157},[147,66459,65347],{"class":448},[147,66461,51765],{"class":397},[147,66463,1565],{"class":157},[147,66465,66466,66468,66470,66472,66474],{"class":149,"line":1886},[147,66467,55058],{"class":448},[147,66469,51710],{"class":157},[147,66471,65347],{"class":448},[147,66473,51765],{"class":397},[147,66475,1565],{"class":157},[147,66477,66478,66480,66482,66484],{"class":149,"line":1891},[147,66479,55157],{"class":448},[147,66481,51710],{"class":157},[147,66483,51918],{"class":448},[147,66485,1565],{"class":157},[147,66487,66488],{"class":149,"line":1897},[147,66489,2461],{"class":157},[147,66491,66492],{"class":149,"line":1902},[147,66493,2674],{"emptyLinePlaceholder":324},[147,66495,66496,66499],{"class":149,"line":1916},[147,66497,66498],{"class":2237},"    .son",[147,66500,15845],{"class":157},[147,66502,66503,66505,66507,66509,66511],{"class":149,"line":1921},[147,66504,55044],{"class":448},[147,66506,51710],{"class":157},[147,66508,1996],{"class":448},[147,66510,51765],{"class":397},[147,66512,1565],{"class":157},[147,66514,66515,66517,66519,66521,66523],{"class":149,"line":1927},[147,66516,55058],{"class":448},[147,66518,51710],{"class":157},[147,66520,1996],{"class":448},[147,66522,51765],{"class":397},[147,66524,1565],{"class":157},[147,66526,66527,66529,66531,66533],{"class":149,"line":1948},[147,66528,55157],{"class":448},[147,66530,51710],{"class":157},[147,66532,55162],{"class":448},[147,66534,1565],{"class":157},[147,66536,66537],{"class":149,"line":1953},[147,66538,2461],{"class":157},[147,66540,66541,66543,66545],{"class":149,"line":1967},[147,66542,52690],{"class":157},[147,66544,308],{"class":153},[147,66546,51580],{"class":157},[147,66548,66549,66551,66553],{"class":149,"line":1972},[147,66550,52058],{"class":157},[147,66552,51607],{"class":153},[147,66554,51580],{"class":157},[147,66556,66557],{"class":149,"line":2001},[147,66558,2674],{"emptyLinePlaceholder":324},[147,66560,66561,66563,66565],{"class":149,"line":2006},[147,66562,1309],{"class":157},[147,66564,52073],{"class":153},[147,66566,51580],{"class":157},[147,66568,66569,66571,66573,66575,66577,66580],{"class":149,"line":2023},[147,66570,52417],{"class":157},[147,66572,51884],{"class":153},[147,66574,53759],{"class":2237},[147,66576,445],{"class":157},[147,66578,66579],{"class":504},"\"father\"",[147,66581,51580],{"class":157},[147,66583,66584,66586,66588,66590,66592,66595,66597,66599],{"class":149,"line":2028},[147,66585,51614],{"class":157},[147,66587,51884],{"class":153},[147,66589,53759],{"class":2237},[147,66591,445],{"class":157},[147,66593,66594],{"class":504},"\"son\"",[147,66596,55587],{"class":157},[147,66598,51884],{"class":153},[147,66600,51580],{"class":157},[147,66602,66603,66605,66607],{"class":149,"line":2033},[147,66604,52690],{"class":157},[147,66606,51884],{"class":153},[147,66608,51580],{"class":157},[147,66610,66611,66613,66615],{"class":149,"line":2038},[147,66612,52417],{"class":157},[147,66614,52086],{"class":153},[147,66616,51580],{"class":157},[147,66618,66619,66621,66624,66626,66628,66630,66632,66635],{"class":149,"line":2052},[147,66620,11495],{"class":397},[147,66622,66623],{"class":448}," fa",[147,66625,13838],{"class":397},[147,66627,54669],{"class":157},[147,66629,54672],{"class":2237},[147,66631,401],{"class":157},[147,66633,66634],{"class":504},"'.father'",[147,66636,407],{"class":157},[147,66638,66639,66641,66644,66646,66648,66650,66652,66655],{"class":149,"line":2057},[147,66640,11495],{"class":397},[147,66642,66643],{"class":448}," son",[147,66645,13838],{"class":397},[147,66647,54669],{"class":157},[147,66649,54672],{"class":2237},[147,66651,401],{"class":157},[147,66653,66654],{"class":504},"'.son'",[147,66656,407],{"class":157},[147,66658,66659,66661,66663,66665,66667,66669,66671],{"class":149,"line":2851},[147,66660,52680],{"class":157},[147,66662,58086],{"class":2237},[147,66664,401],{"class":157},[147,66666,58091],{"class":504},[147,66668,12709],{"class":157},[147,66670,54722],{"class":397},[147,66672,54725],{"class":157},[147,66674,66675,66677,66679,66682],{"class":149,"line":2865},[147,66676,59198],{"class":2237},[147,66678,401],{"class":157},[147,66680,66681],{"class":504},"'woshiu1'",[147,66683,407],{"class":157},[147,66685,66686,66688,66690],{"class":149,"line":2873},[147,66687,54808],{"class":157},[147,66689,1637],{"class":448},[147,66691,407],{"class":157},[147,66693,66694,66697,66699,66701,66703,66705,66707],{"class":149,"line":2878},[147,66695,66696],{"class":157},"    fa.",[147,66698,58086],{"class":2237},[147,66700,401],{"class":157},[147,66702,58091],{"class":504},[147,66704,12709],{"class":157},[147,66706,54722],{"class":397},[147,66708,54725],{"class":157},[147,66710,66711,66713,66715,66718],{"class":149,"line":2884},[147,66712,59198],{"class":2237},[147,66714,401],{"class":157},[147,66716,66717],{"class":504},"'1'",[147,66719,407],{"class":157},[147,66721,66722,66724,66726],{"class":149,"line":2890},[147,66723,54808],{"class":157},[147,66725,1637],{"class":448},[147,66727,407],{"class":157},[147,66729,66730,66733,66735,66737,66739,66741,66743],{"class":149,"line":2895},[147,66731,66732],{"class":157},"    son.",[147,66734,58086],{"class":2237},[147,66736,401],{"class":157},[147,66738,58091],{"class":504},[147,66740,12709],{"class":157},[147,66742,54722],{"class":397},[147,66744,54725],{"class":157},[147,66746,66747,66749,66751,66754],{"class":149,"line":8222},[147,66748,59198],{"class":2237},[147,66750,401],{"class":157},[147,66752,66753],{"class":504},"'2'",[147,66755,407],{"class":157},[147,66757,66758,66760,66762],{"class":149,"line":8246},[147,66759,54808],{"class":157},[147,66761,1637],{"class":448},[147,66763,407],{"class":157},[147,66765,66766,66768,66770],{"class":149,"line":8251},[147,66767,52690],{"class":157},[147,66769,52086],{"class":153},[147,66771,51580],{"class":157},[147,66773,66774,66776,66778],{"class":149,"line":8257},[147,66775,52058],{"class":157},[147,66777,52073],{"class":153},[147,66779,51580],{"class":157},[147,66781,66782],{"class":149,"line":8284},[147,66783,2674],{"emptyLinePlaceholder":324},[147,66785,66786,66788,66790],{"class":149,"line":8289},[147,66787,52058],{"class":157},[147,66789,50909],{"class":153},[147,66791,51580],{"class":157},[19,66793,66794],{},[29,66795],{"alt":143,"src":66796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,66798,66799],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22271,66801,66803],{"id":66802},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,66805,66806],{},[29,66807],{"alt":143,"src":66808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,66810,66811],{},"反着来",[19,66813,66814],{},"注意是同名事件，比如都是‘click’",[22271,66816,66818],{"id":66817},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,66820,66821],{},[29,66822],{"alt":143,"src":66823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22271,66825,66827],{"id":66826},"_3314-解绑事件","3.3.1.4 解绑事件",[19,66829,66830],{},[29,66831],{"alt":143,"src":66832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,66834,66835],{},[29,66836],{"alt":143,"src":66837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22271,66839,66841],{"id":66840},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[350,66843,66844],{},[353,66845,66846],{},"事件类型的区别",[19,66848,66849],{},[29,66850],{"alt":143,"src":66851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,66853,66854],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[350,66856,66857],{"start":312},[353,66858,66859],{},"注册事件的区别",[19,66861,66862],{},[29,66863],{"alt":143,"src":66864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22271,66866,66868],{"id":66867},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,66870,66871],{},[29,66872],{"alt":143,"src":66873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,66875,66876],{},[29,66877],{"alt":143,"src":66878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[138,66880,66882],{"className":53340,"code":66881,"language":53342,"meta":143,"style":143},"\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",[51,66883,66884,66892,66909,66932,66940,66945,66950,66955,66959,66967,66975],{"__ignoreMap":143},[147,66885,66886,66888,66890],{"class":149,"line":150},[147,66887,1309],{"class":157},[147,66889,52073],{"class":153},[147,66891,51580],{"class":157},[147,66893,66894,66896,66899,66902,66904,66907],{"class":149,"line":312},[147,66895,52417],{"class":157},[147,66897,66898],{"class":153},"form",[147,66900,66901],{"class":2237}," action",[147,66903,445],{"class":157},[147,66905,66906],{"class":504},"\"http:\u002F\u002Fwww.itcast.cn\"",[147,66908,51580],{"class":157},[147,66910,66911,66913,66915,66917,66919,66922,66925,66927,66930],{"class":149,"line":1454},[147,66912,51614],{"class":157},[147,66914,54094],{"class":153},[147,66916,54097],{"class":2237},[147,66918,445],{"class":157},[147,66920,66921],{"class":504},"\"submit\"",[147,66923,66924],{"class":2237}," value",[147,66926,445],{"class":157},[147,66928,66929],{"class":504},"\"免费注册\"",[147,66931,51580],{"class":157},[147,66933,66934,66936,66938],{"class":149,"line":1469},[147,66935,51614],{"class":157},[147,66937,52086],{"class":153},[147,66939,51580],{"class":157},[147,66941,66942],{"class":149,"line":1475},[147,66943,66944],{"class":157},"      const form = document.querySelector('form')\n",[147,66946,66947],{"class":149,"line":1489},[147,66948,66949],{"class":157},"      form.addEventListener('submit', function (e) {\n",[147,66951,66952],{"class":149,"line":1495},[147,66953,66954],{"class":157},"        e.preventDefault()\n",[147,66956,66957],{"class":149,"line":1586},[147,66958,65088],{"class":157},[147,66960,66961,66963,66965],{"class":149,"line":1592},[147,66962,52049],{"class":157},[147,66964,52086],{"class":153},[147,66966,51580],{"class":157},[147,66968,66969,66971,66973],{"class":149,"line":1604},[147,66970,52690],{"class":157},[147,66972,66898],{"class":153},[147,66974,51580],{"class":157},[147,66976,66977,66979,66981],{"class":149,"line":1886},[147,66978,52058],{"class":157},[147,66980,52073],{"class":153},[147,66982,51580],{"class":157},[19,66984,66985],{},"点击不在跳转！！！",[367,66987,66989],{"id":66988},"_332-事件委托","3.3.2 事件委托",[19,66991,66992],{},[29,66993],{"alt":143,"src":66994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[138,66996,66998],{"className":50907,"code":66997,"language":50909,"meta":143,"style":143},"\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",[51,66999,67000,67010,67024,67028,67036,67050,67070,67082,67090,67094,67102,67110,67122,67134,67146,67158,67170,67183,67191,67199,67204,67223,67244,67249,67254,67259,67264,67273,67277,67287,67291,67296,67301,67315,67325,67329,67333,67341,67349,67353],{"__ignoreMap":143},[147,67001,67002,67004,67006,67008],{"class":149,"line":150},[147,67003,51571],{"class":157},[147,67005,51574],{"class":153},[147,67007,51577],{"class":2237},[147,67009,51580],{"class":157},[147,67011,67012,67014,67016,67018,67020,67022],{"class":149,"line":312},[147,67013,1309],{"class":157},[147,67015,50909],{"class":153},[147,67017,51589],{"class":2237},[147,67019,445],{"class":157},[147,67021,51594],{"class":504},[147,67023,51580],{"class":157},[147,67025,67026],{"class":149,"line":1454},[147,67027,2674],{"emptyLinePlaceholder":324},[147,67029,67030,67032,67034],{"class":149,"line":1469},[147,67031,1309],{"class":157},[147,67033,51607],{"class":153},[147,67035,51580],{"class":157},[147,67037,67038,67040,67042,67044,67046,67048],{"class":149,"line":1475},[147,67039,52417],{"class":157},[147,67041,51617],{"class":153},[147,67043,51620],{"class":2237},[147,67045,445],{"class":157},[147,67047,51625],{"class":504},[147,67049,51580],{"class":157},[147,67051,67052,67054,67056,67058,67060,67062,67064,67066,67068],{"class":149,"line":1489},[147,67053,52417],{"class":157},[147,67055,51617],{"class":153},[147,67057,15193],{"class":2237},[147,67059,445],{"class":157},[147,67061,51664],{"class":504},[147,67063,51644],{"class":2237},[147,67065,445],{"class":157},[147,67067,51671],{"class":504},[147,67069,51580],{"class":157},[147,67071,67072,67074,67076,67078,67080],{"class":149,"line":1495},[147,67073,52417],{"class":157},[147,67075,51680],{"class":153},[147,67077,51683],{"class":157},[147,67079,51680],{"class":153},[147,67081,51580],{"class":157},[147,67083,67084,67086,67088],{"class":149,"line":1586},[147,67085,52058],{"class":157},[147,67087,51607],{"class":153},[147,67089,51580],{"class":157},[147,67091,67092],{"class":149,"line":1592},[147,67093,2674],{"emptyLinePlaceholder":324},[147,67095,67096,67098,67100],{"class":149,"line":1604},[147,67097,1309],{"class":157},[147,67099,52073],{"class":153},[147,67101,51580],{"class":157},[147,67103,67104,67106,67108],{"class":149,"line":1886},[147,67105,52417],{"class":157},[147,67107,1406],{"class":153},[147,67109,51580],{"class":157},[147,67111,67112,67114,67116,67118,67120],{"class":149,"line":1891},[147,67113,51614],{"class":157},[147,67115,353],{"class":153},[147,67117,54239],{"class":157},[147,67119,353],{"class":153},[147,67121,51580],{"class":157},[147,67123,67124,67126,67128,67130,67132],{"class":149,"line":1897},[147,67125,51614],{"class":157},[147,67127,353],{"class":153},[147,67129,54258],{"class":157},[147,67131,353],{"class":153},[147,67133,51580],{"class":157},[147,67135,67136,67138,67140,67142,67144],{"class":149,"line":1902},[147,67137,51614],{"class":157},[147,67139,353],{"class":153},[147,67141,54277],{"class":157},[147,67143,353],{"class":153},[147,67145,51580],{"class":157},[147,67147,67148,67150,67152,67154,67156],{"class":149,"line":1916},[147,67149,51614],{"class":157},[147,67151,353],{"class":153},[147,67153,54296],{"class":157},[147,67155,353],{"class":153},[147,67157,51580],{"class":157},[147,67159,67160,67162,67164,67166,67168],{"class":149,"line":1921},[147,67161,51614],{"class":157},[147,67163,353],{"class":153},[147,67165,54315],{"class":157},[147,67167,353],{"class":153},[147,67169,51580],{"class":157},[147,67171,67172,67174,67176,67179,67181],{"class":149,"line":1927},[147,67173,51614],{"class":157},[147,67175,19],{"class":153},[147,67177,67178],{"class":157},">我不需要变色\u003C\u002F",[147,67180,19],{"class":153},[147,67182,51580],{"class":157},[147,67184,67185,67187,67189],{"class":149,"line":1948},[147,67186,52690],{"class":157},[147,67188,1406],{"class":153},[147,67190,51580],{"class":157},[147,67192,67193,67195,67197],{"class":149,"line":1953},[147,67194,52417],{"class":157},[147,67196,52086],{"class":153},[147,67198,51580],{"class":157},[147,67200,67201],{"class":149,"line":1967},[147,67202,67203],{"class":458},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[147,67205,67206,67208,67210,67212,67214,67216,67218,67221],{"class":149,"line":1972},[147,67207,11495],{"class":397},[147,67209,61565],{"class":448},[147,67211,13838],{"class":397},[147,67213,54669],{"class":157},[147,67215,54672],{"class":2237},[147,67217,401],{"class":157},[147,67219,67220],{"class":504},"'ul'",[147,67222,407],{"class":157},[147,67224,67225,67228,67230,67232,67234,67236,67238,67240,67242],{"class":149,"line":2001},[147,67226,67227],{"class":157},"    ul.",[147,67229,58086],{"class":2237},[147,67231,401],{"class":157},[147,67233,58091],{"class":504},[147,67235,12709],{"class":157},[147,67237,54722],{"class":397},[147,67239,1932],{"class":157},[147,67241,474],{"class":5490},[147,67243,12716],{"class":157},[147,67245,67246],{"class":149,"line":2006},[147,67247,67248],{"class":458},"      \u002F\u002F alert(1)\n",[147,67250,67251],{"class":149,"line":2023},[147,67252,67253],{"class":458},"      \u002F\u002F e.target就是我们点击的对象\n",[147,67255,67256],{"class":149,"line":2028},[147,67257,67258],{"class":458},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[147,67260,67261],{"class":149,"line":2033},[147,67262,67263],{"class":458},"      \u002F\u002F e.target.style.color = 'red'\n",[147,67265,67266,67268,67270],{"class":149,"line":2038},[147,67267,58517],{"class":157},[147,67269,58520],{"class":2237},[147,67271,67272],{"class":157},"(e)\n",[147,67274,67275],{"class":149,"line":2052},[147,67276,2674],{"emptyLinePlaceholder":324},[147,67278,67279,67281,67284],{"class":149,"line":2057},[147,67280,58517],{"class":157},[147,67282,67283],{"class":2237},"dir",[147,67285,67286],{"class":157},"(e.target)\n",[147,67288,67289],{"class":149,"line":2851},[147,67290,2674],{"emptyLinePlaceholder":324},[147,67292,67293],{"class":149,"line":2865},[147,67294,67295],{"class":458},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[147,67297,67298],{"class":149,"line":2873},[147,67299,67300],{"class":458},"      \u002F\u002F 通过tagName来进行判断\n",[147,67302,67303,67305,67308,67310,67313],{"class":149,"line":2878},[147,67304,54753],{"class":397},[147,67306,67307],{"class":157}," (e.target.tagName ",[147,67309,54759],{"class":397},[147,67311,67312],{"class":504}," 'LI'",[147,67314,12716],{"class":157},[147,67316,67317,67320,67322],{"class":149,"line":2884},[147,67318,67319],{"class":157},"        e.target.style.color ",[147,67321,445],{"class":397},[147,67323,67324],{"class":504}," 'red'\n",[147,67326,67327],{"class":149,"line":2890},[147,67328,52671],{"class":157},[147,67330,67331],{"class":149,"line":2895},[147,67332,33735],{"class":157},[147,67334,67335,67337,67339],{"class":149,"line":8222},[147,67336,52690],{"class":157},[147,67338,52086],{"class":153},[147,67340,51580],{"class":157},[147,67342,67343,67345,67347],{"class":149,"line":8246},[147,67344,52058],{"class":157},[147,67346,52073],{"class":153},[147,67348,51580],{"class":157},[147,67350,67351],{"class":149,"line":8251},[147,67352,2674],{"emptyLinePlaceholder":324},[147,67354,67355,67357,67359],{"class":149,"line":8257},[147,67356,52058],{"class":157},[147,67358,50909],{"class":153},[147,67360,51580],{"class":157},[19,67362,67363],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,67365,67366],{},"if(e.target.ragName==='P') {}",[19,67368,67369],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,67371,67372],{},"通过事件委托的方式实现tab栏切换改造：",[19,67374,67375],{},"一定要记住自定义属性！！！！！！",[19,67377,67378],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,67380,67381],{},"id是自定义的属性名",[19,67383,67384],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[138,67386,67388],{"className":50907,"code":67387,"language":50909,"meta":143,"style":143},"\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",[51,67389,67390,67400,67414,67418,67426,67440,67460,67480,67492,67500,67506,67516,67526,67530,67534,67540,67552,67564,67576,67592,67596,67600,67606,67618,67630,67642,67652,67662,67666,67670,67678,67690,67700,67712,67716,67720,67728,67738,67748,67758,67762,67766,67776,67790,67802,67806,67810,67822,67832,67848,67858,67862,67866,67880,67890,67900,67904,67908,67914,67928,67932,67936,67944,67954,67958,67962,67971,67981,67985,67993,68001,68005,68013,68027,68041,68053,68061,68100,68132,68164,68196,68228,68236,68244,68258,68292,68326,68360,68394,68428,68436,68444,68452,68457,68462,68481,68486,68506,68514,68519,68532,68553,68566,68570,68575,68580,68593,68613,68641,68645,68649,68653,68661,68669,68673],{"__ignoreMap":143},[147,67391,67392,67394,67396,67398],{"class":149,"line":150},[147,67393,51571],{"class":157},[147,67395,51574],{"class":153},[147,67397,51577],{"class":2237},[147,67399,51580],{"class":157},[147,67401,67402,67404,67406,67408,67410,67412],{"class":149,"line":312},[147,67403,1309],{"class":157},[147,67405,50909],{"class":153},[147,67407,51589],{"class":2237},[147,67409,445],{"class":157},[147,67411,51594],{"class":504},[147,67413,51580],{"class":157},[147,67415,67416],{"class":149,"line":1454},[147,67417,2674],{"emptyLinePlaceholder":324},[147,67419,67420,67422,67424],{"class":149,"line":1469},[147,67421,1309],{"class":157},[147,67423,51607],{"class":153},[147,67425,51580],{"class":157},[147,67427,67428,67430,67432,67434,67436,67438],{"class":149,"line":1475},[147,67429,52417],{"class":157},[147,67431,51617],{"class":153},[147,67433,51620],{"class":2237},[147,67435,445],{"class":157},[147,67437,51625],{"class":504},[147,67439,59400],{"class":157},[147,67441,67442,67444,67446,67448,67450,67452,67454,67456,67458],{"class":149,"line":1489},[147,67443,52417],{"class":157},[147,67445,51617],{"class":153},[147,67447,51636],{"class":2237},[147,67449,445],{"class":157},[147,67451,51641],{"class":504},[147,67453,51644],{"class":2237},[147,67455,445],{"class":157},[147,67457,51649],{"class":504},[147,67459,59400],{"class":157},[147,67461,67462,67464,67466,67468,67470,67472,67474,67476,67478],{"class":149,"line":1495},[147,67463,52417],{"class":157},[147,67465,51617],{"class":153},[147,67467,15193],{"class":2237},[147,67469,445],{"class":157},[147,67471,51664],{"class":504},[147,67473,51644],{"class":2237},[147,67475,445],{"class":157},[147,67477,51671],{"class":504},[147,67479,59400],{"class":157},[147,67481,67482,67484,67486,67488,67490],{"class":149,"line":1586},[147,67483,52417],{"class":157},[147,67485,51680],{"class":153},[147,67487,63898],{"class":157},[147,67489,51680],{"class":153},[147,67491,51580],{"class":157},[147,67493,67494,67496,67498],{"class":149,"line":1592},[147,67495,52417],{"class":157},[147,67497,308],{"class":153},[147,67499,51580],{"class":157},[147,67501,67502,67504],{"class":149,"line":1604},[147,67503,6677],{"class":153},[147,67505,15845],{"class":157},[147,67507,67508,67510,67512,67514],{"class":149,"line":1886},[147,67509,54979],{"class":448},[147,67511,51710],{"class":157},[147,67513,590],{"class":448},[147,67515,1565],{"class":157},[147,67517,67518,67520,67522,67524],{"class":149,"line":1891},[147,67519,54968],{"class":448},[147,67521,51710],{"class":157},[147,67523,590],{"class":448},[147,67525,1565],{"class":157},[147,67527,67528],{"class":149,"line":1897},[147,67529,2461],{"class":157},[147,67531,67532],{"class":149,"line":1902},[147,67533,2674],{"emptyLinePlaceholder":324},[147,67535,67536,67538],{"class":149,"line":1916},[147,67537,63949],{"class":2237},[147,67539,15845],{"class":157},[147,67541,67542,67544,67546,67548,67550],{"class":149,"line":1921},[147,67543,55044],{"class":448},[147,67545,51710],{"class":157},[147,67547,63960],{"class":448},[147,67549,51765],{"class":397},[147,67551,1565],{"class":157},[147,67553,67554,67556,67558,67560,67562],{"class":149,"line":1927},[147,67555,55058],{"class":448},[147,67557,51710],{"class":157},[147,67559,63973],{"class":448},[147,67561,51765],{"class":397},[147,67563,1565],{"class":157},[147,67565,67566,67568,67570,67572,67574],{"class":149,"line":1948},[147,67567,54979],{"class":448},[147,67569,51710],{"class":157},[147,67571,1099],{"class":448},[147,67573,51765],{"class":397},[147,67575,1565],{"class":157},[147,67577,67578,67580,67582,67584,67586,67588,67590],{"class":149,"line":1953},[147,67579,62250],{"class":448},[147,67581,51710],{"class":157},[147,67583,616],{"class":448},[147,67585,51765],{"class":397},[147,67587,51794],{"class":448},[147,67589,62517],{"class":448},[147,67591,1565],{"class":157},[147,67593,67594],{"class":149,"line":1967},[147,67595,2461],{"class":157},[147,67597,67598],{"class":149,"line":1972},[147,67599,2674],{"emptyLinePlaceholder":324},[147,67601,67602,67604],{"class":149,"line":2001},[147,67603,64018],{"class":2237},[147,67605,15845],{"class":157},[147,67607,67608,67610,67612,67614,67616],{"class":149,"line":2006},[147,67609,55044],{"class":448},[147,67611,51710],{"class":157},[147,67613,710],{"class":448},[147,67615,727],{"class":397},[147,67617,1565],{"class":157},[147,67619,67620,67622,67624,67626,67628],{"class":149,"line":2023},[147,67621,55058],{"class":448},[147,67623,51710],{"class":157},[147,67625,1306],{"class":448},[147,67627,51765],{"class":397},[147,67629,1565],{"class":157},[147,67631,67632,67634,67636,67638,67640],{"class":149,"line":2028},[147,67633,57632],{"class":448},[147,67635,51710],{"class":157},[147,67637,1306],{"class":448},[147,67639,51765],{"class":397},[147,67641,1565],{"class":157},[147,67643,67644,67646,67648,67650],{"class":149,"line":2033},[147,67645,55282],{"class":448},[147,67647,51710],{"class":157},[147,67649,51750],{"class":448},[147,67651,1565],{"class":157},[147,67653,67654,67656,67658,67660],{"class":149,"line":2038},[147,67655,55293],{"class":448},[147,67657,51710],{"class":157},[147,67659,51941],{"class":448},[147,67661,1565],{"class":157},[147,67663,67664],{"class":149,"line":2052},[147,67665,2461],{"class":157},[147,67667,67668],{"class":149,"line":2057},[147,67669,2674],{"emptyLinePlaceholder":324},[147,67671,67672,67674,67676],{"class":149,"line":2851},[147,67673,64018],{"class":2237},[147,67675,64091],{"class":153},[147,67677,15845],{"class":157},[147,67679,67680,67682,67684,67686,67688],{"class":149,"line":2865},[147,67681,55195],{"class":448},[147,67683,51710],{"class":157},[147,67685,1199],{"class":448},[147,67687,51765],{"class":397},[147,67689,1565],{"class":157},[147,67691,67692,67694,67696,67698],{"class":149,"line":2873},[147,67693,62607],{"class":448},[147,67695,51710],{"class":157},[147,67697,64114],{"class":448},[147,67699,1565],{"class":157},[147,67701,67702,67704,67706,67708,67710],{"class":149,"line":2878},[147,67703,62273],{"class":448},[147,67705,51710],{"class":157},[147,67707,1099],{"class":448},[147,67709,51765],{"class":397},[147,67711,1565],{"class":157},[147,67713,67714],{"class":149,"line":2884},[147,67715,2461],{"class":157},[147,67717,67718],{"class":149,"line":2890},[147,67719,2674],{"emptyLinePlaceholder":324},[147,67721,67722,67724,67726],{"class":149,"line":2895},[147,67723,64018],{"class":2237},[147,67725,61565],{"class":153},[147,67727,15845],{"class":157},[147,67729,67730,67732,67734,67736],{"class":149,"line":8222},[147,67731,55005],{"class":448},[147,67733,51710],{"class":157},[147,67735,55010],{"class":448},[147,67737,1565],{"class":157},[147,67739,67740,67742,67744,67746],{"class":149,"line":8246},[147,67741,55282],{"class":448},[147,67743,51710],{"class":157},[147,67745,51750],{"class":448},[147,67747,1565],{"class":157},[147,67749,67750,67752,67754,67756],{"class":149,"line":8251},[147,67751,55293],{"class":448},[147,67753,51710],{"class":157},[147,67755,51853],{"class":448},[147,67757,1565],{"class":157},[147,67759,67760],{"class":149,"line":8257},[147,67761,2461],{"class":157},[147,67763,67764],{"class":149,"line":8284},[147,67765,2674],{"emptyLinePlaceholder":324},[147,67767,67768,67770,67772,67774],{"class":149,"line":8289},[147,67769,64018],{"class":2237},[147,67771,61565],{"class":153},[147,67773,55348],{"class":153},[147,67775,15845],{"class":157},[147,67777,67778,67780,67782,67784,67786,67788],{"class":149,"line":8295},[147,67779,54979],{"class":448},[147,67781,51710],{"class":157},[147,67783,590],{"class":448},[147,67785,9224],{"class":448},[147,67787,51765],{"class":397},[147,67789,1565],{"class":157},[147,67791,67792,67794,67796,67798,67800],{"class":149,"line":8307},[147,67793,55195],{"class":448},[147,67795,51710],{"class":157},[147,67797,948],{"class":448},[147,67799,51765],{"class":397},[147,67801,1565],{"class":157},[147,67803,67804],{"class":149,"line":8319},[147,67805,2461],{"class":157},[147,67807,67808],{"class":149,"line":8331},[147,67809,2674],{"emptyLinePlaceholder":324},[147,67811,67812,67814,67816,67818,67820],{"class":149,"line":9990},[147,67813,64018],{"class":2237},[147,67815,61565],{"class":153},[147,67817,55348],{"class":153},[147,67819,1673],{"class":153},[147,67821,15845],{"class":157},[147,67823,67824,67826,67828,67830],{"class":149,"line":10015},[147,67825,64243],{"class":448},[147,67827,51710],{"class":157},[147,67829,55010],{"class":448},[147,67831,1565],{"class":157},[147,67833,67834,67836,67838,67840,67842,67844,67846],{"class":149,"line":10038},[147,67835,62505],{"class":448},[147,67837,51710],{"class":157},[147,67839,477],{"class":448},[147,67841,51765],{"class":397},[147,67843,51794],{"class":448},[147,67845,64264],{"class":448},[147,67847,1565],{"class":157},[147,67849,67850,67852,67854,67856],{"class":149,"line":10062},[147,67851,57689],{"class":448},[147,67853,51710],{"class":157},[147,67855,62642],{"class":448},[147,67857,1565],{"class":157},[147,67859,67860],{"class":149,"line":10067},[147,67861,2461],{"class":157},[147,67863,67864],{"class":149,"line":10072},[147,67865,2674],{"emptyLinePlaceholder":324},[147,67867,67868,67870,67872,67874,67876,67878],{"class":149,"line":10077},[147,67869,64018],{"class":2237},[147,67871,61565],{"class":153},[147,67873,55348],{"class":153},[147,67875,1673],{"class":153},[147,67877,64297],{"class":2237},[147,67879,15845],{"class":157},[147,67881,67882,67884,67886,67888],{"class":149,"line":10086},[147,67883,62064],{"class":448},[147,67885,51710],{"class":157},[147,67887,64308],{"class":448},[147,67889,1565],{"class":157},[147,67891,67892,67894,67896,67898],{"class":149,"line":10091},[147,67893,57689],{"class":448},[147,67895,51710],{"class":157},[147,67897,64308],{"class":448},[147,67899,1565],{"class":157},[147,67901,67902],{"class":149,"line":10097},[147,67903,2461],{"class":157},[147,67905,67906],{"class":149,"line":10118},[147,67907,2674],{"emptyLinePlaceholder":324},[147,67909,67910,67912],{"class":149,"line":10124},[147,67911,64333],{"class":2237},[147,67913,15845],{"class":157},[147,67915,67916,67918,67920,67922,67924,67926],{"class":149,"line":10138},[147,67917,54968],{"class":448},[147,67919,51710],{"class":157},[147,67921,590],{"class":448},[147,67923,64346],{"class":448},[147,67925,51765],{"class":397},[147,67927,1565],{"class":157},[147,67929,67930],{"class":149,"line":10144},[147,67931,2461],{"class":157},[147,67933,67934],{"class":149,"line":10171},[147,67935,2674],{"emptyLinePlaceholder":324},[147,67937,67938,67940,67942],{"class":149,"line":10180},[147,67939,64333],{"class":2237},[147,67941,62447],{"class":2237},[147,67943,15845],{"class":157},[147,67945,67946,67948,67950,67952],{"class":149,"line":10186},[147,67947,55282],{"class":448},[147,67949,51710],{"class":157},[147,67951,55010],{"class":448},[147,67953,1565],{"class":157},[147,67955,67956],{"class":149,"line":10194},[147,67957,2461],{"class":157},[147,67959,67960],{"class":149,"line":10199},[147,67961,2674],{"emptyLinePlaceholder":324},[147,67963,67964,67966,67969],{"class":149,"line":16877},[147,67965,64333],{"class":2237},[147,67967,67968],{"class":2237}," .active",[147,67970,15845],{"class":157},[147,67972,67973,67975,67977,67979],{"class":149,"line":16883},[147,67974,55282],{"class":448},[147,67976,51710],{"class":157},[147,67978,61142],{"class":448},[147,67980,1565],{"class":157},[147,67982,67983],{"class":149,"line":16906},[147,67984,2461],{"class":157},[147,67986,67987,67989,67991],{"class":149,"line":16912},[147,67988,52690],{"class":157},[147,67990,308],{"class":153},[147,67992,51580],{"class":157},[147,67994,67995,67997,67999],{"class":149,"line":16935},[147,67996,52058],{"class":157},[147,67998,51607],{"class":153},[147,68000,51580],{"class":157},[147,68002,68003],{"class":149,"line":16949},[147,68004,2674],{"emptyLinePlaceholder":324},[147,68006,68007,68009,68011],{"class":149,"line":16969},[147,68008,1309],{"class":157},[147,68010,52073],{"class":153},[147,68012,51580],{"class":157},[147,68014,68015,68017,68019,68021,68023,68025],{"class":149,"line":16975},[147,68016,52417],{"class":157},[147,68018,51884],{"class":153},[147,68020,53759],{"class":2237},[147,68022,445],{"class":157},[147,68024,64448],{"class":504},[147,68026,51580],{"class":157},[147,68028,68029,68031,68033,68035,68037,68039],{"class":149,"line":16986},[147,68030,51614],{"class":157},[147,68032,51884],{"class":153},[147,68034,53759],{"class":2237},[147,68036,445],{"class":157},[147,68038,64463],{"class":504},[147,68040,51580],{"class":157},[147,68042,68043,68045,68047,68049,68051],{"class":149,"line":17009},[147,68044,55507],{"class":157},[147,68046,367],{"class":153},[147,68048,64474],{"class":157},[147,68050,367],{"class":153},[147,68052,51580],{"class":157},[147,68054,68055,68057,68059],{"class":149,"line":17031},[147,68056,55507],{"class":157},[147,68058,1406],{"class":153},[147,68060,51580],{"class":157},[147,68062,68063,68065,68067,68069,68071,68073,68075,68077,68079,68081,68083,68085,68087,68090,68092,68094,68096,68098],{"class":149,"line":17036},[147,68064,55575],{"class":157},[147,68066,353],{"class":153},[147,68068,61325],{"class":157},[147,68070,637],{"class":153},[147,68072,53759],{"class":2237},[147,68074,445],{"class":157},[147,68076,59979],{"class":504},[147,68078,61330],{"class":2237},[147,68080,445],{"class":157},[147,68082,64509],{"class":504},[147,68084,54224],{"class":2237},[147,68086,445],{"class":157},[147,68088,68089],{"class":504},"\"0\"",[147,68091,64512],{"class":157},[147,68093,637],{"class":153},[147,68095,55587],{"class":157},[147,68097,353],{"class":153},[147,68099,51580],{"class":157},[147,68101,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130],{"class":149,"line":17042},[147,68103,55575],{"class":157},[147,68105,353],{"class":153},[147,68107,61325],{"class":157},[147,68109,637],{"class":153},[147,68111,61330],{"class":2237},[147,68113,445],{"class":157},[147,68115,64509],{"class":504},[147,68117,54224],{"class":2237},[147,68119,445],{"class":157},[147,68121,3952],{"class":504},[147,68123,64539],{"class":157},[147,68125,637],{"class":153},[147,68127,55587],{"class":157},[147,68129,353],{"class":153},[147,68131,51580],{"class":157},[147,68133,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162],{"class":149,"line":17056},[147,68135,55575],{"class":157},[147,68137,353],{"class":153},[147,68139,61325],{"class":157},[147,68141,637],{"class":153},[147,68143,61330],{"class":2237},[147,68145,445],{"class":157},[147,68147,64509],{"class":504},[147,68149,54224],{"class":2237},[147,68151,445],{"class":157},[147,68153,3975],{"class":504},[147,68155,64566],{"class":157},[147,68157,637],{"class":153},[147,68159,55587],{"class":157},[147,68161,353],{"class":153},[147,68163,51580],{"class":157},[147,68165,68166,68168,68170,68172,68174,68176,68178,68180,68182,68184,68186,68188,68190,68192,68194],{"class":149,"line":17069},[147,68167,55575],{"class":157},[147,68169,353],{"class":153},[147,68171,61325],{"class":157},[147,68173,637],{"class":153},[147,68175,61330],{"class":2237},[147,68177,445],{"class":157},[147,68179,64509],{"class":504},[147,68181,54224],{"class":2237},[147,68183,445],{"class":157},[147,68185,3988],{"class":504},[147,68187,64593],{"class":157},[147,68189,637],{"class":153},[147,68191,55587],{"class":157},[147,68193,353],{"class":153},[147,68195,51580],{"class":157},[147,68197,68198,68200,68202,68204,68206,68208,68210,68212,68214,68216,68218,68220,68222,68224,68226],{"class":149,"line":17074},[147,68199,55575],{"class":157},[147,68201,353],{"class":153},[147,68203,61325],{"class":157},[147,68205,637],{"class":153},[147,68207,61330],{"class":2237},[147,68209,445],{"class":157},[147,68211,64509],{"class":504},[147,68213,54224],{"class":2237},[147,68215,445],{"class":157},[147,68217,4001],{"class":504},[147,68219,64620],{"class":157},[147,68221,637],{"class":153},[147,68223,55587],{"class":157},[147,68225,353],{"class":153},[147,68227,51580],{"class":157},[147,68229,68230,68232,68234],{"class":149,"line":17088},[147,68231,55680],{"class":157},[147,68233,1406],{"class":153},[147,68235,51580],{"class":157},[147,68237,68238,68240,68242],{"class":149,"line":17093},[147,68239,52049],{"class":157},[147,68241,51884],{"class":153},[147,68243,51580],{"class":157},[147,68245,68246,68248,68250,68252,68254,68256],{"class":149,"line":17099},[147,68247,51614],{"class":157},[147,68249,51884],{"class":153},[147,68251,53759],{"class":2237},[147,68253,445],{"class":157},[147,68255,64657],{"class":504},[147,68257,51580],{"class":157},[147,68259,68260,68262,68264,68266,68268,68270,68272,68274,68276,68278,68280,68282,68284,68286,68288,68290],{"class":149,"line":17104},[147,68261,55507],{"class":157},[147,68263,51884],{"class":153},[147,68265,53759],{"class":2237},[147,68267,445],{"class":157},[147,68269,64672],{"class":504},[147,68271,61325],{"class":157},[147,68273,29],{"class":153},[147,68275,55512],{"class":2237},[147,68277,445],{"class":157},[147,68279,64683],{"class":504},[147,68281,55520],{"class":2237},[147,68283,445],{"class":157},[147,68285,7926],{"class":504},[147,68287,64692],{"class":157},[147,68289,51884],{"class":153},[147,68291,51580],{"class":157},[147,68293,68294,68296,68298,68300,68302,68304,68306,68308,68310,68312,68314,68316,68318,68320,68322,68324],{"class":149,"line":17118},[147,68295,55507],{"class":157},[147,68297,51884],{"class":153},[147,68299,53759],{"class":2237},[147,68301,445],{"class":157},[147,68303,62896],{"class":504},[147,68305,61325],{"class":157},[147,68307,29],{"class":153},[147,68309,55512],{"class":2237},[147,68311,445],{"class":157},[147,68313,64719],{"class":504},[147,68315,55520],{"class":2237},[147,68317,445],{"class":157},[147,68319,7926],{"class":504},[147,68321,64692],{"class":157},[147,68323,51884],{"class":153},[147,68325,51580],{"class":157},[147,68327,68328,68330,68332,68334,68336,68338,68340,68342,68344,68346,68348,68350,68352,68354,68356,68358],{"class":149,"line":17123},[147,68329,55507],{"class":157},[147,68331,51884],{"class":153},[147,68333,53759],{"class":2237},[147,68335,445],{"class":157},[147,68337,62896],{"class":504},[147,68339,61325],{"class":157},[147,68341,29],{"class":153},[147,68343,55512],{"class":2237},[147,68345,445],{"class":157},[147,68347,64754],{"class":504},[147,68349,55520],{"class":2237},[147,68351,445],{"class":157},[147,68353,7926],{"class":504},[147,68355,64692],{"class":157},[147,68357,51884],{"class":153},[147,68359,51580],{"class":157},[147,68361,68362,68364,68366,68368,68370,68372,68374,68376,68378,68380,68382,68384,68386,68388,68390,68392],{"class":149,"line":17128},[147,68363,55507],{"class":157},[147,68365,51884],{"class":153},[147,68367,53759],{"class":2237},[147,68369,445],{"class":157},[147,68371,62896],{"class":504},[147,68373,61325],{"class":157},[147,68375,29],{"class":153},[147,68377,55512],{"class":2237},[147,68379,445],{"class":157},[147,68381,64789],{"class":504},[147,68383,55520],{"class":2237},[147,68385,445],{"class":157},[147,68387,7926],{"class":504},[147,68389,64692],{"class":157},[147,68391,51884],{"class":153},[147,68393,51580],{"class":157},[147,68395,68396,68398,68400,68402,68404,68406,68408,68410,68412,68414,68416,68418,68420,68422,68424,68426],{"class":149,"line":17142},[147,68397,55507],{"class":157},[147,68399,51884],{"class":153},[147,68401,53759],{"class":2237},[147,68403,445],{"class":157},[147,68405,62896],{"class":504},[147,68407,61325],{"class":157},[147,68409,29],{"class":153},[147,68411,55512],{"class":2237},[147,68413,445],{"class":157},[147,68415,64824],{"class":504},[147,68417,55520],{"class":2237},[147,68419,445],{"class":157},[147,68421,7926],{"class":504},[147,68423,64692],{"class":157},[147,68425,51884],{"class":153},[147,68427,51580],{"class":157},[147,68429,68430,68432,68434],{"class":149,"line":17154},[147,68431,52049],{"class":157},[147,68433,51884],{"class":153},[147,68435,51580],{"class":157},[147,68437,68438,68440,68442],{"class":149,"line":17159},[147,68439,52690],{"class":157},[147,68441,51884],{"class":153},[147,68443,51580],{"class":157},[147,68445,68446,68448,68450],{"class":149,"line":17172},[147,68447,52417],{"class":157},[147,68449,52086],{"class":153},[147,68451,51580],{"class":157},[147,68453,68454],{"class":149,"line":17177},[147,68455,68456],{"class":458},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[147,68458,68459],{"class":149,"line":17182},[147,68460,68461],{"class":458},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[147,68463,68464,68466,68468,68470,68472,68474,68476,68479],{"class":149,"line":17187},[147,68465,11495],{"class":397},[147,68467,61565],{"class":448},[147,68469,13838],{"class":397},[147,68471,54669],{"class":157},[147,68473,54672],{"class":2237},[147,68475,401],{"class":157},[147,68477,68478],{"class":504},"'.tab-nav ul'",[147,68480,407],{"class":157},[147,68482,68483],{"class":149,"line":17200},[147,68484,68485],{"class":458},"    \u002F\u002F 2.添加事件\n",[147,68487,68488,68490,68492,68494,68496,68498,68500,68502,68504],{"class":149,"line":17205},[147,68489,67227],{"class":157},[147,68491,58086],{"class":2237},[147,68493,401],{"class":157},[147,68495,58091],{"class":504},[147,68497,12709],{"class":157},[147,68499,54722],{"class":397},[147,68501,1932],{"class":157},[147,68503,474],{"class":5490},[147,68505,12716],{"class":157},[147,68507,68508,68510,68512],{"class":149,"line":32907},[147,68509,58517],{"class":157},[147,68511,67283],{"class":2237},[147,68513,67286],{"class":157},[147,68515,68516],{"class":149,"line":32913},[147,68517,68518],{"class":458},"      \u002F\u002Fe.targer是我们点击的对象\n",[147,68520,68521,68523,68525,68527,68530],{"class":149,"line":32919},[147,68522,54753],{"class":397},[147,68524,67307],{"class":157},[147,68526,54759],{"class":397},[147,68528,68529],{"class":504}," 'A'",[147,68531,12716],{"class":157},[147,68533,68534,68536,68538,68540,68543,68545,68547,68549,68551],{"class":149,"line":32925},[147,68535,52198],{"class":157},[147,68537,54672],{"class":2237},[147,68539,401],{"class":157},[147,68541,68542],{"class":504},"'.active'",[147,68544,57276],{"class":157},[147,68546,57279],{"class":2237},[147,68548,401],{"class":157},[147,68550,64987],{"class":504},[147,68552,407],{"class":157},[147,68554,68555,68558,68560,68562,68564],{"class":149,"line":32931},[147,68556,68557],{"class":157},"        e.target.classList.",[147,68559,5608],{"class":2237},[147,68561,401],{"class":157},[147,68563,64987],{"class":504},[147,68565,407],{"class":157},[147,68567,68568],{"class":149,"line":32942},[147,68569,2674],{"emptyLinePlaceholder":324},[147,68571,68572],{"class":149,"line":32948},[147,68573,68574],{"class":458},"        \u002F\u002F 下面大盒子模块\n",[147,68576,68577],{"class":149,"line":32968},[147,68578,68579],{"class":458},"        \u002F\u002F console.log(e.target.dataset.id)\n",[147,68581,68582,68584,68586,68588,68590],{"class":149,"line":32974},[147,68583,61543],{"class":397},[147,68585,3306],{"class":448},[147,68587,13838],{"class":397},[147,68589,45840],{"class":397},[147,68591,68592],{"class":157},"e.target.dataset.id\n",[147,68594,68595,68597,68599,68601,68603,68605,68607,68609,68611],{"class":149,"line":32985},[147,68596,52198],{"class":157},[147,68598,54672],{"class":2237},[147,68600,401],{"class":157},[147,68602,65035],{"class":504},[147,68604,57276],{"class":157},[147,68606,57279],{"class":2237},[147,68608,401],{"class":157},[147,68610,64987],{"class":504},[147,68612,407],{"class":157},[147,68614,68615,68617,68619,68621,68623,68625,68627,68629,68631,68633,68635,68637,68639],{"class":149,"line":32991},[147,68616,52198],{"class":157},[147,68618,54672],{"class":2237},[147,68620,401],{"class":157},[147,68622,65061],{"class":504},[147,68624,840],{"class":157},[147,68626,45840],{"class":397},[147,68628,25392],{"class":448},[147,68630,57305],{"class":504},[147,68632,57276],{"class":157},[147,68634,5608],{"class":2237},[147,68636,401],{"class":157},[147,68638,64987],{"class":504},[147,68640,407],{"class":157},[147,68642,68643],{"class":149,"line":32997},[147,68644,2674],{"emptyLinePlaceholder":324},[147,68646,68647],{"class":149,"line":33003},[147,68648,52671],{"class":157},[147,68650,68651],{"class":149,"line":33009},[147,68652,33735],{"class":157},[147,68654,68655,68657,68659],{"class":149,"line":33015},[147,68656,52690],{"class":157},[147,68658,52086],{"class":153},[147,68660,51580],{"class":157},[147,68662,68663,68665,68667],{"class":149,"line":33021},[147,68664,52058],{"class":157},[147,68666,52073],{"class":153},[147,68668,51580],{"class":157},[147,68670,68671],{"class":149,"line":33027},[147,68672,2674],{"emptyLinePlaceholder":324},[147,68674,68675,68677,68679],{"class":149,"line":33047},[147,68676,52058],{"class":157},[147,68678,50909],{"class":153},[147,68680,51580],{"class":157},[367,68682,68684],{"id":68683},"_333-页面加载事件","3.3.3 页面加载事件",[350,68686,68687],{},[353,68688,68689],{},"load",[19,68691,68692],{},[29,68693],{"alt":143,"src":68694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,68696,68697],{},"window代表整个窗口，比document还要大",[19,68699,68700],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,68702,68703],{},"img.addEventListener('load', function () {",[19,68705,68706],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,68708,52737],{},[350,68710,68711],{"start":312},[353,68712,68713],{},"DOMContentLoaded",[19,68715,68716],{},[29,68717],{"alt":143,"src":68718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,68720,68721],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[367,68723,68725],{"id":68724},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,68727,68728],{},[29,68729],{"alt":143,"src":68730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,68732,68733],{},[29,68734],{"alt":143,"src":68735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,68737,68738],{},[29,68739],{"alt":143,"src":68740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,68742,68743],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,68745,68746],{},"获得的是数字型数据，不带单位",[19,68748,68749],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,68751,68752],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,68754,68755],{},"它是通过document.documentElement来获取",[19,68757,68758],{},[29,68759],{"alt":143,"src":68760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,68762,68763],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[367,68765,68767],{"id":68766},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,68769,68770],{},[29,68771],{"alt":143,"src":68772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,68774,68775],{},[29,68776],{"alt":143,"src":68777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[367,68779,68781],{"id":68780},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,68783,68784],{},[29,68785],{"alt":143,"src":68786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,68788,68789],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,68791,68792],{},[29,68793],{"alt":143,"src":68794},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,68796,68797],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,68799,68800],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,68802,68803],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,68805,68806],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,68808,68809],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,68811,68812],{},[29,68813],{"alt":143,"src":68814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,68816,68817],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,68819,68820],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,68822,68823],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,68825,68826],{},"e.pageX-box.getBoundingClientRect()",[367,68828,68830],{"id":68829},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,68832,68833],{},[29,68834],{"alt":143,"src":68835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,68837,68838],{},"这个是相对于视口来说的，它是个方法，不是属性值",[367,68840,68842],{"id":68841},"_338-总结","3.3.8 总结",[19,68844,68845],{},[29,68846],{"alt":143,"src":68847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,68849,68850],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,68852,68853],{},"修改盒子的宽高只能通过width和height来实现",[367,68855,68857],{"id":68856},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[138,68859,68861],{"className":50907,"code":68860,"language":50909,"meta":143,"style":143},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[51,68862,68863,68868,68873,68878,68883],{"__ignoreMap":143},[147,68864,68865],{"class":149,"line":150},[147,68866,68867],{"class":157},"\u002F* 页面滑动 *\u002F\n",[147,68869,68870],{"class":149,"line":312},[147,68871,68872],{"class":157},"html {\n",[147,68874,68875],{"class":149,"line":1454},[147,68876,68877],{"class":157},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[147,68879,68880],{"class":149,"line":1469},[147,68881,68882],{"class":157},"  scroll-behavior: smooth;\n",[147,68884,68885],{"class":149,"line":1475},[147,68886,1839],{"class":157},[19,68888,68889],{},"默认是auto",[367,68891,68893],{"id":68892},"_3310-日期对象","3.3.10 日期对象",[22271,68895,68897],{"id":68896},"_33101-实例化","3.3.10.1 实例化",[19,68899,68900],{},[29,68901],{"alt":143,"src":68902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22271,68904,68906],{"id":68905},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,68908,68909],{},[29,68910],{"alt":143,"src":68911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,68913,68914],{},"月份+1",[19,68916,68917],{},"老外认为第一天为0，星期天",[19,68919,68920],{},"方法使用的时候必须要跟括号",[19,68922,68923],{},"快速获得日期",[19,68925,68926],{},"\u002F\u002F 得到年月日",[19,68928,68929],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,68931,68932],{},"\u002F\u002F 得到当地日期",[19,68934,68935],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,68937,68938],{},"\u002F\u002F 得到当地时间",[19,68940,68941],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,68943,68944],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,68946,68947],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[52086,68949,68950],{},"\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,68952,68953],{},"学会去封装函数！",[22271,68955,68957],{"id":68956},"_33103-时间戳","3.3.10.3 时间戳",[19,68959,68960],{},[29,68961],{"alt":143,"src":68962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,68964,68965],{},[29,68966],{"alt":143,"src":68967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,68969,68970],{},"三种方法记住一个就可以",[367,68972,68974],{"id":68973},"_3311-节点操作","3.3.11 节点操作",[22271,68976,68978],{"id":68977},"_33111-dom节点","3.3.11.1 DOM节点",[19,68980,68981],{},[29,68982],{"alt":143,"src":68983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,68985,68986],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22271,68988,68990],{"id":68989},"_33112-查找节点","3.3.11.2 查找节点",[19,68992,68993],{},"前边的document.querySelector()是获取的元素",[19,68995,68996],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,68998,68999],{},[29,69000],{"alt":143,"src":69001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[350,69003,69004],{},[353,69005,69006],{},"父节点",[19,69008,69009],{},[29,69010],{"alt":143,"src":69011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[350,69013,69014],{"start":312},[353,69015,69016],{},"子节点",[19,69018,69019],{},[29,69020],{"alt":143,"src":69021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,69023,69024],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,69026,69027],{},"children获得的是伪数组，是亲儿子",[350,69029,69030],{"start":1454},[353,69031,69032],{},"兄弟节点",[19,69034,69035],{},[29,69036],{"alt":143,"src":69037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22271,69039,69041],{"id":69040},"_33113-增加节点","3.3.11.3 增加节点",[19,69043,69044],{},[29,69045],{"alt":143,"src":69046},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,69048,69049],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,69051,69052],{},[29,69053],{"alt":143,"src":69054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,69056,69057],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,69059,69060],{},"下面是写法的部分展示，就按照下边的格式来写",[19,69062,69063],{},"例：",[52086,69065,69066],{},"\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,69068,69069],{},[29,69070],{"alt":143,"src":69071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,69073,69074],{},"false只克隆标签，里边的内容不会克隆过来",[138,69076,69078],{"className":50907,"code":69077,"language":50909,"meta":143,"style":143},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[51,69079,69080],{"__ignoreMap":143},[147,69081,69082],{"class":149,"line":150},[147,69083,69077],{"class":157},[22271,69085,69087],{"id":69086},"_33114-删除节点","3.3.11.4 删除节点",[19,69089,69090],{},[29,69091],{"alt":143,"src":69092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,69094,69095],{},"父亲删儿子",[19,69097,69098],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[367,69100,69102],{"id":69101},"_3312-m端事件","3.3.12 M端事件",[19,69104,69105],{},"M端就是移动端",[19,69107,69108],{},[29,69109],{"alt":143,"src":69110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[367,69112,69114],{"id":69113},"_3313-插件","3.3.13 插件",[19,69116,69117],{},"要熟悉官网！！！",[19,69119,69120],{},[637,69121,69122],{"href":69122,"rel":69123},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[24138],[19,69125,69126],{},[637,69127,69128],{"href":69128,"rel":69129},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[24138],[367,69131,69133],{"id":69132},"_3314-学生信息表","3.3.14 学生信息表",[350,69135,69136,69139,69142,69145,69148,69151,69154,69157],{},[353,69137,69138],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[353,69140,69141],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[353,69143,69144],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[353,69146,69147],{},"用好表单元素自带的属性，value,name等",[353,69149,69150],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[353,69152,69153],{},"不要忘记事件对象",[353,69155,69156],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[353,69158,69159],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,69161,69162],{},"结构：",[138,69164,69166],{"className":50907,"code":69165,"language":50909,"meta":143,"style":143},"\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",[51,69167,69168,69178,69192,69196,69204,69218,69238,69259,69272,69296,69304,69308,69316,69329,69350,69378,69406,69411,69433,69453,69472,69480,69508,69530,69550,69570,69590,69610,69630,69638,69658,69666,69670,69683,69691,69699,69707,69720,69733,69746,69759,69772,69785,69798,69806,69814,69822,69827,69832,69837,69842,69847,69852,69857,69862,69867,69872,69877,69882,69887,69895,69903,69911,69915,69935,69954,69974,69994,70014,70034,70038,70043,70063,70068,70078,70083,70088,70108,70130,70135,70145,70149,70153,70158,70163,70192,70206,70221,70225,70229,70233,70238,70249,70262,70267,70272,70277,70282,70287,70291,70296,70301,70310,70315,70320,70332,70337,70344,70348,70353,70363,70368,70378,70383,70411,70432,70442,70462,70480,70497,70514,70531,70548,70552,70562,70567,70572,70577,70588,70592,70596,70600,70605,70610,70631,70643,70648,70653,70658,70672,70677,70684,70688,70692,70700,70704,70712,70716],{"__ignoreMap":143},[147,69169,69170,69172,69174,69176],{"class":149,"line":150},[147,69171,51571],{"class":157},[147,69173,51574],{"class":153},[147,69175,51577],{"class":2237},[147,69177,51580],{"class":157},[147,69179,69180,69182,69184,69186,69188,69190],{"class":149,"line":312},[147,69181,1309],{"class":157},[147,69183,50909],{"class":153},[147,69185,51589],{"class":2237},[147,69187,445],{"class":157},[147,69189,51594],{"class":504},[147,69191,51580],{"class":157},[147,69193,69194],{"class":149,"line":1454},[147,69195,2674],{"emptyLinePlaceholder":324},[147,69197,69198,69200,69202],{"class":149,"line":1469},[147,69199,1309],{"class":157},[147,69201,51607],{"class":153},[147,69203,51580],{"class":157},[147,69205,69206,69208,69210,69212,69214,69216],{"class":149,"line":1475},[147,69207,52417],{"class":157},[147,69209,51617],{"class":153},[147,69211,51620],{"class":2237},[147,69213,445],{"class":157},[147,69215,51625],{"class":504},[147,69217,59400],{"class":157},[147,69219,69220,69222,69224,69226,69228,69230,69232,69234,69236],{"class":149,"line":1489},[147,69221,52417],{"class":157},[147,69223,51617],{"class":153},[147,69225,15193],{"class":2237},[147,69227,445],{"class":157},[147,69229,51664],{"class":504},[147,69231,51644],{"class":2237},[147,69233,445],{"class":157},[147,69235,51671],{"class":504},[147,69237,59400],{"class":157},[147,69239,69240,69242,69244,69246,69248,69250,69252,69254,69257],{"class":149,"line":1495},[147,69241,52417],{"class":157},[147,69243,51617],{"class":153},[147,69245,51636],{"class":2237},[147,69247,445],{"class":157},[147,69249,51641],{"class":504},[147,69251,51644],{"class":2237},[147,69253,445],{"class":157},[147,69255,69256],{"class":504},"\"ie=edge\"",[147,69258,59400],{"class":157},[147,69260,69261,69263,69265,69268,69270],{"class":149,"line":1586},[147,69262,52417],{"class":157},[147,69264,51680],{"class":153},[147,69266,69267],{"class":157},">学生信息管理\u003C\u002F",[147,69269,51680],{"class":153},[147,69271,51580],{"class":157},[147,69273,69274,69276,69279,69282,69284,69287,69289,69291,69294],{"class":149,"line":1592},[147,69275,52417],{"class":157},[147,69277,69278],{"class":153},"link",[147,69280,69281],{"class":2237}," rel",[147,69283,445],{"class":157},[147,69285,69286],{"class":504},"\"stylesheet\"",[147,69288,61330],{"class":2237},[147,69290,445],{"class":157},[147,69292,69293],{"class":504},"\"css\u002Findex.css\"",[147,69295,59400],{"class":157},[147,69297,69298,69300,69302],{"class":149,"line":1604},[147,69299,52058],{"class":157},[147,69301,51607],{"class":153},[147,69303,51580],{"class":157},[147,69305,69306],{"class":149,"line":1886},[147,69307,2674],{"emptyLinePlaceholder":324},[147,69309,69310,69312,69314],{"class":149,"line":1891},[147,69311,1309],{"class":157},[147,69313,52073],{"class":153},[147,69315,51580],{"class":157},[147,69317,69318,69320,69322,69325,69327],{"class":149,"line":1897},[147,69319,52417],{"class":157},[147,69321,10],{"class":153},[147,69323,69324],{"class":157},">新增学员\u003C\u002F",[147,69326,10],{"class":153},[147,69328,51580],{"class":157},[147,69330,69331,69333,69335,69337,69339,69341,69344,69346,69348],{"class":149,"line":1902},[147,69332,52417],{"class":157},[147,69334,66898],{"class":153},[147,69336,53759],{"class":2237},[147,69338,445],{"class":157},[147,69340,62937],{"class":504},[147,69342,69343],{"class":2237}," autocomplete",[147,69345,445],{"class":157},[147,69347,32050],{"class":504},[147,69349,51580],{"class":157},[147,69351,69352,69355,69357,69359,69361,69363,69365,69367,69370,69372,69374,69376],{"class":149,"line":1916},[147,69353,69354],{"class":157},"    姓名：\u003C",[147,69356,54094],{"class":153},[147,69358,54097],{"class":2237},[147,69360,445],{"class":157},[147,69362,62972],{"class":504},[147,69364,53759],{"class":2237},[147,69366,445],{"class":157},[147,69368,69369],{"class":504},"\"uname\"",[147,69371,15193],{"class":2237},[147,69373,445],{"class":157},[147,69375,69369],{"class":504},[147,69377,59400],{"class":157},[147,69379,69380,69383,69385,69387,69389,69391,69393,69395,69398,69400,69402,69404],{"class":149,"line":1921},[147,69381,69382],{"class":157},"    年龄：\u003C",[147,69384,54094],{"class":153},[147,69386,54097],{"class":2237},[147,69388,445],{"class":157},[147,69390,62972],{"class":504},[147,69392,53759],{"class":2237},[147,69394,445],{"class":157},[147,69396,69397],{"class":504},"\"age\"",[147,69399,15193],{"class":2237},[147,69401,445],{"class":157},[147,69403,69397],{"class":504},[147,69405,59400],{"class":157},[147,69407,69408],{"class":149,"line":1927},[147,69409,69410],{"class":157},"    性别:\n",[147,69412,69413,69415,69418,69420,69422,69425,69427,69429,69431],{"class":149,"line":1948},[147,69414,51614],{"class":157},[147,69416,69417],{"class":153},"select",[147,69419,15193],{"class":2237},[147,69421,445],{"class":157},[147,69423,69424],{"class":504},"\"gender\"",[147,69426,53759],{"class":2237},[147,69428,445],{"class":157},[147,69430,69424],{"class":504},[147,69432,51580],{"class":157},[147,69434,69435,69437,69440,69442,69444,69446,69449,69451],{"class":149,"line":1953},[147,69436,55507],{"class":157},[147,69438,69439],{"class":153},"option",[147,69441,66924],{"class":2237},[147,69443,445],{"class":157},[147,69445,10235],{"class":504},[147,69447,69448],{"class":157},">男\u003C\u002F",[147,69450,69439],{"class":153},[147,69452,51580],{"class":157},[147,69454,69455,69457,69459,69461,69463,69465,69468,69470],{"class":149,"line":1967},[147,69456,55507],{"class":157},[147,69458,69439],{"class":153},[147,69460,66924],{"class":2237},[147,69462,445],{"class":157},[147,69464,10304],{"class":504},[147,69466,69467],{"class":157},">女\u003C\u002F",[147,69469,69439],{"class":153},[147,69471,51580],{"class":157},[147,69473,69474,69476,69478],{"class":149,"line":1972},[147,69475,52049],{"class":157},[147,69477,69417],{"class":153},[147,69479,51580],{"class":157},[147,69481,69482,69485,69487,69489,69491,69493,69495,69497,69500,69502,69504,69506],{"class":149,"line":2001},[147,69483,69484],{"class":157},"    薪资：\u003C",[147,69486,54094],{"class":153},[147,69488,54097],{"class":2237},[147,69490,445],{"class":157},[147,69492,62972],{"class":504},[147,69494,53759],{"class":2237},[147,69496,445],{"class":157},[147,69498,69499],{"class":504},"\"salary\"",[147,69501,15193],{"class":2237},[147,69503,445],{"class":157},[147,69505,69499],{"class":504},[147,69507,59400],{"class":157},[147,69509,69510,69513,69515,69517,69519,69522,69524,69526,69528],{"class":149,"line":2006},[147,69511,69512],{"class":157},"    就业城市：\u003C",[147,69514,69417],{"class":153},[147,69516,15193],{"class":2237},[147,69518,445],{"class":157},[147,69520,69521],{"class":504},"\"city\"",[147,69523,53759],{"class":2237},[147,69525,445],{"class":157},[147,69527,69521],{"class":504},[147,69529,51580],{"class":157},[147,69531,69532,69534,69536,69538,69540,69543,69546,69548],{"class":149,"line":2023},[147,69533,55507],{"class":157},[147,69535,69439],{"class":153},[147,69537,66924],{"class":2237},[147,69539,445],{"class":157},[147,69541,69542],{"class":504},"\"北京\"",[147,69544,69545],{"class":157},">北京\u003C\u002F",[147,69547,69439],{"class":153},[147,69549,51580],{"class":157},[147,69551,69552,69554,69556,69558,69560,69563,69566,69568],{"class":149,"line":2028},[147,69553,55507],{"class":157},[147,69555,69439],{"class":153},[147,69557,66924],{"class":2237},[147,69559,445],{"class":157},[147,69561,69562],{"class":504},"\"上海\"",[147,69564,69565],{"class":157},">上海\u003C\u002F",[147,69567,69439],{"class":153},[147,69569,51580],{"class":157},[147,69571,69572,69574,69576,69578,69580,69583,69586,69588],{"class":149,"line":2033},[147,69573,55507],{"class":157},[147,69575,69439],{"class":153},[147,69577,66924],{"class":2237},[147,69579,445],{"class":157},[147,69581,69582],{"class":504},"\"广州\"",[147,69584,69585],{"class":157},">广州\u003C\u002F",[147,69587,69439],{"class":153},[147,69589,51580],{"class":157},[147,69591,69592,69594,69596,69598,69600,69603,69606,69608],{"class":149,"line":2038},[147,69593,55507],{"class":157},[147,69595,69439],{"class":153},[147,69597,66924],{"class":2237},[147,69599,445],{"class":157},[147,69601,69602],{"class":504},"\"深圳\"",[147,69604,69605],{"class":157},">深圳\u003C\u002F",[147,69607,69439],{"class":153},[147,69609,51580],{"class":157},[147,69611,69612,69614,69616,69618,69620,69623,69626,69628],{"class":149,"line":2052},[147,69613,55507],{"class":157},[147,69615,69439],{"class":153},[147,69617,66924],{"class":2237},[147,69619,445],{"class":157},[147,69621,69622],{"class":504},"\"曹县\"",[147,69624,69625],{"class":157},">曹县\u003C\u002F",[147,69627,69439],{"class":153},[147,69629,51580],{"class":157},[147,69631,69632,69634,69636],{"class":149,"line":2057},[147,69633,52049],{"class":157},[147,69635,69417],{"class":153},[147,69637,51580],{"class":157},[147,69639,69640,69642,69644,69646,69648,69651,69654,69656],{"class":149,"line":2851},[147,69641,51614],{"class":157},[147,69643,54160],{"class":153},[147,69645,53759],{"class":2237},[147,69647,445],{"class":157},[147,69649,69650],{"class":504},"\"add\"",[147,69652,69653],{"class":157},">录入\u003C\u002F",[147,69655,54160],{"class":153},[147,69657,51580],{"class":157},[147,69659,69660,69662,69664],{"class":149,"line":2865},[147,69661,52690],{"class":157},[147,69663,66898],{"class":153},[147,69665,51580],{"class":157},[147,69667,69668],{"class":149,"line":2873},[147,69669,2674],{"emptyLinePlaceholder":324},[147,69671,69672,69674,69676,69679,69681],{"class":149,"line":2878},[147,69673,52417],{"class":157},[147,69675,10],{"class":153},[147,69677,69678],{"class":157},">就业榜\u003C\u002F",[147,69680,10],{"class":153},[147,69682,51580],{"class":157},[147,69684,69685,69687,69689],{"class":149,"line":2884},[147,69686,52417],{"class":157},[147,69688,537],{"class":153},[147,69690,51580],{"class":157},[147,69692,69693,69695,69697],{"class":149,"line":2890},[147,69694,51614],{"class":157},[147,69696,540],{"class":153},[147,69698,51580],{"class":157},[147,69700,69701,69703,69705],{"class":149,"line":2895},[147,69702,55507],{"class":157},[147,69704,543],{"class":153},[147,69706,51580],{"class":157},[147,69708,69709,69711,69713,69716,69718],{"class":149,"line":8222},[147,69710,55575],{"class":157},[147,69712,546],{"class":153},[147,69714,69715],{"class":157},">序号\u003C\u002F",[147,69717,546],{"class":153},[147,69719,51580],{"class":157},[147,69721,69722,69724,69726,69729,69731],{"class":149,"line":8246},[147,69723,55575],{"class":157},[147,69725,546],{"class":153},[147,69727,69728],{"class":157},">姓名\u003C\u002F",[147,69730,546],{"class":153},[147,69732,51580],{"class":157},[147,69734,69735,69737,69739,69742,69744],{"class":149,"line":8251},[147,69736,55575],{"class":157},[147,69738,546],{"class":153},[147,69740,69741],{"class":157},">年龄\u003C\u002F",[147,69743,546],{"class":153},[147,69745,51580],{"class":157},[147,69747,69748,69750,69752,69755,69757],{"class":149,"line":8257},[147,69749,55575],{"class":157},[147,69751,546],{"class":153},[147,69753,69754],{"class":157},">性别\u003C\u002F",[147,69756,546],{"class":153},[147,69758,51580],{"class":157},[147,69760,69761,69763,69765,69768,69770],{"class":149,"line":8284},[147,69762,55575],{"class":157},[147,69764,546],{"class":153},[147,69766,69767],{"class":157},">薪资\u003C\u002F",[147,69769,546],{"class":153},[147,69771,51580],{"class":157},[147,69773,69774,69776,69778,69781,69783],{"class":149,"line":8289},[147,69775,55575],{"class":157},[147,69777,546],{"class":153},[147,69779,69780],{"class":157},">就业城市\u003C\u002F",[147,69782,546],{"class":153},[147,69784,51580],{"class":157},[147,69786,69787,69789,69791,69794,69796],{"class":149,"line":8295},[147,69788,55575],{"class":157},[147,69790,546],{"class":153},[147,69792,69793],{"class":157},">操作\u003C\u002F",[147,69795,546],{"class":153},[147,69797,51580],{"class":157},[147,69799,69800,69802,69804],{"class":149,"line":8307},[147,69801,55680],{"class":157},[147,69803,543],{"class":153},[147,69805,51580],{"class":157},[147,69807,69808,69810,69812],{"class":149,"line":8319},[147,69809,52049],{"class":157},[147,69811,540],{"class":153},[147,69813,51580],{"class":157},[147,69815,69816,69818,69820],{"class":149,"line":8331},[147,69817,51614],{"class":157},[147,69819,583],{"class":153},[147,69821,51580],{"class":157},[147,69823,69824],{"class":149,"line":9990},[147,69825,69826],{"class":458},"      \u003C!-- \n",[147,69828,69829],{"class":149,"line":10015},[147,69830,69831],{"class":458},"        \u003Ctr>\n",[147,69833,69834],{"class":149,"line":10038},[147,69835,69836],{"class":458},"          \u003Ctd>1001\u003C\u002Ftd>\n",[147,69838,69839],{"class":149,"line":10062},[147,69840,69841],{"class":458},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[147,69843,69844],{"class":149,"line":10067},[147,69845,69846],{"class":458},"          \u003Ctd>19\u003C\u002Ftd>\n",[147,69848,69849],{"class":149,"line":10072},[147,69850,69851],{"class":458},"          \u003Ctd>男\u003C\u002Ftd>\n",[147,69853,69854],{"class":149,"line":10077},[147,69855,69856],{"class":458},"          \u003Ctd>15000\u003C\u002Ftd>\n",[147,69858,69859],{"class":149,"line":10086},[147,69860,69861],{"class":458},"          \u003Ctd>上海\u003C\u002Ftd>\n",[147,69863,69864],{"class":149,"line":10091},[147,69865,69866],{"class":458},"          \u003Ctd>\n",[147,69868,69869],{"class":149,"line":10097},[147,69870,69871],{"class":458},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[147,69873,69874],{"class":149,"line":10118},[147,69875,69876],{"class":458},"          \u003C\u002Ftd>\n",[147,69878,69879],{"class":149,"line":10124},[147,69880,69881],{"class":458},"        \u003C\u002Ftr> \n",[147,69883,69884],{"class":149,"line":10138},[147,69885,69886],{"class":458},"        -->\n",[147,69888,69889,69891,69893],{"class":149,"line":10144},[147,69890,52049],{"class":157},[147,69892,583],{"class":153},[147,69894,51580],{"class":157},[147,69896,69897,69899,69901],{"class":149,"line":10171},[147,69898,52690],{"class":157},[147,69900,537],{"class":153},[147,69902,51580],{"class":157},[147,69904,69905,69907,69909],{"class":149,"line":10180},[147,69906,52417],{"class":157},[147,69908,52086],{"class":153},[147,69910,51580],{"class":157},[147,69912,69913],{"class":149,"line":10186},[147,69914,60231],{"class":458},[147,69916,69917,69919,69922,69924,69926,69928,69930,69933],{"class":149,"line":10194},[147,69918,11495],{"class":397},[147,69920,69921],{"class":448}," uname",[147,69923,13838],{"class":397},[147,69925,54669],{"class":157},[147,69927,54672],{"class":2237},[147,69929,401],{"class":157},[147,69931,69932],{"class":504},"'.uname'",[147,69934,407],{"class":157},[147,69936,69937,69939,69941,69943,69945,69947,69949,69952],{"class":149,"line":10199},[147,69938,11495],{"class":397},[147,69940,15962],{"class":448},[147,69942,13838],{"class":397},[147,69944,54669],{"class":157},[147,69946,54672],{"class":2237},[147,69948,401],{"class":157},[147,69950,69951],{"class":504},"'.age'",[147,69953,407],{"class":157},[147,69955,69956,69958,69961,69963,69965,69967,69969,69972],{"class":149,"line":16877},[147,69957,11495],{"class":397},[147,69959,69960],{"class":448}," gender",[147,69962,13838],{"class":397},[147,69964,54669],{"class":157},[147,69966,54672],{"class":2237},[147,69968,401],{"class":157},[147,69970,69971],{"class":504},"'.gender'",[147,69973,407],{"class":157},[147,69975,69976,69978,69981,69983,69985,69987,69989,69992],{"class":149,"line":16883},[147,69977,11495],{"class":397},[147,69979,69980],{"class":448}," salary",[147,69982,13838],{"class":397},[147,69984,54669],{"class":157},[147,69986,54672],{"class":2237},[147,69988,401],{"class":157},[147,69990,69991],{"class":504},"'.salary'",[147,69993,407],{"class":157},[147,69995,69996,69998,70001,70003,70005,70007,70009,70012],{"class":149,"line":16906},[147,69997,11495],{"class":397},[147,69999,70000],{"class":448}," city",[147,70002,13838],{"class":397},[147,70004,54669],{"class":157},[147,70006,54672],{"class":2237},[147,70008,401],{"class":157},[147,70010,70011],{"class":504},"'.city'",[147,70013,407],{"class":157},[147,70015,70016,70018,70021,70023,70025,70027,70029,70032],{"class":149,"line":16912},[147,70017,11495],{"class":397},[147,70019,70020],{"class":448}," tbody",[147,70022,13838],{"class":397},[147,70024,54669],{"class":157},[147,70026,54672],{"class":2237},[147,70028,401],{"class":157},[147,70030,70031],{"class":504},"'tbody'",[147,70033,407],{"class":157},[147,70035,70036],{"class":149,"line":16935},[147,70037,2674],{"emptyLinePlaceholder":324},[147,70039,70040],{"class":149,"line":16949},[147,70041,70042],{"class":458},"    \u002F\u002F 获取所有带有name属性的元素\n",[147,70044,70045,70047,70050,70052,70054,70056,70058,70061],{"class":149,"line":16969},[147,70046,11495],{"class":397},[147,70048,70049],{"class":448}," items",[147,70051,13838],{"class":397},[147,70053,54669],{"class":157},[147,70055,55954],{"class":2237},[147,70057,401],{"class":157},[147,70059,70060],{"class":504},"'[name]'",[147,70062,407],{"class":157},[147,70064,70065],{"class":149,"line":16975},[147,70066,70067],{"class":458},"    \u002F\u002F 声明一个空的数组\n",[147,70069,70070,70072,70074,70076],{"class":149,"line":16986},[147,70071,11495],{"class":397},[147,70073,57968],{"class":448},[147,70075,13838],{"class":397},[147,70077,52111],{"class":157},[147,70079,70080],{"class":149,"line":17009},[147,70081,70082],{"class":458},"    \u002F\u002F 1.录入模块\n",[147,70084,70085],{"class":149,"line":17031},[147,70086,70087],{"class":458},"    \u002F\u002F 1.1这是一个表单提交事件\n",[147,70089,70090,70092,70095,70097,70099,70101,70103,70106],{"class":149,"line":17036},[147,70091,11495],{"class":397},[147,70093,70094],{"class":448}," info",[147,70096,13838],{"class":397},[147,70098,54669],{"class":157},[147,70100,54672],{"class":2237},[147,70102,401],{"class":157},[147,70104,70105],{"class":504},"'.info'",[147,70107,407],{"class":157},[147,70109,70110,70113,70115,70117,70120,70122,70124,70126,70128],{"class":149,"line":17042},[147,70111,70112],{"class":157},"    info.",[147,70114,58086],{"class":2237},[147,70116,401],{"class":157},[147,70118,70119],{"class":504},"'submit'",[147,70121,12709],{"class":157},[147,70123,54722],{"class":397},[147,70125,1932],{"class":157},[147,70127,474],{"class":5490},[147,70129,12716],{"class":157},[147,70131,70132],{"class":149,"line":17056},[147,70133,70134],{"class":458},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[147,70136,70137,70140,70143],{"class":149,"line":17069},[147,70138,70139],{"class":157},"      e.",[147,70141,70142],{"class":2237},"preventDefault",[147,70144,2250],{"class":157},[147,70146,70147],{"class":149,"line":17074},[147,70148,60285],{"class":458},[147,70150,70151],{"class":149,"line":17088},[147,70152,2674],{"emptyLinePlaceholder":324},[147,70154,70155],{"class":149,"line":17093},[147,70156,70157],{"class":458},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[147,70159,70160],{"class":149,"line":17099},[147,70161,70162],{"class":458},"      \u002F\u002F 先遍历循环\n",[147,70164,70165,70167,70169,70171,70173,70175,70177,70179,70181,70184,70186,70188,70190],{"class":149,"line":17104},[147,70166,52557],{"class":397},[147,70168,1932],{"class":157},[147,70170,52120],{"class":397},[147,70172,9712],{"class":157},[147,70174,445],{"class":397},[147,70176,4367],{"class":448},[147,70178,9719],{"class":157},[147,70180,1309],{"class":397},[147,70182,70183],{"class":157}," items.",[147,70185,52241],{"class":448},[147,70187,3488],{"class":157},[147,70189,2566],{"class":397},[147,70191,12716],{"class":157},[147,70193,70194,70196,70199,70201,70204],{"class":149,"line":17118},[147,70195,2771],{"class":397},[147,70197,70198],{"class":157}," (items[i].value ",[147,70200,54759],{"class":397},[147,70202,70203],{"class":504}," ''",[147,70205,12716],{"class":157},[147,70207,70208,70211,70214,70216,70219],{"class":149,"line":17123},[147,70209,70210],{"class":397},"          return",[147,70212,70213],{"class":2237}," alert",[147,70215,401],{"class":157},[147,70217,70218],{"class":504},"'输入内容不能为空'",[147,70220,407],{"class":157},[147,70222,70223],{"class":149,"line":17128},[147,70224,2803],{"class":157},[147,70226,70227],{"class":149,"line":17142},[147,70228,52671],{"class":157},[147,70230,70231],{"class":149,"line":17154},[147,70232,2674],{"emptyLinePlaceholder":324},[147,70234,70235],{"class":149,"line":17159},[147,70236,70237],{"class":458},"      \u002F\u002F 创建新的对象\n",[147,70239,70240,70242,70245,70247],{"class":149,"line":17172},[147,70241,58501],{"class":397},[147,70243,70244],{"class":448}," obj",[147,70246,13838],{"class":397},[147,70248,15845],{"class":157},[147,70250,70251,70254,70256,70258,70260],{"class":149,"line":17177},[147,70252,70253],{"class":157},"        stuID: arr.",[147,70255,52241],{"class":448},[147,70257,45840],{"class":397},[147,70259,25392],{"class":448},[147,70261,31740],{"class":157},[147,70263,70264],{"class":149,"line":17182},[147,70265,70266],{"class":157},"        uname: uname.value,\n",[147,70268,70269],{"class":149,"line":17187},[147,70270,70271],{"class":157},"        age: age.value,\n",[147,70273,70274],{"class":149,"line":17200},[147,70275,70276],{"class":157},"        gender: gender.value,\n",[147,70278,70279],{"class":149,"line":17205},[147,70280,70281],{"class":157},"        salary: salary.value,\n",[147,70283,70284],{"class":149,"line":32907},[147,70285,70286],{"class":157},"        city: city.value\n",[147,70288,70289],{"class":149,"line":32913},[147,70290,52671],{"class":157},[147,70292,70293],{"class":149,"line":32919},[147,70294,70295],{"class":458},"      \u002F\u002F console.log(obj);\n",[147,70297,70298],{"class":149,"line":32925},[147,70299,70300],{"class":458},"      \u002F\u002F 追加到数组里面\n",[147,70302,70303,70305,70307],{"class":149,"line":32931},[147,70304,58280],{"class":157},[147,70306,52157],{"class":2237},[147,70308,70309],{"class":157},"(obj)\n",[147,70311,70312],{"class":149,"line":32942},[147,70313,70314],{"class":458},"      \u002F\u002F console.log(arr);\n",[147,70316,70317],{"class":149,"line":32948},[147,70318,70319],{"class":458},"      \u002F\u002F 清空表单  reset重置表单\n",[147,70321,70322,70325,70327,70330],{"class":149,"line":32968},[147,70323,70324],{"class":448},"      this",[147,70326,957],{"class":157},[147,70328,70329],{"class":2237},"reset",[147,70331,2250],{"class":157},[147,70333,70334],{"class":149,"line":32974},[147,70335,70336],{"class":458},"      \u002F\u002F 调用渲染函数\n",[147,70338,70339,70342],{"class":149,"line":32985},[147,70340,70341],{"class":2237},"      render",[147,70343,2250],{"class":157},[147,70345,70346],{"class":149,"line":32991},[147,70347,33735],{"class":157},[147,70349,70350],{"class":149,"line":32997},[147,70351,70352],{"class":458},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[147,70354,70355,70358,70361],{"class":149,"line":33003},[147,70356,70357],{"class":397},"    function",[147,70359,70360],{"class":2237}," render",[147,70362,11127],{"class":157},[147,70364,70365],{"class":149,"line":33009},[147,70366,70367],{"class":458},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[147,70369,70370,70373,70375],{"class":149,"line":33015},[147,70371,70372],{"class":157},"      tbody.innerHTML ",[147,70374,445],{"class":397},[147,70376,70377],{"class":504}," ''\n",[147,70379,70380],{"class":149,"line":33021},[147,70381,70382],{"class":458},"      \u002F\u002F 遍历数组\n",[147,70384,70385,70387,70389,70391,70393,70395,70397,70399,70401,70403,70405,70407,70409],{"class":149,"line":33027},[147,70386,52557],{"class":397},[147,70388,1932],{"class":157},[147,70390,52120],{"class":397},[147,70392,9712],{"class":157},[147,70394,445],{"class":397},[147,70396,4367],{"class":448},[147,70398,9719],{"class":157},[147,70400,1309],{"class":397},[147,70402,52238],{"class":157},[147,70404,52241],{"class":448},[147,70406,3488],{"class":157},[147,70408,2566],{"class":397},[147,70410,12716],{"class":157},[147,70412,70413,70415,70418,70420,70422,70425,70427,70430],{"class":149,"line":33047},[147,70414,61543],{"class":397},[147,70416,70417],{"class":448}," tr",[147,70419,13838],{"class":397},[147,70421,54669],{"class":157},[147,70423,70424],{"class":2237},"createElement",[147,70426,401],{"class":157},[147,70428,70429],{"class":504},"'tr'",[147,70431,407],{"class":157},[147,70433,70434,70437,70439],{"class":149,"line":33053},[147,70435,70436],{"class":157},"        tr.innerHTML ",[147,70438,445],{"class":397},[147,70440,70441],{"class":504}," `\n",[147,70443,70444,70447,70449,70451,70453,70456,70459],{"class":149,"line":33069},[147,70445,70446],{"class":504},"        \u003Ctd>${",[147,70448,4154],{"class":157},[147,70450,1289],{"class":504},[147,70452,840],{"class":157},[147,70454,70455],{"class":504},"].",[147,70457,70458],{"class":157},"stuID",[147,70460,70461],{"class":504},"}\u003C\u002Ftd>\n",[147,70463,70464,70467,70469,70471,70473,70475,70478],{"class":149,"line":33075},[147,70465,70466],{"class":504},"          \u003Ctd>${",[147,70468,4154],{"class":157},[147,70470,1289],{"class":504},[147,70472,840],{"class":157},[147,70474,70455],{"class":504},[147,70476,70477],{"class":157},"uname",[147,70479,70461],{"class":504},[147,70481,70482,70484,70486,70488,70490,70492,70495],{"class":149,"line":33089},[147,70483,70466],{"class":504},[147,70485,4154],{"class":157},[147,70487,1289],{"class":504},[147,70489,840],{"class":157},[147,70491,70455],{"class":504},[147,70493,70494],{"class":157},"age",[147,70496,70461],{"class":504},[147,70498,70499,70501,70503,70505,70507,70509,70512],{"class":149,"line":33095},[147,70500,70466],{"class":504},[147,70502,4154],{"class":157},[147,70504,1289],{"class":504},[147,70506,840],{"class":157},[147,70508,70455],{"class":504},[147,70510,70511],{"class":157},"gender",[147,70513,70461],{"class":504},[147,70515,70516,70518,70520,70522,70524,70526,70529],{"class":149,"line":33110},[147,70517,70466],{"class":504},[147,70519,4154],{"class":157},[147,70521,1289],{"class":504},[147,70523,840],{"class":157},[147,70525,70455],{"class":504},[147,70527,70528],{"class":157},"salary",[147,70530,70461],{"class":504},[147,70532,70533,70535,70537,70539,70541,70543,70546],{"class":149,"line":33116},[147,70534,70466],{"class":504},[147,70536,4154],{"class":157},[147,70538,1289],{"class":504},[147,70540,840],{"class":157},[147,70542,70455],{"class":504},[147,70544,70545],{"class":157},"city",[147,70547,70461],{"class":504},[147,70549,70550],{"class":149,"line":33125},[147,70551,69866],{"class":504},[147,70553,70554,70557,70559],{"class":149,"line":33131},[147,70555,70556],{"class":504},"            \u003Ca href=\"javascript:\" data-id=${",[147,70558,840],{"class":157},[147,70560,70561],{"class":504},"}>删除\u003C\u002Fa>\n",[147,70563,70564],{"class":149,"line":33140},[147,70565,70566],{"class":504},"          \u003C\u002Ftd> \n",[147,70568,70569],{"class":149,"line":33146},[147,70570,70571],{"class":504},"          `\n",[147,70573,70574],{"class":149,"line":33152},[147,70575,70576],{"class":458},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[147,70578,70579,70582,70585],{"class":149,"line":33161},[147,70580,70581],{"class":157},"        tbody.",[147,70583,70584],{"class":2237},"appendChild",[147,70586,70587],{"class":157},"(tr)\n",[147,70589,70590],{"class":149,"line":33167},[147,70591,52671],{"class":157},[147,70593,70594],{"class":149,"line":33178},[147,70595,2461],{"class":157},[147,70597,70598],{"class":149,"line":33184},[147,70599,2674],{"emptyLinePlaceholder":324},[147,70601,70602],{"class":149,"line":33203},[147,70603,70604],{"class":458},"    \u002F\u002F 3.删除委托\n",[147,70606,70607],{"class":149,"line":33209},[147,70608,70609],{"class":458},"    \u002F\u002F 3.1 事件委托 tbody\n",[147,70611,70612,70615,70617,70619,70621,70623,70625,70627,70629],{"class":149,"line":33220},[147,70613,70614],{"class":157},"    tbody.",[147,70616,58086],{"class":2237},[147,70618,401],{"class":157},[147,70620,58091],{"class":504},[147,70622,12709],{"class":157},[147,70624,54722],{"class":397},[147,70626,1932],{"class":157},[147,70628,474],{"class":5490},[147,70630,12716],{"class":157},[147,70632,70633,70635,70637,70639,70641],{"class":149,"line":33226},[147,70634,54753],{"class":397},[147,70636,67307],{"class":157},[147,70638,54759],{"class":397},[147,70640,68529],{"class":504},[147,70642,12716],{"class":157},[147,70644,70645],{"class":149,"line":33246},[147,70646,70647],{"class":458},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[147,70649,70650],{"class":149,"line":33262},[147,70651,70652],{"class":458},"        \u002F\u002F console.log(e.target.dataset.id);\n",[147,70654,70655],{"class":149,"line":33268},[147,70656,70657],{"class":458},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[147,70659,70660,70663,70665,70668,70670],{"class":149,"line":33282},[147,70661,70662],{"class":157},"        arr.",[147,70664,58283],{"class":2237},[147,70666,70667],{"class":157},"(e.target.dataset.id, ",[147,70669,616],{"class":448},[147,70671,407],{"class":157},[147,70673,70674],{"class":149,"line":33288},[147,70675,70676],{"class":458},"        \u002F\u002F 重新渲染一次\n",[147,70678,70679,70682],{"class":149,"line":33294},[147,70680,70681],{"class":2237},"        render",[147,70683,2250],{"class":157},[147,70685,70686],{"class":149,"line":33305},[147,70687,52671],{"class":157},[147,70689,70690],{"class":149,"line":33311},[147,70691,33735],{"class":157},[147,70693,70694,70696,70698],{"class":149,"line":33317},[147,70695,52690],{"class":157},[147,70697,52086],{"class":153},[147,70699,51580],{"class":157},[147,70701,70702],{"class":149,"line":33327},[147,70703,2674],{"emptyLinePlaceholder":324},[147,70705,70706,70708,70710],{"class":149,"line":33333},[147,70707,52058],{"class":157},[147,70709,52073],{"class":153},[147,70711,51580],{"class":157},[147,70713,70714],{"class":149,"line":33344},[147,70715,2674],{"emptyLinePlaceholder":324},[147,70717,70718,70720,70722],{"class":149,"line":33350},[147,70719,52058],{"class":157},[147,70721,50909],{"class":153},[147,70723,51580],{"class":157},[19,70725,70726],{},"样式：",[138,70728,70732],{"className":70729,"code":70730,"language":70731,"meta":143,"style":143},"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",[51,70733,70734,70739,70749,70758,70762,70766,70771,70781,70786,70790,70795,70805,70810,70819,70823,70827,70832,70837,70847,70857,70862,70866,70871,70880,70890,70895,70905,70915,70919,70924,70932,70936,70941,70946,70951,70959,70968,70972,70977,70986,70990,70995,71004,71008,71013,71022,71031,71039,71043,71048,71057,71067,71076,71086,71092,71101,71111,71121,71125,71130,71139,71147,71157,71165,71174,71183,71193,71201,71205,71210,71219],{"__ignoreMap":143},[147,70735,70736],{"class":149,"line":150},[147,70737,70738],{"class":157},"* {\n",[147,70740,70741,70744,70746],{"class":149,"line":312},[147,70742,70743],{"class":153},"  margin",[147,70745,51710],{"class":157},[147,70747,70748],{"class":504},"0;\n",[147,70750,70751,70754,70756],{"class":149,"line":1454},[147,70752,70753],{"class":504},"  padding",[147,70755,51710],{"class":157},[147,70757,70748],{"class":504},[147,70759,70760],{"class":149,"line":1469},[147,70761,1839],{"class":157},[147,70763,70764],{"class":149,"line":1475},[147,70765,2674],{"emptyLinePlaceholder":324},[147,70767,70768],{"class":149,"line":1489},[147,70769,70770],{"class":504},"a {\n",[147,70772,70773,70776,70778],{"class":149,"line":1495},[147,70774,70775],{"class":153},"  text-decoration",[147,70777,51710],{"class":157},[147,70779,70780],{"class":504},"none;\n",[147,70782,70783],{"class":149,"line":1586},[147,70784,70785],{"class":504},"  color:#721c24;\n",[147,70787,70788],{"class":149,"line":1592},[147,70789,1839],{"class":157},[147,70791,70792],{"class":149,"line":1604},[147,70793,70794],{"class":504},"h1 {\n",[147,70796,70797,70800,70802],{"class":149,"line":1886},[147,70798,70799],{"class":153},"  text-align",[147,70801,51710],{"class":157},[147,70803,70804],{"class":504},"center;\n",[147,70806,70807],{"class":149,"line":1891},[147,70808,70809],{"class":504},"  color:#333;\n",[147,70811,70812,70814,70816],{"class":149,"line":1897},[147,70813,70743],{"class":153},[147,70815,51710],{"class":157},[147,70817,70818],{"class":504},"20px 0;\n",[147,70820,70821],{"class":149,"line":1902},[147,70822,2948],{"class":157},[147,70824,70825],{"class":149,"line":1916},[147,70826,1839],{"class":157},[147,70828,70829],{"class":149,"line":1921},[147,70830,70831],{"class":504},"table {\n",[147,70833,70834],{"class":149,"line":1927},[147,70835,70836],{"class":504},"  margin:0 auto;\n",[147,70838,70839,70842,70844],{"class":149,"line":1948},[147,70840,70841],{"class":153},"  width",[147,70843,51710],{"class":157},[147,70845,70846],{"class":504},"800px;\n",[147,70848,70849,70852,70854],{"class":149,"line":1953},[147,70850,70851],{"class":153},"  border-collapse",[147,70853,51710],{"class":157},[147,70855,70856],{"class":504},"collapse;\n",[147,70858,70859],{"class":149,"line":1967},[147,70860,70861],{"class":504},"  color:#004085;\n",[147,70863,70864],{"class":149,"line":1972},[147,70865,1839],{"class":157},[147,70867,70868],{"class":149,"line":2001},[147,70869,70870],{"class":504},"th {\n",[147,70872,70873,70875,70877],{"class":149,"line":2006},[147,70874,70753],{"class":153},[147,70876,51710],{"class":157},[147,70878,70879],{"class":504},"10px;\n",[147,70881,70882,70885,70887],{"class":149,"line":2023},[147,70883,70884],{"class":153},"  background",[147,70886,51710],{"class":157},[147,70888,70889],{"class":458},"#cfe5ff;\n",[147,70891,70892],{"class":149,"line":2028},[147,70893,70894],{"class":157},"  \n",[147,70896,70897,70900,70902],{"class":149,"line":2033},[147,70898,70899],{"class":153},"  font-size",[147,70901,51710],{"class":157},[147,70903,70904],{"class":504},"20px;\n",[147,70906,70907,70910,70912],{"class":149,"line":2038},[147,70908,70909],{"class":153},"  font-weight",[147,70911,51710],{"class":157},[147,70913,70914],{"class":504},"400;\n",[147,70916,70917],{"class":149,"line":2052},[147,70918,1839],{"class":157},[147,70920,70921],{"class":149,"line":2057},[147,70922,70923],{"class":504},"td,th {\n",[147,70925,70926,70929],{"class":149,"line":2851},[147,70927,70928],{"class":504},"  border:1px solid",[147,70930,70931],{"class":458}," #b8daff;\n",[147,70933,70934],{"class":149,"line":2865},[147,70935,1839],{"class":157},[147,70937,70938],{"class":149,"line":2873},[147,70939,70940],{"class":504},"td {\n",[147,70942,70943],{"class":149,"line":2878},[147,70944,70945],{"class":504},"  padding:10px;\n",[147,70947,70948],{"class":149,"line":2884},[147,70949,70950],{"class":504},"  color:#666;\n",[147,70952,70953,70955,70957],{"class":149,"line":2890},[147,70954,70799],{"class":153},[147,70956,51710],{"class":157},[147,70958,70804],{"class":504},[147,70960,70961,70963,70965],{"class":149,"line":2895},[147,70962,70899],{"class":153},[147,70964,51710],{"class":157},[147,70966,70967],{"class":504},"16px;\n",[147,70969,70970],{"class":149,"line":8222},[147,70971,1839],{"class":157},[147,70973,70974],{"class":149,"line":8246},[147,70975,70976],{"class":504},"tbody tr {\n",[147,70978,70979,70981,70983],{"class":149,"line":8251},[147,70980,70884],{"class":153},[147,70982,51710],{"class":157},[147,70984,70985],{"class":458},"#fff;\n",[147,70987,70988],{"class":149,"line":8257},[147,70989,1839],{"class":157},[147,70991,70992],{"class":149,"line":8284},[147,70993,70994],{"class":504},"tbody tr:hover {\n",[147,70996,70997,70999,71001],{"class":149,"line":8289},[147,70998,70884],{"class":153},[147,71000,51710],{"class":157},[147,71002,71003],{"class":458},"#e1ecf8;\n",[147,71005,71006],{"class":149,"line":8295},[147,71007,1839],{"class":157},[147,71009,71010],{"class":149,"line":8307},[147,71011,71012],{"class":504},".info {\n",[147,71014,71015,71017,71019],{"class":149,"line":8319},[147,71016,70841],{"class":153},[147,71018,51710],{"class":157},[147,71020,71021],{"class":504},"900px;\n",[147,71023,71024,71026,71028],{"class":149,"line":8331},[147,71025,70743],{"class":153},[147,71027,51710],{"class":157},[147,71029,71030],{"class":504},"50px auto;\n",[147,71032,71033,71035,71037],{"class":149,"line":9990},[147,71034,70799],{"class":153},[147,71036,51710],{"class":157},[147,71038,70804],{"class":504},[147,71040,71041],{"class":149,"line":10015},[147,71042,1839],{"class":157},[147,71044,71045],{"class":149,"line":10038},[147,71046,71047],{"class":504},".info  input, .info select {\n",[147,71049,71050,71052,71054],{"class":149,"line":10062},[147,71051,70841],{"class":153},[147,71053,51710],{"class":157},[147,71055,71056],{"class":504},"80px;\n",[147,71058,71059,71062,71064],{"class":149,"line":10067},[147,71060,71061],{"class":153},"  height",[147,71063,51710],{"class":157},[147,71065,71066],{"class":504},"27px;\n",[147,71068,71069,71072,71074],{"class":149,"line":10072},[147,71070,71071],{"class":153},"  outline",[147,71073,51710],{"class":157},[147,71075,70780],{"class":504},[147,71077,71078,71081,71083],{"class":149,"line":10077},[147,71079,71080],{"class":153},"  border-radius",[147,71082,51710],{"class":157},[147,71084,71085],{"class":504},"5px;\n",[147,71087,71088,71090],{"class":149,"line":10086},[147,71089,70928],{"class":504},[147,71091,70931],{"class":458},[147,71093,71094,71097,71099],{"class":149,"line":10091},[147,71095,71096],{"class":153},"  padding-left",[147,71098,51710],{"class":157},[147,71100,71085],{"class":504},[147,71102,71103,71106,71108],{"class":149,"line":10097},[147,71104,71105],{"class":153},"  box-sizing",[147,71107,51710],{"class":157},[147,71109,71110],{"class":504},"border-box;\n",[147,71112,71113,71116,71118],{"class":149,"line":10118},[147,71114,71115],{"class":153},"  margin-right",[147,71117,51710],{"class":157},[147,71119,71120],{"class":504},"15px;\n",[147,71122,71123],{"class":149,"line":10124},[147,71124,1839],{"class":157},[147,71126,71127],{"class":149,"line":10138},[147,71128,71129],{"class":504},".info button {\n",[147,71131,71132,71134,71136],{"class":149,"line":10144},[147,71133,70841],{"class":153},[147,71135,51710],{"class":157},[147,71137,71138],{"class":504},"60px;\n",[147,71140,71141,71143,71145],{"class":149,"line":10171},[147,71142,71061],{"class":153},[147,71144,51710],{"class":157},[147,71146,71066],{"class":504},[147,71148,71149,71152,71154],{"class":149,"line":10180},[147,71150,71151],{"class":153},"  background-color",[147,71153,51710],{"class":157},[147,71155,71156],{"class":458},"#004085;\n",[147,71158,71159,71161,71163],{"class":149,"line":10186},[147,71160,71071],{"class":153},[147,71162,51710],{"class":157},[147,71164,70780],{"class":504},[147,71166,71167,71170,71172],{"class":149,"line":10194},[147,71168,71169],{"class":153},"  border",[147,71171,51710],{"class":157},[147,71173,70748],{"class":504},[147,71175,71176,71179,71181],{"class":149,"line":10199},[147,71177,71178],{"class":153},"  color",[147,71180,51710],{"class":157},[147,71182,70985],{"class":458},[147,71184,71185,71188,71190],{"class":149,"line":16877},[147,71186,71187],{"class":153},"  cursor",[147,71189,51710],{"class":157},[147,71191,71192],{"class":504},"pointer;\n",[147,71194,71195,71197,71199],{"class":149,"line":16883},[147,71196,71080],{"class":153},[147,71198,51710],{"class":157},[147,71200,71085],{"class":504},[147,71202,71203],{"class":149,"line":16906},[147,71204,1839],{"class":157},[147,71206,71207],{"class":149,"line":16912},[147,71208,71209],{"class":504},".info .age {\n",[147,71211,71212,71214,71216],{"class":149,"line":16935},[147,71213,70841],{"class":153},[147,71215,51710],{"class":157},[147,71217,71218],{"class":504},"50px;\n",[147,71220,71221],{"class":149,"line":16949},[147,71222,1839],{"class":157},[19,71224,71225],{},"思路：",[19,71227,71228],{},[29,71229],{"alt":143,"src":71230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,71232,71233],{},[29,71234],{"alt":143,"src":71235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,71237,71238],{},[29,71239],{"alt":143,"src":71240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[367,71242,71244],{"id":71243},"_3315-重绘回流","3.3.15 重绘回流",[19,71246,71247],{},[29,71248],{"alt":143,"src":71249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,71251,71252],{},[29,71253],{"alt":143,"src":71254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,71256,71257],{},[29,71258],{"alt":143,"src":71259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,71261,71263],{"id":71262},"_34-bom","3.4 BOM",[19,71265,71266],{},[29,71267],{"alt":143,"src":71268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,71270,71271],{},"平时写的document省略了window而已，实际上是window.document",[19,71273,71274],{},"函数也是这样，调用的时候实际为window.fn()",[19,71276,71277],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,71279,71280],{},"window大部分情况下可以省略",[367,71282,71284],{"id":71283},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,71286,71287],{},"只执行一次",[19,71289,71290],{},[29,71291],{"alt":143,"src":71292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,71294,71295],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,71297,71298],{},[29,71299],{"alt":143,"src":71300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[367,71302,71304],{"id":71303},"_342-js执行机制","3.4.2 JS执行机制",[19,71306,71307],{},[29,71308],{"alt":143,"src":71309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,71311,71312],{},"两个的结果都是1111 3333 2222",[19,71314,71315],{},[29,71316],{"alt":143,"src":71317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,71319,71320],{},[29,71321],{"alt":143,"src":71322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,71324,71325],{},[29,71326],{"alt":143,"src":71327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,71329,71330],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,71332,71333],{},"工作流程：",[19,71335,71336],{},[29,71337],{"alt":143,"src":71338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,71340,71341],{},[29,71342],{"alt":143,"src":71343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,71345,71346],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,71348,71349],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[367,71351,71353],{"id":71352},"_343-location对象","3.4.3 location对象",[19,71355,71356],{},"location对象属于window这个全局对象下的，可以 省略window",[19,71358,71359],{},[29,71360],{"alt":143,"src":71361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,71363,71364],{},"href可以跳转页面",[350,71366,71367],{},[353,71368,71369],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,71371,71372],{},"search得到提交信息之后网站后边的地址",[19,71374,71375],{},[29,71376],{"alt":143,"src":71377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,71379,71380],{},[29,71381],{"alt":143,"src":71382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[350,71384,71385],{"start":312},[353,71386,71387],{},"hash:这个获取单页面应用#后边的地址",[19,71389,71390],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,71392,71393],{},[29,71394],{"alt":143,"src":71395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[138,71397,71399],{"className":53340,"code":71398,"language":53342,"meta":143,"style":143},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[51,71400,71401,71421,71441],{"__ignoreMap":143},[147,71402,71403,71405,71407,71409,71411,71414,71417,71419],{"class":149,"line":150},[147,71404,52417],{"class":157},[147,71406,637],{"class":153},[147,71408,61330],{"class":2237},[147,71410,445],{"class":157},[147,71412,71413],{"class":504},"\"#\u002Fmy\"",[147,71415,71416],{"class":157},">我的\u003C\u002F",[147,71418,637],{"class":153},[147,71420,51580],{"class":157},[147,71422,71423,71425,71427,71429,71431,71434,71437,71439],{"class":149,"line":312},[147,71424,52417],{"class":157},[147,71426,637],{"class":153},[147,71428,61330],{"class":2237},[147,71430,445],{"class":157},[147,71432,71433],{"class":504},"\"#\u002Ffriend\"",[147,71435,71436],{"class":157},">关注\u003C\u002F",[147,71438,637],{"class":153},[147,71440,51580],{"class":157},[147,71442,71443,71445,71447,71449,71451,71454,71457,71459],{"class":149,"line":1454},[147,71444,52417],{"class":157},[147,71446,637],{"class":153},[147,71448,61330],{"class":2237},[147,71450,445],{"class":157},[147,71452,71453],{"class":504},"\"#\u002Fdownload\"",[147,71455,71456],{"class":157},">下载\u003C\u002F",[147,71458,637],{"class":153},[147,71460,51580],{"class":157},[19,71462,71463],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[350,71465,71466],{"start":1454},[353,71467,71468,71469,71471,71472,71474],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53989,71470],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53989,71473],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[367,71476,71478],{"id":71477},"_345-navigator对象","3.4.5 navigator对象",[19,71480,71481],{},[29,71482],{"alt":143,"src":71483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[138,71485,71489],{"className":71486,"code":71487,"language":71488,"meta":143,"style":143},"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",[51,71490,71491,71496,71507,71519,71524,71575,71616,71621,71634,71646,71651],{"__ignoreMap":143},[147,71492,71493],{"class":149,"line":150},[147,71494,71495],{"class":458},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[147,71497,71498,71500,71502,71504],{"class":149,"line":312},[147,71499,625],{"class":397},[147,71501,401],{"class":157},[147,71503,54722],{"class":397},[147,71505,71506],{"class":157}," () { \n",[147,71508,71509,71511,71514,71516],{"class":149,"line":1454},[147,71510,7066],{"class":397},[147,71512,71513],{"class":448}," userAgent",[147,71515,13838],{"class":397},[147,71517,71518],{"class":157}," navigator.userAgent \n",[147,71520,71521],{"class":149,"line":1469},[147,71522,71523],{"class":458},"\u002F\u002F 验证是否为Android或iPhone \n",[147,71525,71526,71528,71531,71533,71536,71539,71541,71543,71546,71548,71551,71555,71557,71559,71561,71564,71566,71568,71570,71572],{"class":149,"line":1475},[147,71527,7066],{"class":397},[147,71529,71530],{"class":448}," android",[147,71532,13838],{"class":397},[147,71534,71535],{"class":157}," userAgent.",[147,71537,71538],{"class":2237},"match",[147,71540,401],{"class":157},[147,71542,983],{"class":504},[147,71544,71545],{"class":48251},"(Android);",[147,71547,1385],{"class":397},[147,71549,71550],{"class":448},"[\\s",[147,71552,71554],{"class":71553},"snhLl","\\\u002F",[147,71556,1339],{"class":448},[147,71558,880],{"class":397},[147,71560,401],{"class":48251},[147,71562,71563],{"class":448},"[\\d.]",[147,71565,880],{"class":397},[147,71567,828],{"class":48251},[147,71569,1385],{"class":397},[147,71571,983],{"class":504},[147,71573,71574],{"class":157},") \n",[147,71576,71577,71579,71582,71584,71586,71588,71590,71592,71595,71598,71601,71603,71605,71608,71610,71612,71614],{"class":149,"line":1489},[147,71578,7066],{"class":397},[147,71580,71581],{"class":448}," iphone",[147,71583,13838],{"class":397},[147,71585,71535],{"class":157},[147,71587,71538],{"class":2237},[147,71589,401],{"class":157},[147,71591,983],{"class":504},[147,71593,71594],{"class":48251},"(iPhone",[147,71596,71597],{"class":448},"\\s",[147,71599,71600],{"class":48251},"OS)",[147,71602,71597],{"class":448},[147,71604,401],{"class":48251},[147,71606,71607],{"class":448},"[\\d_]",[147,71609,880],{"class":397},[147,71611,828],{"class":48251},[147,71613,983],{"class":504},[147,71615,71574],{"class":157},[147,71617,71618],{"class":149,"line":1495},[147,71619,71620],{"class":458},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[147,71622,71623,71625,71628,71631],{"class":149,"line":1586},[147,71624,1805],{"class":397},[147,71626,71627],{"class":157}," (android ",[147,71629,71630],{"class":397},"||",[147,71632,71633],{"class":157}," iphone) { \n",[147,71635,71636,71639,71641,71644],{"class":149,"line":1592},[147,71637,71638],{"class":157},"location.href ",[147,71640,445],{"class":397},[147,71642,71643],{"class":504}," 'http:\u002F\u002Fm.itcast.cn'",[147,71645,2948],{"class":157},[147,71647,71648],{"class":149,"line":1604},[147,71649,71650],{"class":157},"} \n",[147,71652,71653],{"class":149,"line":1886},[147,71654,71655],{"class":157},"})()\n",[367,71657,71659],{"id":71658},"_346-histroy对象","3.4.6 histroy对象",[19,71661,71662],{},[29,71663],{"alt":143,"src":71664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,71666,71667],{},"浏览器地址的前进与后退!!!",[19,71669,71670],{},"history.back() 等效于 history.go(-1)",[19,71672,71673],{},"history.forward() 等效于 history.go(1)",[14,71675,71677],{"id":71676},"_35-本地存储","3.5 本地存储",[350,71679,71680,71683,71686],{},[353,71681,71682],{},"数据存储在用户浏览器中",[353,71684,71685],{},"设置、读取方便、甚至页面刷新不丢失数据",[353,71687,71688],{},"容量较大，sessionStorage和localStorage约 5M 左右",[367,71690,71692],{"id":71691},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,71694,71695],{},"只能存储字符串",[19,71697,71698],{},[29,71699],{"alt":143,"src":71700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,71702,71703],{},[29,71704],{"alt":143,"src":71705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,71707,71708],{},"键值对要加引号,不然就会当变量来看了",[19,71710,71711],{},"localStorage.setItem('uname', 'pink')",[19,71713,71714],{},"刷新之后信息不再丢失",[19,71716,71717],{},"操作key,value会跟着变",[19,71719,71720],{},"删除只删除键就可以,即名字",[19,71722,71711],{},[19,71724,71725],{},"改:",[19,71727,71728],{},"localStorage.setItem('uname','red')",[19,71730,71731],{},"有这个键就是改,没有这个键就是改",[19,71733,71734],{},[29,71735],{"alt":143,"src":71736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,71738,71739],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,71741,71742],{},[29,71743],{"alt":143,"src":71744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,71746,71747],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[367,71749,71751],{"id":71750},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,71753,71754],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,71756,71757],{},"特性:",[350,71759,71760,71763,71766,71769],{},[353,71761,71762],{},"生命周期为关闭浏览器窗口",[353,71764,71765],{},"在同一个窗口(页面)下数据可以共享",[353,71767,71768],{},"以键值对的形式存储使用",[353,71770,71771],{},"用法跟localStorage 基本相同",[367,71773,71775],{"id":71774},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,71777,71778],{},"本地只能存储字符串,无法直接存储复杂数据类型",[138,71780,71782],{"className":53340,"code":71781,"language":53342,"meta":143,"style":143},"\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",[51,71783,71784,71792,71797,71802,71807,71812,71816,71821,71826],{"__ignoreMap":143},[147,71785,71786,71788,71790],{"class":149,"line":150},[147,71787,1309],{"class":157},[147,71789,52086],{"class":153},[147,71791,51580],{"class":157},[147,71793,71794],{"class":149,"line":312},[147,71795,71796],{"class":157},"    const obj = {\n",[147,71798,71799],{"class":149,"line":1454},[147,71800,71801],{"class":157},"      uname: 'pink老师',\n",[147,71803,71804],{"class":149,"line":1469},[147,71805,71806],{"class":157},"      age: 18,\n",[147,71808,71809],{"class":149,"line":1475},[147,71810,71811],{"class":157},"      gender: '女'\n",[147,71813,71814],{"class":149,"line":1489},[147,71815,2461],{"class":157},[147,71817,71818],{"class":149,"line":1495},[147,71819,71820],{"class":157},"    \u002F\u002F 存储复杂数据类型\n",[147,71822,71823],{"class":149,"line":1586},[147,71824,71825],{"class":157},"    localStorage.setItem('obj', obj)\n",[147,71827,71828,71830,71832],{"class":149,"line":1592},[147,71829,52690],{"class":157},[147,71831,52086],{"class":153},[147,71833,51580],{"class":157},[19,71835,71836],{},[29,71837],{"alt":143,"src":71838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,71840,71841],{},"如果获取一下数据:",[19,71843,71844],{},"log(localStorage.getItem('obj'))",[19,71846,71847],{},[29,71848],{"alt":143,"src":71849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,71851,71852],{},"发现直接存对象是使用不了的!!!",[22271,71854,71856],{"id":71855},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,71858,71859],{},[29,71860],{"alt":143,"src":71861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[138,71863,71865],{"className":50907,"code":71864,"language":50909,"meta":143,"style":143},"\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",[51,71866,71867,71875,71885,71895,71904,71912,71916,71920,71946,71965,71973,71977,71982,71987],{"__ignoreMap":143},[147,71868,71869,71871,71873],{"class":149,"line":150},[147,71870,1309],{"class":157},[147,71872,52086],{"class":153},[147,71874,51580],{"class":157},[147,71876,71877,71879,71881,71883],{"class":149,"line":312},[147,71878,11495],{"class":397},[147,71880,70244],{"class":448},[147,71882,13838],{"class":397},[147,71884,15845],{"class":157},[147,71886,71887,71890,71893],{"class":149,"line":1454},[147,71888,71889],{"class":157},"      uname: ",[147,71891,71892],{"class":504},"'pink老师'",[147,71894,31740],{"class":157},[147,71896,71897,71900,71902],{"class":149,"line":1469},[147,71898,71899],{"class":157},"      age: ",[147,71901,1049],{"class":448},[147,71903,31740],{"class":157},[147,71905,71906,71909],{"class":149,"line":1475},[147,71907,71908],{"class":157},"      gender: ",[147,71910,71911],{"class":504},"'女'\n",[147,71913,71914],{"class":149,"line":1489},[147,71915,2461],{"class":157},[147,71917,71918],{"class":149,"line":1495},[147,71919,71820],{"class":458},[147,71921,71922,71925,71928,71930,71933,71935,71938,71940,71943],{"class":149,"line":1586},[147,71923,71924],{"class":157},"  localStorage.",[147,71926,71927],{"class":2237},"setItem",[147,71929,401],{"class":157},[147,71931,71932],{"class":504},"'obj'",[147,71934,12709],{"class":157},[147,71936,71937],{"class":448},"JSON",[147,71939,957],{"class":157},[147,71941,71942],{"class":2237},"stringify",[147,71944,71945],{"class":157},"(obj))\n",[147,71947,71948,71951,71953,71956,71959,71961,71963],{"class":149,"line":1592},[147,71949,71950],{"class":157},"  console.",[147,71952,58520],{"class":2237},[147,71954,71955],{"class":157},"(localStorage.",[147,71957,71958],{"class":2237},"getItem",[147,71960,401],{"class":157},[147,71962,71932],{"class":504},[147,71964,30771],{"class":157},[147,71966,71967,71969,71971],{"class":149,"line":1604},[147,71968,52690],{"class":157},[147,71970,52086],{"class":153},[147,71972,51580],{"class":157},[147,71974,71975],{"class":149,"line":1886},[147,71976,70894],{"class":157},[147,71978,71979],{"class":149,"line":1891},[147,71980,71981],{"class":157},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[147,71983,71984],{"class":149,"line":1897},[147,71985,71986],{"class":157},"  类型是字符串的\n",[147,71988,71989],{"class":149,"line":1902},[147,71990,71991],{"class":157},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22271,71993,71995],{"id":71994},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,71997,71998],{},[29,71999],{"alt":143,"src":72000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,72002,72003],{},[29,72004],{"alt":143,"src":72005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[138,72007,72009],{"className":53340,"code":72008,"language":53342,"meta":143,"style":143},"  \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",[51,72010,72011,72019,72023,72027,72031,72035,72039,72044,72049,72054,72059,72064,72069,72074,72079],{"__ignoreMap":143},[147,72012,72013,72015,72017],{"class":149,"line":150},[147,72014,52417],{"class":157},[147,72016,52086],{"class":153},[147,72018,51580],{"class":157},[147,72020,72021],{"class":149,"line":312},[147,72022,71796],{"class":157},[147,72024,72025],{"class":149,"line":1454},[147,72026,71801],{"class":157},[147,72028,72029],{"class":149,"line":1469},[147,72030,71806],{"class":157},[147,72032,72033],{"class":149,"line":1475},[147,72034,71811],{"class":157},[147,72036,72037],{"class":149,"line":1489},[147,72038,2461],{"class":157},[147,72040,72041],{"class":149,"line":1495},[147,72042,72043],{"class":157},"    \u002F\u002F 1.存储复杂数据类型\n",[147,72045,72046],{"class":149,"line":1586},[147,72047,72048],{"class":157},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[147,72050,72051],{"class":149,"line":1592},[147,72052,72053],{"class":157},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[147,72055,72056],{"class":149,"line":1604},[147,72057,72058],{"class":157},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[147,72060,72061],{"class":149,"line":1886},[147,72062,72063],{"class":157},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[147,72065,72066],{"class":149,"line":1891},[147,72067,72068],{"class":157},"    \u002F\u002F 取\n",[147,72070,72071],{"class":149,"line":1897},[147,72072,72073],{"class":157},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[147,72075,72076],{"class":149,"line":1902},[147,72077,72078],{"class":157},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[147,72080,72081,72083,72085],{"class":149,"line":1916},[147,72082,52690],{"class":157},[147,72084,52086],{"class":153},[147,72086,51580],{"class":157},[19,72088,72089],{},[29,72090],{"alt":143,"src":72091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[367,72093,72095],{"id":72094},"_356-数组map方法","3.5.6 数组map方法",[19,72097,72098],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,72100,72101],{},[29,72102],{"alt":143,"src":72103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,72105,72106],{},[29,72107],{"alt":143,"src":72108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,72110,72111,72114],{},[234,72112,72113],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,72116,72117],{},"map有返回值，但是forEach没有返回值",[19,72119,72120],{},"map是个方法。用的时候要加 ()",[19,72122,72123],{},"map返回的是一个数组",[367,72125,72127],{"id":72126},"_357-数组中join方法","3.5.7 数组中join方法",[19,72129,72130],{},[29,72131],{"alt":143,"src":72132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,72134,72135],{},"类似于python中拼接字符串一样！",[350,72137,72138,72141,72144],{},[353,72139,72140],{},"小括号为空则逗号分开",[353,72142,72143],{},"小括号为空字符串 ''，则元素之间没有分隔符",[353,72145,72146],{},"小括号用啥符号就用进行分割",[367,72148,72150],{"id":72149},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[350,72152,72153,72156,72159,72162,72165],{},[353,72154,72155],{},"记住本地时间获取快速方式：new Date().toDateString()",[353,72157,72158],{},"尽量减少DOM操作，用好map+join的渲染方式",[353,72160,72161],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[353,72163,72164],{},"return可以实现函数的结束",[353,72166,72167],{},"禁止跳转是 preventDefault() 不要忘记",[138,72169,72171],{"className":50907,"code":72170,"language":50909,"meta":143,"style":143},"\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",[51,72172,72173,72183,72197,72201,72209,72223,72243,72255,72263,72269,72279,72289,72293,72297,72303,72313,72325,72329,72333,72340,72352,72366,72376,72380,72384,72391,72398,72405,72417,72429,72439,72451,72455,72459,72466,72473,72485,72497,72507,72519,72549,72553,72557,72564,72576,72588,72612,72622,72632,72636,72640,72648,72659,72671,72683,72695,72712,72724,72736,72740,72744,72751,72763,72775,72787,72798,72816,72829,72841,72865,72876,72880,72884,72892,72902,72906,72910,72916,72928,72939,72949,72953,72957,72963,72985,72989,72993,72999,73005,73017,73027,73039,73069,73082,73099,73103,73107,73118,73140,73150,73154,73158,73171,73181,73193,73205,73217,73229,73239,73249,73259,73270,73283,73287,73295,73303,73307,73315,73328,73348,73381,73414,73447,73473,73491,73509,73517,73543,73561,73579,73597,73615,73633,73641,73649,73667,73675,73704,73712,73720,73728,73741,73753,73765,73777,73789,73801,73814,73826,73834,73842,73850,73855,73860,73864,73868,73872,73876,73880,73884,73889,73894,73899,73904,73912,73920,73928,73933,73938,73943,73948,73953,73958,73963,73968,73973,73978,73983,73988,73993,73998,74002,74007,74012,74022,74031,74035,74040,74049,74065,74107,74147,74186,74251,74259,74263,74268,74286,74294,74299,74304,74334,74340,74345,74358,74370,74382,74394,74406,74418,74430,74434,74444,74448,74453,74458,74462,74471,74475,74480,74485,74504,74509,74529,74533,74538,74542,74547,74565,74583,74601,74620,74639,74658,74663,74669,74690,74696,74705,74711,74717,74723,74750,74763,74768,74778,74784,74790,74796,74802,74807,74813,74819,74825,74831,74864,74869,74874,74879,74884,74890,74896,74902,74913,74918,74924,74931,74945,74951,74975,74980,74985,74991,74997,75018,75024,75037,75043,75049,75055,75061,75066,75072,75078,75084,75102,75116,75122,75130,75136,75158,75163,75168,75173,75178,75183,75192,75201,75206],{"__ignoreMap":143},[147,72174,72175,72177,72179,72181],{"class":149,"line":150},[147,72176,51571],{"class":157},[147,72178,51574],{"class":153},[147,72180,51577],{"class":2237},[147,72182,51580],{"class":157},[147,72184,72185,72187,72189,72191,72193,72195],{"class":149,"line":312},[147,72186,1309],{"class":157},[147,72188,50909],{"class":153},[147,72190,51589],{"class":2237},[147,72192,445],{"class":157},[147,72194,51594],{"class":504},[147,72196,51580],{"class":157},[147,72198,72199],{"class":149,"line":1454},[147,72200,2674],{"emptyLinePlaceholder":324},[147,72202,72203,72205,72207],{"class":149,"line":1469},[147,72204,1309],{"class":157},[147,72206,51607],{"class":153},[147,72208,51580],{"class":157},[147,72210,72211,72213,72215,72217,72219,72221],{"class":149,"line":1475},[147,72212,52417],{"class":157},[147,72214,51617],{"class":153},[147,72216,51620],{"class":2237},[147,72218,445],{"class":157},[147,72220,51625],{"class":504},[147,72222,51580],{"class":157},[147,72224,72225,72227,72229,72231,72233,72235,72237,72239,72241],{"class":149,"line":1489},[147,72226,52417],{"class":157},[147,72228,51617],{"class":153},[147,72230,15193],{"class":2237},[147,72232,445],{"class":157},[147,72234,51664],{"class":504},[147,72236,51644],{"class":2237},[147,72238,445],{"class":157},[147,72240,51671],{"class":504},[147,72242,51580],{"class":157},[147,72244,72245,72247,72249,72251,72253],{"class":149,"line":1495},[147,72246,52417],{"class":157},[147,72248,51680],{"class":153},[147,72250,51683],{"class":157},[147,72252,51680],{"class":153},[147,72254,51580],{"class":157},[147,72256,72257,72259,72261],{"class":149,"line":1586},[147,72258,52417],{"class":157},[147,72260,308],{"class":153},[147,72262,51580],{"class":157},[147,72264,72265,72267],{"class":149,"line":1592},[147,72266,6677],{"class":153},[147,72268,15845],{"class":157},[147,72270,72271,72273,72275,72277],{"class":149,"line":1604},[147,72272,54968],{"class":448},[147,72274,51710],{"class":157},[147,72276,590],{"class":448},[147,72278,1565],{"class":157},[147,72280,72281,72283,72285,72287],{"class":149,"line":1886},[147,72282,54979],{"class":448},[147,72284,51710],{"class":157},[147,72286,590],{"class":448},[147,72288,1565],{"class":157},[147,72290,72291],{"class":149,"line":1891},[147,72292,2461],{"class":157},[147,72294,72295],{"class":149,"line":1897},[147,72296,2674],{"emptyLinePlaceholder":324},[147,72298,72299,72301],{"class":149,"line":1902},[147,72300,57552],{"class":153},[147,72302,15845],{"class":157},[147,72304,72305,72307,72309,72311],{"class":149,"line":1916},[147,72306,57559],{"class":448},[147,72308,51710],{"class":157},[147,72310,51865],{"class":448},[147,72312,1565],{"class":157},[147,72314,72315,72317,72319,72321,72323],{"class":149,"line":1921},[147,72316,62350],{"class":448},[147,72318,51710],{"class":157},[147,72320,1099],{"class":448},[147,72322,51765],{"class":397},[147,72324,1565],{"class":157},[147,72326,72327],{"class":149,"line":1927},[147,72328,2461],{"class":157},[147,72330,72331],{"class":149,"line":1948},[147,72332,2674],{"emptyLinePlaceholder":324},[147,72334,72335,72338],{"class":149,"line":1953},[147,72336,72337],{"class":2237},"    .info",[147,72339,15845],{"class":157},[147,72341,72342,72344,72346,72348,72350],{"class":149,"line":1967},[147,72343,55044],{"class":448},[147,72345,51710],{"class":157},[147,72347,51762],{"class":448},[147,72349,51765],{"class":397},[147,72351,1565],{"class":157},[147,72353,72354,72356,72358,72360,72362,72364],{"class":149,"line":1972},[147,72355,54979],{"class":448},[147,72357,51710],{"class":157},[147,72359,845],{"class":448},[147,72361,51765],{"class":397},[147,72363,51829],{"class":448},[147,72365,1565],{"class":157},[147,72367,72368,72370,72372,72374],{"class":149,"line":2001},[147,72369,57559],{"class":448},[147,72371,51710],{"class":157},[147,72373,51865],{"class":448},[147,72375,1565],{"class":157},[147,72377,72378],{"class":149,"line":2006},[147,72379,2461],{"class":157},[147,72381,72382],{"class":149,"line":2023},[147,72383,2674],{"emptyLinePlaceholder":324},[147,72385,72386,72389],{"class":149,"line":2028},[147,72387,72388],{"class":2237},"    .uname",[147,72390,31740],{"class":157},[147,72392,72393,72396],{"class":149,"line":2033},[147,72394,72395],{"class":2237},"    .age",[147,72397,31740],{"class":157},[147,72399,72400,72403],{"class":149,"line":2038},[147,72401,72402],{"class":2237},"    .salary",[147,72404,15845],{"class":157},[147,72406,72407,72409,72411,72413,72415],{"class":149,"line":2052},[147,72408,55044],{"class":448},[147,72410,51710],{"class":157},[147,72412,710],{"class":448},[147,72414,51765],{"class":397},[147,72416,1565],{"class":157},[147,72418,72419,72421,72423,72425,72427],{"class":149,"line":2057},[147,72420,55058],{"class":448},[147,72422,51710],{"class":157},[147,72424,1099],{"class":448},[147,72426,51765],{"class":397},[147,72428,1565],{"class":157},[147,72430,72431,72433,72435,72437],{"class":149,"line":2851},[147,72432,62053],{"class":448},[147,72434,51710],{"class":157},[147,72436,55010],{"class":448},[147,72438,1565],{"class":157},[147,72440,72441,72443,72445,72447,72449],{"class":149,"line":2865},[147,72442,62023],{"class":448},[147,72444,51710],{"class":157},[147,72446,974],{"class":448},[147,72448,51765],{"class":397},[147,72450,1565],{"class":157},[147,72452,72453],{"class":149,"line":2873},[147,72454,2461],{"class":157},[147,72456,72457],{"class":149,"line":2878},[147,72458,2674],{"emptyLinePlaceholder":324},[147,72460,72461,72464],{"class":149,"line":2884},[147,72462,72463],{"class":2237},"    .gender",[147,72465,31740],{"class":157},[147,72467,72468,72471],{"class":149,"line":2890},[147,72469,72470],{"class":2237},"    .city",[147,72472,15845],{"class":157},[147,72474,72475,72477,72479,72481,72483],{"class":149,"line":2895},[147,72476,55044],{"class":448},[147,72478,51710],{"class":157},[147,72480,710],{"class":448},[147,72482,51765],{"class":397},[147,72484,1565],{"class":157},[147,72486,72487,72489,72491,72493,72495],{"class":149,"line":8222},[147,72488,55058],{"class":448},[147,72490,51710],{"class":157},[147,72492,1224],{"class":448},[147,72494,51765],{"class":397},[147,72496,1565],{"class":157},[147,72498,72499,72501,72503,72505],{"class":149,"line":8246},[147,72500,62053],{"class":448},[147,72502,51710],{"class":157},[147,72504,55010],{"class":448},[147,72506,1565],{"class":157},[147,72508,72509,72511,72513,72515,72517],{"class":149,"line":8251},[147,72510,62023],{"class":448},[147,72512,51710],{"class":157},[147,72514,974],{"class":448},[147,72516,51765],{"class":397},[147,72518,1565],{"class":157},[147,72520,72521,72523,72525,72527,72529,72531,72534,72536,72538,72540,72543,72545,72547],{"class":149,"line":8257},[147,72522,62250],{"class":448},[147,72524,51710],{"class":157},[147,72526,616],{"class":448},[147,72528,51765],{"class":397},[147,72530,51794],{"class":448},[147,72532,72533],{"class":448}," rgb",[147,72535,401],{"class":157},[147,72537,1996],{"class":448},[147,72539,12709],{"class":157},[147,72541,72542],{"class":448},"197",[147,72544,12709],{"class":157},[147,72546,72542],{"class":448},[147,72548,2993],{"class":157},[147,72550,72551],{"class":149,"line":8284},[147,72552,2461],{"class":157},[147,72554,72555],{"class":149,"line":8289},[147,72556,2674],{"emptyLinePlaceholder":324},[147,72558,72559,72562],{"class":149,"line":8295},[147,72560,72561],{"class":153},"    button",[147,72563,15845],{"class":157},[147,72565,72566,72568,72570,72572,72574],{"class":149,"line":8307},[147,72567,55058],{"class":448},[147,72569,51710],{"class":157},[147,72571,1224],{"class":448},[147,72573,51765],{"class":397},[147,72575,1565],{"class":157},[147,72577,72578,72580,72582,72584,72586],{"class":149,"line":8319},[147,72579,55044],{"class":448},[147,72581,51710],{"class":157},[147,72583,883],{"class":448},[147,72585,51765],{"class":397},[147,72587,1565],{"class":157},[147,72589,72590,72592,72594,72597,72599,72601,72603,72606,72608,72610],{"class":149,"line":8331},[147,72591,55157],{"class":448},[147,72593,51710],{"class":157},[147,72595,72596],{"class":448},"rgb",[147,72598,401],{"class":157},[147,72600,1368],{"class":448},[147,72602,12709],{"class":157},[147,72604,72605],{"class":448},"187",[147,72607,12709],{"class":157},[147,72609,698],{"class":448},[147,72611,2993],{"class":157},[147,72613,72614,72616,72618,72620],{"class":149,"line":9990},[147,72615,57689],{"class":448},[147,72617,51710],{"class":157},[147,72619,61115],{"class":448},[147,72621,1565],{"class":157},[147,72623,72624,72626,72628,72630],{"class":149,"line":10015},[147,72625,62250],{"class":448},[147,72627,51710],{"class":157},[147,72629,590],{"class":448},[147,72631,1565],{"class":157},[147,72633,72634],{"class":149,"line":10038},[147,72635,2461],{"class":157},[147,72637,72638],{"class":149,"line":10062},[147,72639,2674],{"emptyLinePlaceholder":324},[147,72641,72642,72644,72646],{"class":149,"line":10067},[147,72643,72561],{"class":153},[147,72645,51961],{"class":153},[147,72647,15845],{"class":157},[147,72649,72650,72652,72654,72657],{"class":149,"line":10072},[147,72651,55282],{"class":448},[147,72653,51710],{"class":157},[147,72655,72656],{"class":448},"inline-block",[147,72658,1565],{"class":157},[147,72660,72661,72663,72665,72667,72669],{"class":149,"line":10077},[147,72662,55044],{"class":448},[147,72664,51710],{"class":157},[147,72666,845],{"class":448},[147,72668,51765],{"class":397},[147,72670,1565],{"class":157},[147,72672,72673,72675,72677,72679,72681],{"class":149,"line":10086},[147,72674,55058],{"class":448},[147,72676,51710],{"class":157},[147,72678,845],{"class":448},[147,72680,51765],{"class":397},[147,72682,1565],{"class":157},[147,72684,72685,72687,72689,72691,72693],{"class":149,"line":10091},[147,72686,57632],{"class":448},[147,72688,51710],{"class":157},[147,72690,871],{"class":448},[147,72692,51765],{"class":397},[147,72694,1565],{"class":157},[147,72696,72697,72699,72701,72703,72705,72707,72710],{"class":149,"line":10097},[147,72698,62250],{"class":448},[147,72700,51710],{"class":157},[147,72702,616],{"class":448},[147,72704,51765],{"class":397},[147,72706,51794],{"class":448},[147,72708,72709],{"class":448}," #fff",[147,72711,1565],{"class":157},[147,72713,72714,72716,72718,72720,72722],{"class":149,"line":10118},[147,72715,55407],{"class":448},[147,72717,51710],{"class":157},[147,72719,718],{"class":448},[147,72721,51765],{"class":397},[147,72723,1565],{"class":157},[147,72725,72726,72728,72730,72732,72734],{"class":149,"line":10124},[147,72727,62023],{"class":448},[147,72729,51710],{"class":157},[147,72731,616],{"class":448},[147,72733,51765],{"class":397},[147,72735,1565],{"class":157},[147,72737,72738],{"class":149,"line":10138},[147,72739,2461],{"class":157},[147,72741,72742],{"class":149,"line":10144},[147,72743,2674],{"emptyLinePlaceholder":324},[147,72745,72746,72749],{"class":149,"line":10171},[147,72747,72748],{"class":2237},"    .total",[147,72750,15845],{"class":157},[147,72752,72753,72755,72757,72759,72761],{"class":149,"line":10180},[147,72754,55044],{"class":448},[147,72756,51710],{"class":157},[147,72758,61902],{"class":448},[147,72760,51765],{"class":397},[147,72762,1565],{"class":157},[147,72764,72765,72767,72769,72771,72773],{"class":149,"line":10186},[147,72766,55058],{"class":448},[147,72768,51710],{"class":157},[147,72770,800],{"class":448},[147,72772,51765],{"class":397},[147,72774,1565],{"class":157},[147,72776,72777,72779,72781,72783,72785],{"class":149,"line":10194},[147,72778,57632],{"class":448},[147,72780,51710],{"class":157},[147,72782,800],{"class":448},[147,72784,51765],{"class":397},[147,72786,1565],{"class":157},[147,72788,72789,72791,72793,72796],{"class":149,"line":10199},[147,72790,57559],{"class":448},[147,72792,51710],{"class":157},[147,72794,72795],{"class":448},"right",[147,72797,1565],{"class":157},[147,72799,72800,72802,72804,72806,72808,72810,72812,72814],{"class":149,"line":16877},[147,72801,54979],{"class":448},[147,72803,51710],{"class":157},[147,72805,800],{"class":448},[147,72807,51765],{"class":397},[147,72809,51829],{"class":448},[147,72811,2312],{"class":448},[147,72813,51765],{"class":397},[147,72815,1565],{"class":157},[147,72817,72818,72821,72823,72825,72827],{"class":149,"line":16883},[147,72819,72820],{"class":448},"      padding-right",[147,72822,51710],{"class":157},[147,72824,845],{"class":448},[147,72826,51765],{"class":397},[147,72828,1565],{"class":157},[147,72830,72831,72833,72835,72837,72839],{"class":149,"line":16906},[147,72832,55195],{"class":448},[147,72834,51710],{"class":157},[147,72836,922],{"class":448},[147,72838,51765],{"class":397},[147,72840,1565],{"class":157},[147,72842,72843,72845,72847,72849,72851,72854,72856,72859,72861,72863],{"class":149,"line":16912},[147,72844,55157],{"class":448},[147,72846,51710],{"class":157},[147,72848,72596],{"class":448},[147,72850,401],{"class":157},[147,72852,72853],{"class":448},"237",[147,72855,12709],{"class":157},[147,72857,72858],{"class":448},"235",[147,72860,12709],{"class":157},[147,72862,72858],{"class":448},[147,72864,2993],{"class":157},[147,72866,72867,72870,72872,72874],{"class":149,"line":16935},[147,72868,72869],{"class":448},"      box-sizing",[147,72871,51710],{"class":157},[147,72873,60778],{"class":448},[147,72875,1565],{"class":157},[147,72877,72878],{"class":149,"line":16949},[147,72879,2461],{"class":157},[147,72881,72882],{"class":149,"line":16969},[147,72883,2674],{"emptyLinePlaceholder":324},[147,72885,72886,72888,72890],{"class":149,"line":16975},[147,72887,72748],{"class":2237},[147,72889,51961],{"class":153},[147,72891,15845],{"class":157},[147,72893,72894,72896,72898,72900],{"class":149,"line":16986},[147,72895,57689],{"class":448},[147,72897,51710],{"class":157},[147,72899,57694],{"class":448},[147,72901,1565],{"class":157},[147,72903,72904],{"class":149,"line":17009},[147,72905,2461],{"class":157},[147,72907,72908],{"class":149,"line":17031},[147,72909,2674],{"emptyLinePlaceholder":324},[147,72911,72912,72914],{"class":149,"line":17036},[147,72913,65296],{"class":153},[147,72915,15845],{"class":157},[147,72917,72918,72920,72922,72924,72926],{"class":149,"line":17042},[147,72919,55044],{"class":448},[147,72921,51710],{"class":157},[147,72923,61902],{"class":448},[147,72925,51765],{"class":397},[147,72927,1565],{"class":157},[147,72929,72930,72932,72934,72937],{"class":149,"line":17056},[147,72931,54979],{"class":448},[147,72933,51710],{"class":157},[147,72935,72936],{"class":448},"auto",[147,72938,1565],{"class":157},[147,72940,72941,72943,72945,72947],{"class":149,"line":17069},[147,72942,65303],{"class":448},[147,72944,51710],{"class":157},[147,72946,65308],{"class":448},[147,72948,1565],{"class":157},[147,72950,72951],{"class":149,"line":17074},[147,72952,2461],{"class":157},[147,72954,72955],{"class":149,"line":17088},[147,72956,2674],{"emptyLinePlaceholder":324},[147,72958,72959,72961],{"class":149,"line":17093},[147,72960,65388],{"class":153},[147,72962,15845],{"class":157},[147,72964,72965,72967,72969,72971,72973,72975,72977,72979,72981,72983],{"class":149,"line":17099},[147,72966,55157],{"class":448},[147,72968,51710],{"class":157},[147,72970,72596],{"class":448},[147,72972,401],{"class":157},[147,72974,72853],{"class":448},[147,72976,12709],{"class":157},[147,72978,72858],{"class":448},[147,72980,12709],{"class":157},[147,72982,72858],{"class":448},[147,72984,2993],{"class":157},[147,72986,72987],{"class":149,"line":17104},[147,72988,2461],{"class":157},[147,72990,72991],{"class":149,"line":17118},[147,72992,2674],{"emptyLinePlaceholder":324},[147,72994,72995,72997],{"class":149,"line":17123},[147,72996,65388],{"class":153},[147,72998,31740],{"class":157},[147,73000,73001,73003],{"class":149,"line":17128},[147,73002,65454],{"class":153},[147,73004,15845],{"class":157},[147,73006,73007,73009,73011,73013,73015],{"class":149,"line":17142},[147,73008,55058],{"class":448},[147,73010,51710],{"class":157},[147,73012,672],{"class":448},[147,73014,51765],{"class":397},[147,73016,1565],{"class":157},[147,73018,73019,73021,73023,73025],{"class":149,"line":17154},[147,73020,57559],{"class":448},[147,73022,51710],{"class":157},[147,73024,24009],{"class":448},[147,73026,1565],{"class":157},[147,73028,73029,73031,73033,73035,73037],{"class":149,"line":17159},[147,73030,55195],{"class":448},[147,73032,51710],{"class":157},[147,73034,948],{"class":448},[147,73036,51765],{"class":397},[147,73038,1565],{"class":157},[147,73040,73041,73043,73045,73047,73049,73051,73053,73055,73058,73060,73063,73065,73067],{"class":149,"line":17172},[147,73042,62250],{"class":448},[147,73044,51710],{"class":157},[147,73046,616],{"class":448},[147,73048,51765],{"class":397},[147,73050,51794],{"class":448},[147,73052,72533],{"class":448},[147,73054,401],{"class":157},[147,73056,73057],{"class":448},"228",[147,73059,12709],{"class":157},[147,73061,73062],{"class":448},"225",[147,73064,12709],{"class":157},[147,73066,73062],{"class":448},[147,73068,2993],{"class":157},[147,73070,73071,73074,73076,73078,73080],{"class":149,"line":17177},[147,73072,73073],{"class":448},"      padding-left",[147,73075,51710],{"class":157},[147,73077,718],{"class":448},[147,73079,51765],{"class":397},[147,73081,1565],{"class":157},[147,73083,73084,73086,73088,73090,73093,73095,73097],{"class":149,"line":17182},[147,73085,62133],{"class":448},[147,73087,51710],{"class":157},[147,73089,28395],{"class":448},[147,73091,73092],{"class":448}," linear",[147,73094,62140],{"class":448},[147,73096,1094],{"class":397},[147,73098,1565],{"class":157},[147,73100,73101],{"class":149,"line":17187},[147,73102,2461],{"class":157},[147,73104,73105],{"class":149,"line":17200},[147,73106,2674],{"emptyLinePlaceholder":324},[147,73108,73109,73112,73114,73116],{"class":149,"line":17205},[147,73110,73111],{"class":153},"    tbody",[147,73113,70417],{"class":153},[147,73115,61213],{"class":2237},[147,73117,15845],{"class":157},[147,73119,73120,73122,73124,73126,73128,73130,73132,73134,73136,73138],{"class":149,"line":32907},[147,73121,55157],{"class":448},[147,73123,51710],{"class":157},[147,73125,72596],{"class":448},[147,73127,401],{"class":157},[147,73129,72853],{"class":448},[147,73131,12709],{"class":157},[147,73133,72858],{"class":448},[147,73135,12709],{"class":157},[147,73137,72858],{"class":448},[147,73139,2993],{"class":157},[147,73141,73142,73144,73146,73148],{"class":149,"line":32913},[147,73143,62298],{"class":448},[147,73145,51710],{"class":157},[147,73147,62303],{"class":448},[147,73149,1565],{"class":157},[147,73151,73152],{"class":149,"line":32919},[147,73153,2461],{"class":157},[147,73155,73156],{"class":149,"line":32925},[147,73157,2674],{"emptyLinePlaceholder":324},[147,73159,73160,73162,73164,73167,73169],{"class":149,"line":32931},[147,73161,73111],{"class":153},[147,73163,70417],{"class":153},[147,73165,73166],{"class":153}," td",[147,73168,1673],{"class":153},[147,73170,15845],{"class":157},[147,73172,73173,73175,73177,73179],{"class":149,"line":32942},[147,73174,55282],{"class":448},[147,73176,51710],{"class":157},[147,73178,61142],{"class":448},[147,73180,1565],{"class":157},[147,73182,73183,73185,73187,73189,73191],{"class":149,"line":32948},[147,73184,55044],{"class":448},[147,73186,51710],{"class":157},[147,73188,1306],{"class":448},[147,73190,51765],{"class":397},[147,73192,1565],{"class":157},[147,73194,73195,73197,73199,73201,73203],{"class":149,"line":32968},[147,73196,55058],{"class":448},[147,73198,51710],{"class":157},[147,73200,1224],{"class":448},[147,73202,51765],{"class":397},[147,73204,1565],{"class":157},[147,73206,73207,73209,73211,73213,73215],{"class":149,"line":32974},[147,73208,57632],{"class":448},[147,73210,51710],{"class":157},[147,73212,1224],{"class":448},[147,73214,51765],{"class":397},[147,73216,1565],{"class":157},[147,73218,73219,73221,73223,73225,73227],{"class":149,"line":32985},[147,73220,62350],{"class":448},[147,73222,51710],{"class":157},[147,73224,477],{"class":448},[147,73226,51765],{"class":397},[147,73228,1565],{"class":157},[147,73230,73231,73233,73235,73237],{"class":149,"line":32991},[147,73232,57689],{"class":448},[147,73234,51710],{"class":157},[147,73236,61115],{"class":448},[147,73238,1565],{"class":157},[147,73240,73241,73243,73245,73247],{"class":149,"line":32997},[147,73242,57559],{"class":448},[147,73244,51710],{"class":157},[147,73246,51865],{"class":448},[147,73248,1565],{"class":157},[147,73250,73251,73253,73255,73257],{"class":149,"line":33003},[147,73252,64243],{"class":448},[147,73254,51710],{"class":157},[147,73256,55010],{"class":448},[147,73258,1565],{"class":157},[147,73260,73261,73263,73265,73268],{"class":149,"line":33009},[147,73262,55157],{"class":448},[147,73264,51710],{"class":157},[147,73266,73267],{"class":448},"orange",[147,73269,1565],{"class":157},[147,73271,73272,73274,73276,73279,73281],{"class":149,"line":33015},[147,73273,55407],{"class":448},[147,73275,51710],{"class":157},[147,73277,73278],{"class":448},"12.5",[147,73280,51765],{"class":397},[147,73282,1565],{"class":157},[147,73284,73285],{"class":149,"line":33021},[147,73286,2461],{"class":157},[147,73288,73289,73291,73293],{"class":149,"line":33027},[147,73290,52690],{"class":157},[147,73292,308],{"class":153},[147,73294,51580],{"class":157},[147,73296,73297,73299,73301],{"class":149,"line":33047},[147,73298,52058],{"class":157},[147,73300,51607],{"class":153},[147,73302,51580],{"class":157},[147,73304,73305],{"class":149,"line":33053},[147,73306,2674],{"emptyLinePlaceholder":324},[147,73308,73309,73311,73313],{"class":149,"line":33069},[147,73310,1309],{"class":157},[147,73312,52073],{"class":153},[147,73314,51580],{"class":157},[147,73316,73317,73319,73321,73324,73326],{"class":149,"line":33075},[147,73318,52417],{"class":157},[147,73320,14],{"class":153},[147,73322,73323],{"class":157},">学生就业统计表\u003C\u002F",[147,73325,14],{"class":153},[147,73327,51580],{"class":157},[147,73329,73330,73332,73334,73336,73338,73340,73342,73344,73346],{"class":149,"line":33089},[147,73331,52417],{"class":157},[147,73333,66898],{"class":153},[147,73335,53759],{"class":2237},[147,73337,445],{"class":157},[147,73339,62937],{"class":504},[147,73341,69343],{"class":2237},[147,73343,445],{"class":157},[147,73345,32050],{"class":504},[147,73347,51580],{"class":157},[147,73349,73350,73352,73354,73356,73358,73360,73362,73364,73366,73368,73370,73373,73375,73377,73379],{"class":149,"line":33095},[147,73351,51614],{"class":157},[147,73353,54094],{"class":153},[147,73355,54097],{"class":2237},[147,73357,445],{"class":157},[147,73359,62972],{"class":504},[147,73361,15193],{"class":2237},[147,73363,445],{"class":157},[147,73365,69369],{"class":504},[147,73367,61293],{"class":2237},[147,73369,445],{"class":157},[147,73371,73372],{"class":504},"\"姓名\"",[147,73374,53759],{"class":2237},[147,73376,445],{"class":157},[147,73378,69369],{"class":504},[147,73380,51580],{"class":157},[147,73382,73383,73385,73387,73389,73391,73393,73395,73397,73399,73401,73403,73406,73408,73410,73412],{"class":149,"line":33110},[147,73384,51614],{"class":157},[147,73386,54094],{"class":153},[147,73388,54097],{"class":2237},[147,73390,445],{"class":157},[147,73392,62972],{"class":504},[147,73394,15193],{"class":2237},[147,73396,445],{"class":157},[147,73398,69397],{"class":504},[147,73400,61293],{"class":2237},[147,73402,445],{"class":157},[147,73404,73405],{"class":504},"\"年龄\"",[147,73407,53759],{"class":2237},[147,73409,445],{"class":157},[147,73411,69397],{"class":504},[147,73413,51580],{"class":157},[147,73415,73416,73418,73420,73422,73424,73426,73428,73430,73432,73434,73436,73439,73441,73443,73445],{"class":149,"line":33116},[147,73417,51614],{"class":157},[147,73419,54094],{"class":153},[147,73421,54097],{"class":2237},[147,73423,445],{"class":157},[147,73425,62972],{"class":504},[147,73427,15193],{"class":2237},[147,73429,445],{"class":157},[147,73431,69499],{"class":504},[147,73433,61293],{"class":2237},[147,73435,445],{"class":157},[147,73437,73438],{"class":504},"\"薪资\"",[147,73440,53759],{"class":2237},[147,73442,445],{"class":157},[147,73444,69499],{"class":504},[147,73446,51580],{"class":157},[147,73448,73449,73451,73453,73455,73457,73459,73461,73463,73465,73467,73469,73471],{"class":149,"line":33125},[147,73450,51614],{"class":157},[147,73452,69417],{"class":153},[147,73454,15193],{"class":2237},[147,73456,445],{"class":157},[147,73458,69424],{"class":504},[147,73460,15232],{"class":2237},[147,73462,445],{"class":157},[147,73464,7926],{"class":504},[147,73466,53759],{"class":2237},[147,73468,445],{"class":157},[147,73470,69424],{"class":504},[147,73472,51580],{"class":157},[147,73474,73475,73477,73479,73481,73483,73485,73487,73489],{"class":149,"line":33131},[147,73476,55507],{"class":157},[147,73478,69439],{"class":153},[147,73480,66924],{"class":2237},[147,73482,445],{"class":157},[147,73484,10235],{"class":504},[147,73486,69448],{"class":157},[147,73488,69439],{"class":153},[147,73490,51580],{"class":157},[147,73492,73493,73495,73497,73499,73501,73503,73505,73507],{"class":149,"line":33140},[147,73494,55507],{"class":157},[147,73496,69439],{"class":153},[147,73498,66924],{"class":2237},[147,73500,445],{"class":157},[147,73502,10304],{"class":504},[147,73504,69467],{"class":157},[147,73506,69439],{"class":153},[147,73508,51580],{"class":157},[147,73510,73511,73513,73515],{"class":149,"line":33146},[147,73512,52049],{"class":157},[147,73514,69417],{"class":153},[147,73516,51580],{"class":157},[147,73518,73519,73521,73523,73525,73527,73529,73531,73533,73535,73537,73539,73541],{"class":149,"line":33152},[147,73520,51614],{"class":157},[147,73522,69417],{"class":153},[147,73524,15193],{"class":2237},[147,73526,445],{"class":157},[147,73528,69521],{"class":504},[147,73530,15232],{"class":2237},[147,73532,445],{"class":157},[147,73534,7926],{"class":504},[147,73536,53759],{"class":2237},[147,73538,445],{"class":157},[147,73540,69521],{"class":504},[147,73542,51580],{"class":157},[147,73544,73545,73547,73549,73551,73553,73555,73557,73559],{"class":149,"line":33161},[147,73546,55507],{"class":157},[147,73548,69439],{"class":153},[147,73550,66924],{"class":2237},[147,73552,445],{"class":157},[147,73554,69542],{"class":504},[147,73556,69545],{"class":157},[147,73558,69439],{"class":153},[147,73560,51580],{"class":157},[147,73562,73563,73565,73567,73569,73571,73573,73575,73577],{"class":149,"line":33167},[147,73564,55507],{"class":157},[147,73566,69439],{"class":153},[147,73568,66924],{"class":2237},[147,73570,445],{"class":157},[147,73572,69562],{"class":504},[147,73574,69565],{"class":157},[147,73576,69439],{"class":153},[147,73578,51580],{"class":157},[147,73580,73581,73583,73585,73587,73589,73591,73593,73595],{"class":149,"line":33178},[147,73582,55507],{"class":157},[147,73584,69439],{"class":153},[147,73586,66924],{"class":2237},[147,73588,445],{"class":157},[147,73590,69582],{"class":504},[147,73592,69585],{"class":157},[147,73594,69439],{"class":153},[147,73596,51580],{"class":157},[147,73598,73599,73601,73603,73605,73607,73609,73611,73613],{"class":149,"line":33184},[147,73600,55507],{"class":157},[147,73602,69439],{"class":153},[147,73604,66924],{"class":2237},[147,73606,445],{"class":157},[147,73608,69602],{"class":504},[147,73610,69605],{"class":157},[147,73612,69439],{"class":153},[147,73614,51580],{"class":157},[147,73616,73617,73619,73621,73623,73625,73627,73629,73631],{"class":149,"line":33203},[147,73618,55507],{"class":157},[147,73620,69439],{"class":153},[147,73622,66924],{"class":2237},[147,73624,445],{"class":157},[147,73626,69622],{"class":504},[147,73628,69625],{"class":157},[147,73630,69439],{"class":153},[147,73632,51580],{"class":157},[147,73634,73635,73637,73639],{"class":149,"line":33209},[147,73636,52049],{"class":157},[147,73638,69417],{"class":153},[147,73640,51580],{"class":157},[147,73642,73643,73645,73647],{"class":149,"line":33220},[147,73644,51614],{"class":157},[147,73646,54160],{"class":153},[147,73648,51580],{"class":157},[147,73650,73651,73653,73655,73658,73660,73663,73665],{"class":149,"line":33226},[147,73652,55507],{"class":157},[147,73654,147],{"class":153},[147,73656,73657],{"class":157},">+\u003C\u002F",[147,73659,147],{"class":153},[147,73661,73662],{"class":157},">添加\u003C\u002F",[147,73664,54160],{"class":153},[147,73666,51580],{"class":157},[147,73668,73669,73671,73673],{"class":149,"line":33246},[147,73670,52690],{"class":157},[147,73672,66898],{"class":153},[147,73674,51580],{"class":157},[147,73676,73677,73679,73681,73683,73685,73687,73690,73692,73695,73697,73700,73702],{"class":149,"line":33262},[147,73678,52417],{"class":157},[147,73680,51884],{"class":153},[147,73682,53759],{"class":2237},[147,73684,445],{"class":157},[147,73686,62853],{"class":504},[147,73688,73689],{"class":157},">共有数据 \u003C",[147,73691,147],{"class":153},[147,73693,73694],{"class":157},">0\u003C\u002F",[147,73696,147],{"class":153},[147,73698,73699],{"class":157},"> 条\u003C\u002F",[147,73701,51884],{"class":153},[147,73703,51580],{"class":157},[147,73705,73706,73708,73710],{"class":149,"line":33268},[147,73707,52417],{"class":157},[147,73709,537],{"class":153},[147,73711,51580],{"class":157},[147,73713,73714,73716,73718],{"class":149,"line":33282},[147,73715,51614],{"class":157},[147,73717,540],{"class":153},[147,73719,51580],{"class":157},[147,73721,73722,73724,73726],{"class":149,"line":33288},[147,73723,55507],{"class":157},[147,73725,543],{"class":153},[147,73727,51580],{"class":157},[147,73729,73730,73732,73734,73737,73739],{"class":149,"line":33294},[147,73731,55575],{"class":157},[147,73733,546],{"class":153},[147,73735,73736],{"class":157},">ID\u003C\u002F",[147,73738,546],{"class":153},[147,73740,51580],{"class":157},[147,73742,73743,73745,73747,73749,73751],{"class":149,"line":33305},[147,73744,55575],{"class":157},[147,73746,546],{"class":153},[147,73748,69728],{"class":157},[147,73750,546],{"class":153},[147,73752,51580],{"class":157},[147,73754,73755,73757,73759,73761,73763],{"class":149,"line":33311},[147,73756,55575],{"class":157},[147,73758,546],{"class":153},[147,73760,69741],{"class":157},[147,73762,546],{"class":153},[147,73764,51580],{"class":157},[147,73766,73767,73769,73771,73773,73775],{"class":149,"line":33317},[147,73768,55575],{"class":157},[147,73770,546],{"class":153},[147,73772,69754],{"class":157},[147,73774,546],{"class":153},[147,73776,51580],{"class":157},[147,73778,73779,73781,73783,73785,73787],{"class":149,"line":33327},[147,73780,55575],{"class":157},[147,73782,546],{"class":153},[147,73784,69767],{"class":157},[147,73786,546],{"class":153},[147,73788,51580],{"class":157},[147,73790,73791,73793,73795,73797,73799],{"class":149,"line":33333},[147,73792,55575],{"class":157},[147,73794,546],{"class":153},[147,73796,69780],{"class":157},[147,73798,546],{"class":153},[147,73800,51580],{"class":157},[147,73802,73803,73805,73807,73810,73812],{"class":149,"line":33344},[147,73804,55575],{"class":157},[147,73806,546],{"class":153},[147,73808,73809],{"class":157},">录入时间\u003C\u002F",[147,73811,546],{"class":153},[147,73813,51580],{"class":157},[147,73815,73816,73818,73820,73822,73824],{"class":149,"line":33350},[147,73817,55575],{"class":157},[147,73819,546],{"class":153},[147,73821,69793],{"class":157},[147,73823,546],{"class":153},[147,73825,51580],{"class":157},[147,73827,73828,73830,73832],{"class":149,"line":33360},[147,73829,55680],{"class":157},[147,73831,543],{"class":153},[147,73833,51580],{"class":157},[147,73835,73836,73838,73840],{"class":149,"line":33365},[147,73837,52049],{"class":157},[147,73839,540],{"class":153},[147,73841,51580],{"class":157},[147,73843,73844,73846,73848],{"class":149,"line":33371},[147,73845,51614],{"class":157},[147,73847,583],{"class":153},[147,73849,51580],{"class":157},[147,73851,73852],{"class":149,"line":33420},[147,73853,73854],{"class":458},"      \u003C!-- \u003Ctr>\n",[147,73856,73857],{"class":149,"line":33467},[147,73858,73859],{"class":458},"        \u003Ctd>1\u003C\u002Ftd>\n",[147,73861,73862],{"class":149,"line":33472},[147,73863,73859],{"class":458},[147,73865,73866],{"class":149,"line":33478},[147,73867,73859],{"class":458},[147,73869,73870],{"class":149,"line":33497},[147,73871,73859],{"class":458},[147,73873,73874],{"class":149,"line":33503},[147,73875,73859],{"class":458},[147,73877,73878],{"class":149,"line":33523},[147,73879,73859],{"class":458},[147,73881,73882],{"class":149,"line":33529},[147,73883,73859],{"class":458},[147,73885,73886],{"class":149,"line":33535},[147,73887,73888],{"class":458},"        \u003Ctd>\n",[147,73890,73891],{"class":149,"line":33545},[147,73892,73893],{"class":458},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[147,73895,73896],{"class":149,"line":33550},[147,73897,73898],{"class":458},"        \u003C\u002Ftd>\n",[147,73900,73901],{"class":149,"line":33556},[147,73902,73903],{"class":458},"      \u003C\u002Ftr> -->\n",[147,73905,73906,73908,73910],{"class":149,"line":33572},[147,73907,52049],{"class":157},[147,73909,583],{"class":153},[147,73911,51580],{"class":157},[147,73913,73914,73916,73918],{"class":149,"line":33617},[147,73915,52690],{"class":157},[147,73917,537],{"class":153},[147,73919,51580],{"class":157},[147,73921,73922,73924,73926],{"class":149,"line":33623},[147,73923,52417],{"class":157},[147,73925,52086],{"class":153},[147,73927,51580],{"class":157},[147,73929,73930],{"class":149,"line":33629},[147,73931,73932],{"class":458},"    \u002F\u002F const initData = [{\n",[147,73934,73935],{"class":149,"line":33635},[147,73936,73937],{"class":458},"    \u002F\u002F   unameId: 1,\n",[147,73939,73940],{"class":149,"line":33646},[147,73941,73942],{"class":458},"    \u002F\u002F   uname: '华晨宇',\n",[147,73944,73945],{"class":149,"line":33652},[147,73946,73947],{"class":458},"    \u002F\u002F   age: 22,\n",[147,73949,73950],{"class":149,"line":33658},[147,73951,73952],{"class":458},"    \u002F\u002F   salary: 12000,\n",[147,73954,73955],{"class":149,"line":33664},[147,73956,73957],{"class":458},"    \u002F\u002F   gender: '男',\n",[147,73959,73960],{"class":149,"line":33682},[147,73961,73962],{"class":458},"    \u002F\u002F   city: '北京',\n",[147,73964,73965],{"class":149,"line":33696},[147,73966,73967],{"class":458},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[147,73969,73970],{"class":149,"line":33705},[147,73971,73972],{"class":458},"    \u002F\u002F }]\n",[147,73974,73975],{"class":149,"line":33714},[147,73976,73977],{"class":458},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[147,73979,73980],{"class":149,"line":33723},[147,73981,73982],{"class":458},"    \u002F\u002F 1.渲染业务\n",[147,73984,73985],{"class":149,"line":33732},[147,73986,73987],{"class":458},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[147,73989,73990],{"class":149,"line":33738},[147,73991,73992],{"class":458},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[147,73994,73995],{"class":149,"line":33744},[147,73996,73997],{"class":458},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[147,73999,74000],{"class":149,"line":33752},[147,74001,2674],{"emptyLinePlaceholder":324},[147,74003,74004],{"class":149,"line":33757},[147,74005,74006],{"class":458},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[147,74008,74009],{"class":149,"line":33763},[147,74010,74011],{"class":458},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[147,74013,74014,74016,74018,74020],{"class":149,"line":33774},[147,74015,11495],{"class":397},[147,74017,57968],{"class":448},[147,74019,13838],{"class":397},[147,74021,52111],{"class":157},[147,74023,74024,74027,74029],{"class":149,"line":33780},[147,74025,74026],{"class":157},"    console.",[147,74028,58520],{"class":2237},[147,74030,52685],{"class":157},[147,74032,74033],{"class":149,"line":33800},[147,74034,2674],{"emptyLinePlaceholder":324},[147,74036,74037],{"class":149,"line":33806},[147,74038,74039],{"class":458},"    \u002F\u002F 时间函数\n",[147,74041,74042,74044,74047],{"class":149,"line":33812},[147,74043,70357],{"class":397},[147,74045,74046],{"class":2237}," getTime",[147,74048,11127],{"class":157},[147,74050,74051,74053,74056,74058,74060,74063],{"class":149,"line":33818},[147,74052,58501],{"class":397},[147,74054,74055],{"class":448}," date",[147,74057,13838],{"class":397},[147,74059,11852],{"class":397},[147,74061,74062],{"class":2237}," Date",[147,74064,2250],{"class":157},[147,74066,74067,74069,74071,74073,74076,74079,74081,74083,74085,74088,74091,74093,74095,74097,74099,74101,74103,74105],{"class":149,"line":33835},[147,74068,58501],{"class":397},[147,74070,16364],{"class":448},[147,74072,13838],{"class":397},[147,74074,74075],{"class":157}," date.",[147,74077,74078],{"class":2237},"getHours",[147,74080,13324],{"class":157},[147,74082,1309],{"class":397},[147,74084,2312],{"class":448},[147,74086,74087],{"class":397}," ?",[147,74089,74090],{"class":504}," '0'",[147,74092,45840],{"class":397},[147,74094,74075],{"class":157},[147,74096,74078],{"class":2237},[147,74098,13324],{"class":157},[147,74100,1258],{"class":397},[147,74102,74075],{"class":157},[147,74104,74078],{"class":2237},[147,74106,2250],{"class":157},[147,74108,74109,74111,74114,74116,74118,74121,74123,74125,74127,74129,74131,74133,74135,74137,74139,74141,74143,74145],{"class":149,"line":33841},[147,74110,58501],{"class":397},[147,74112,74113],{"class":448}," m",[147,74115,13838],{"class":397},[147,74117,74075],{"class":157},[147,74119,74120],{"class":2237},"getMinutes",[147,74122,13324],{"class":157},[147,74124,1309],{"class":397},[147,74126,2312],{"class":448},[147,74128,74087],{"class":397},[147,74130,74090],{"class":504},[147,74132,45840],{"class":397},[147,74134,74075],{"class":157},[147,74136,74120],{"class":2237},[147,74138,13324],{"class":157},[147,74140,1258],{"class":397},[147,74142,74075],{"class":157},[147,74144,74120],{"class":2237},[147,74146,2250],{"class":157},[147,74148,74149,74151,74153,74155,74157,74160,74162,74164,74166,74168,74170,74172,74174,74176,74178,74180,74182,74184],{"class":149,"line":33847},[147,74150,58501],{"class":397},[147,74152,8702],{"class":448},[147,74154,13838],{"class":397},[147,74156,74075],{"class":157},[147,74158,74159],{"class":2237},"getSeconds",[147,74161,13324],{"class":157},[147,74163,1309],{"class":397},[147,74165,2312],{"class":448},[147,74167,74087],{"class":397},[147,74169,74090],{"class":504},[147,74171,45840],{"class":397},[147,74173,74075],{"class":157},[147,74175,74159],{"class":2237},[147,74177,13324],{"class":157},[147,74179,1258],{"class":397},[147,74181,74075],{"class":157},[147,74183,74159],{"class":2237},[147,74185,2250],{"class":157},[147,74187,74188,74190,74193,74195,74197,74200,74202,74205,74207,74210,74212,74214,74217,74219,74221,74223,74225,74227,74229,74232,74234,74237,74239,74242,74244,74246,74248],{"class":149,"line":33853},[147,74189,58501],{"class":397},[147,74191,74192],{"class":448}," str",[147,74194,13838],{"class":397},[147,74196,63176],{"class":504},[147,74198,74199],{"class":157},"date",[147,74201,957],{"class":504},[147,74203,74204],{"class":2237},"getFullYear",[147,74206,2701],{"class":504},[147,74208,74209],{"class":504},"}\u002F${",[147,74211,74199],{"class":157},[147,74213,957],{"class":504},[147,74215,74216],{"class":2237},"getMonth",[147,74218,13324],{"class":504},[147,74220,880],{"class":397},[147,74222,25392],{"class":448},[147,74224,74209],{"class":504},[147,74226,74199],{"class":157},[147,74228,957],{"class":504},[147,74230,74231],{"class":2237},"getDate",[147,74233,2701],{"class":504},[147,74235,74236],{"class":504},"} ${",[147,74238,814],{"class":157},[147,74240,74241],{"class":504},"}:${",[147,74243,943],{"class":157},[147,74245,74241],{"class":504},[147,74247,1094],{"class":157},[147,74249,74250],{"class":504},"}`\n",[147,74252,74253,74256],{"class":149,"line":33859},[147,74254,74255],{"class":397},"      return",[147,74257,74258],{"class":157}," str\n",[147,74260,74261],{"class":149,"line":33865},[147,74262,2461],{"class":157},[147,74264,74265],{"class":149,"line":33892},[147,74266,74267],{"class":458},"    \u002F\u002F 渲染函数\n",[147,74269,74270,74272,74274,74276,74278,74280,74282,74284],{"class":149,"line":33916},[147,74271,11495],{"class":397},[147,74273,70020],{"class":448},[147,74275,13838],{"class":397},[147,74277,54669],{"class":157},[147,74279,54672],{"class":2237},[147,74281,401],{"class":157},[147,74283,70031],{"class":504},[147,74285,407],{"class":157},[147,74287,74288,74290,74292],{"class":149,"line":33922},[147,74289,70357],{"class":397},[147,74291,70360],{"class":2237},[147,74293,11127],{"class":157},[147,74295,74296],{"class":149,"line":33928},[147,74297,74298],{"class":458},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[147,74300,74301],{"class":149,"line":33934},[147,74302,74303],{"class":458},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[147,74305,74306,74308,74311,74313,74315,74318,74320,74322,74324,74327,74329,74332],{"class":149,"line":33945},[147,74307,58501],{"class":397},[147,74309,74310],{"class":448}," trArr",[147,74312,13838],{"class":397},[147,74314,52238],{"class":157},[147,74316,74317],{"class":2237},"map",[147,74319,401],{"class":157},[147,74321,54722],{"class":397},[147,74323,1932],{"class":157},[147,74325,74326],{"class":5490},"ele",[147,74328,12709],{"class":157},[147,74330,74331],{"class":5490},"index",[147,74333,12716],{"class":157},[147,74335,74336,74338],{"class":149,"line":33956},[147,74337,15025],{"class":397},[147,74339,70441],{"class":504},[147,74341,74342],{"class":149,"line":33962},[147,74343,74344],{"class":504},"      \u003Ctr>\n",[147,74346,74347,74349,74351,74353,74356],{"class":149,"line":33979},[147,74348,70446],{"class":504},[147,74350,74326],{"class":157},[147,74352,957],{"class":504},[147,74354,74355],{"class":157},"unameId",[147,74357,70461],{"class":504},[147,74359,74360,74362,74364,74366,74368],{"class":149,"line":34002},[147,74361,70446],{"class":504},[147,74363,74326],{"class":157},[147,74365,957],{"class":504},[147,74367,70477],{"class":157},[147,74369,70461],{"class":504},[147,74371,74372,74374,74376,74378,74380],{"class":149,"line":34025},[147,74373,70446],{"class":504},[147,74375,74326],{"class":157},[147,74377,957],{"class":504},[147,74379,70494],{"class":157},[147,74381,70461],{"class":504},[147,74383,74384,74386,74388,74390,74392],{"class":149,"line":34031},[147,74385,70446],{"class":504},[147,74387,74326],{"class":157},[147,74389,957],{"class":504},[147,74391,70511],{"class":157},[147,74393,70461],{"class":504},[147,74395,74396,74398,74400,74402,74404],{"class":149,"line":34036},[147,74397,70446],{"class":504},[147,74399,74326],{"class":157},[147,74401,957],{"class":504},[147,74403,70528],{"class":157},[147,74405,70461],{"class":504},[147,74407,74408,74410,74412,74414,74416],{"class":149,"line":34045},[147,74409,70446],{"class":504},[147,74411,74326],{"class":157},[147,74413,957],{"class":504},[147,74415,70545],{"class":157},[147,74417,70461],{"class":504},[147,74419,74420,74422,74424,74426,74428],{"class":149,"line":34055},[147,74421,70446],{"class":504},[147,74423,74326],{"class":157},[147,74425,957],{"class":504},[147,74427,2661],{"class":157},[147,74429,70461],{"class":504},[147,74431,74432],{"class":149,"line":34061},[147,74433,73888],{"class":504},[147,74435,74436,74439,74441],{"class":149,"line":34066},[147,74437,74438],{"class":504},"          \u003Ca href=\"#\" data-id=\"${",[147,74440,74331],{"class":157},[147,74442,74443],{"class":504},"}\">删除\u003C\u002Fa>\n",[147,74445,74446],{"class":149,"line":34072},[147,74447,73898],{"class":504},[147,74449,74450],{"class":149,"line":34085},[147,74451,74452],{"class":504},"      \u003C\u002Ftr>\n",[147,74454,74455],{"class":149,"line":34091},[147,74456,74457],{"class":504},"  `\n",[147,74459,74460],{"class":149,"line":34102},[147,74461,65088],{"class":157},[147,74463,74464,74466,74468],{"class":149,"line":34113},[147,74465,58517],{"class":157},[147,74467,58520],{"class":2237},[147,74469,74470],{"class":157},"(trArr)\n",[147,74472,74473],{"class":149,"line":34132},[147,74474,2674],{"emptyLinePlaceholder":324},[147,74476,74477],{"class":149,"line":49792},[147,74478,74479],{"class":458},"      \u002F\u002F (2) 把数组转换为字符串join\n",[147,74481,74482],{"class":149,"line":49797},[147,74483,74484],{"class":458},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[147,74486,74487,74489,74491,74494,74497,74499,74502],{"class":149,"line":49806},[147,74488,70372],{"class":157},[147,74490,445],{"class":397},[147,74492,74493],{"class":157}," trArr.",[147,74495,74496],{"class":2237},"join",[147,74498,401],{"class":157},[147,74500,74501],{"class":504},"''",[147,74503,407],{"class":157},[147,74505,74506],{"class":149,"line":49815},[147,74507,74508],{"class":458},"      \u002F\u002F 显示共有几条\n",[147,74510,74511,74513,74515,74517,74520,74523,74525,74527],{"class":149,"line":49820},[147,74512,56044],{"class":157},[147,74514,54672],{"class":2237},[147,74516,401],{"class":157},[147,74518,74519],{"class":504},"'.total span'",[147,74521,74522],{"class":157},").innerHTML ",[147,74524,445],{"class":397},[147,74526,52238],{"class":157},[147,74528,56104],{"class":448},[147,74530,74531],{"class":149,"line":49825},[147,74532,2461],{"class":157},[147,74534,74535],{"class":149,"line":49830},[147,74536,74537],{"class":458},"    \u002F\u002F render()\n",[147,74539,74540],{"class":149,"line":49843},[147,74541,2674],{"emptyLinePlaceholder":324},[147,74543,74544],{"class":149,"line":49848},[147,74545,74546],{"class":458},"    \u002F\u002F 获取DOM对象\n",[147,74548,74549,74551,74553,74555,74557,74559,74561,74563],{"class":149,"line":49857},[147,74550,11495],{"class":397},[147,74552,70094],{"class":448},[147,74554,13838],{"class":397},[147,74556,54669],{"class":157},[147,74558,54672],{"class":2237},[147,74560,401],{"class":157},[147,74562,70105],{"class":504},[147,74564,407],{"class":157},[147,74566,74567,74569,74571,74573,74575,74577,74579,74581],{"class":149,"line":49866},[147,74568,11495],{"class":397},[147,74570,69921],{"class":448},[147,74572,13838],{"class":397},[147,74574,54669],{"class":157},[147,74576,54672],{"class":2237},[147,74578,401],{"class":157},[147,74580,69932],{"class":504},[147,74582,407],{"class":157},[147,74584,74585,74587,74589,74591,74593,74595,74597,74599],{"class":149,"line":49883},[147,74586,11495],{"class":397},[147,74588,15962],{"class":448},[147,74590,13838],{"class":397},[147,74592,54669],{"class":157},[147,74594,54672],{"class":2237},[147,74596,401],{"class":157},[147,74598,69951],{"class":504},[147,74600,407],{"class":157},[147,74602,74604,74606,74608,74610,74612,74614,74616,74618],{"class":149,"line":74603},231,[147,74605,11495],{"class":397},[147,74607,69980],{"class":448},[147,74609,13838],{"class":397},[147,74611,54669],{"class":157},[147,74613,54672],{"class":2237},[147,74615,401],{"class":157},[147,74617,69991],{"class":504},[147,74619,407],{"class":157},[147,74621,74623,74625,74627,74629,74631,74633,74635,74637],{"class":149,"line":74622},232,[147,74624,11495],{"class":397},[147,74626,69960],{"class":448},[147,74628,13838],{"class":397},[147,74630,54669],{"class":157},[147,74632,54672],{"class":2237},[147,74634,401],{"class":157},[147,74636,69971],{"class":504},[147,74638,407],{"class":157},[147,74640,74642,74644,74646,74648,74650,74652,74654,74656],{"class":149,"line":74641},233,[147,74643,11495],{"class":397},[147,74645,70000],{"class":448},[147,74647,13838],{"class":397},[147,74649,54669],{"class":157},[147,74651,54672],{"class":2237},[147,74653,401],{"class":157},[147,74655,70011],{"class":504},[147,74657,407],{"class":157},[147,74659,74661],{"class":149,"line":74660},234,[147,74662,2674],{"emptyLinePlaceholder":324},[147,74664,74666],{"class":149,"line":74665},235,[147,74667,74668],{"class":458},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[147,74670,74672,74674,74676,74678,74680,74682,74684,74686,74688],{"class":149,"line":74671},236,[147,74673,70112],{"class":157},[147,74675,58086],{"class":2237},[147,74677,401],{"class":157},[147,74679,70119],{"class":504},[147,74681,12709],{"class":157},[147,74683,54722],{"class":397},[147,74685,1932],{"class":157},[147,74687,474],{"class":5490},[147,74689,12716],{"class":157},[147,74691,74693],{"class":149,"line":74692},237,[147,74694,74695],{"class":458},"      \u002F\u002F 禁止浏览器跳转\n",[147,74697,74699,74701,74703],{"class":149,"line":74698},238,[147,74700,70139],{"class":157},[147,74702,70142],{"class":2237},[147,74704,2250],{"class":157},[147,74706,74708],{"class":149,"line":74707},239,[147,74709,74710],{"class":458},"      \u002F\u002F 非空判断\n",[147,74712,74714],{"class":149,"line":74713},240,[147,74715,74716],{"class":458},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[147,74718,74720],{"class":149,"line":74719},241,[147,74721,74722],{"class":458},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[147,74724,74726,74728,74730,74732,74735,74737,74740,74743,74745,74747],{"class":149,"line":74725},242,[147,74727,54753],{"class":397},[147,74729,1932],{"class":157},[147,74731,625],{"class":397},[147,74733,74734],{"class":157},"uname.value ",[147,74736,71630],{"class":397},[147,74738,74739],{"class":397}," !",[147,74741,74742],{"class":157},"age.value ",[147,74744,71630],{"class":397},[147,74746,74739],{"class":397},[147,74748,74749],{"class":157},"salary.value) {\n",[147,74751,74753,74755,74757,74759,74761],{"class":149,"line":74752},243,[147,74754,15025],{"class":397},[147,74756,70213],{"class":2237},[147,74758,401],{"class":157},[147,74760,70218],{"class":504},[147,74762,407],{"class":157},[147,74764,74766],{"class":149,"line":74765},244,[147,74767,52671],{"class":157},[147,74769,74771,74773,74775],{"class":149,"line":74770},245,[147,74772,58280],{"class":157},[147,74774,52157],{"class":2237},[147,74776,74777],{"class":157},"({\n",[147,74779,74781],{"class":149,"line":74780},246,[147,74782,74783],{"class":458},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[147,74785,74787],{"class":149,"line":74786},247,[147,74788,74789],{"class":458},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[147,74791,74793],{"class":149,"line":74792},248,[147,74794,74795],{"class":458},"        \u002F\u002F 对象的序号应为数组长度+1\n",[147,74797,74799],{"class":149,"line":74798},249,[147,74800,74801],{"class":458},"        \u002F\u002F unameId: arr.length + 1,\n",[147,74803,74805],{"class":149,"line":74804},250,[147,74806,2674],{"emptyLinePlaceholder":324},[147,74808,74810],{"class":149,"line":74809},251,[147,74811,74812],{"class":458},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[147,74814,74816],{"class":149,"line":74815},252,[147,74817,74818],{"class":458},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[147,74820,74822],{"class":149,"line":74821},253,[147,74823,74824],{"class":458},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[147,74826,74828],{"class":149,"line":74827},254,[147,74829,74830],{"class":458},"        \u002F\u002F 0当假看\n",[147,74832,74834,74837,74839,74841,74844,74846,74848,74850,74853,74855,74857,74860,74862],{"class":149,"line":74833},255,[147,74835,74836],{"class":157},"        unameId: arr.",[147,74838,52241],{"class":448},[147,74840,74087],{"class":397},[147,74842,74843],{"class":157}," arr[arr.",[147,74845,52241],{"class":448},[147,74847,52544],{"class":397},[147,74849,25392],{"class":448},[147,74851,74852],{"class":157},"].unameId ",[147,74854,880],{"class":397},[147,74856,25392],{"class":448},[147,74858,74859],{"class":397}," :",[147,74861,25392],{"class":448},[147,74863,31740],{"class":157},[147,74865,74867],{"class":149,"line":74866},256,[147,74868,70266],{"class":157},[147,74870,74872],{"class":149,"line":74871},257,[147,74873,70271],{"class":157},[147,74875,74877],{"class":149,"line":74876},258,[147,74878,70281],{"class":157},[147,74880,74882],{"class":149,"line":74881},259,[147,74883,70276],{"class":157},[147,74885,74887],{"class":149,"line":74886},260,[147,74888,74889],{"class":157},"        city: city.value,\n",[147,74891,74893],{"class":149,"line":74892},261,[147,74894,74895],{"class":458},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[147,74897,74899],{"class":149,"line":74898},262,[147,74900,74901],{"class":458},"        \u002F\u002F time: new Date().toDateString()\n",[147,74903,74905,74908,74911],{"class":149,"line":74904},263,[147,74906,74907],{"class":157},"        time: ",[147,74909,74910],{"class":2237},"getTime",[147,74912,2250],{"class":157},[147,74914,74916],{"class":149,"line":74915},264,[147,74917,65088],{"class":157},[147,74919,74921],{"class":149,"line":74920},265,[147,74922,74923],{"class":458},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[147,74925,74927,74929],{"class":149,"line":74926},266,[147,74928,70341],{"class":2237},[147,74930,2250],{"class":157},[147,74932,74934,74936,74938,74940,74942],{"class":149,"line":74933},267,[147,74935,70324],{"class":448},[147,74937,957],{"class":157},[147,74939,70329],{"class":2237},[147,74941,13324],{"class":157},[147,74943,74944],{"class":458},"\u002F\u002F重置表单\n",[147,74946,74948],{"class":149,"line":74947},268,[147,74949,74950],{"class":458},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[147,74952,74954,74957,74959,74961,74964,74966,74968,74970,74972],{"class":149,"line":74953},269,[147,74955,74956],{"class":157},"      localStorage.",[147,74958,71927],{"class":2237},[147,74960,401],{"class":157},[147,74962,74963],{"class":504},"'data'",[147,74965,12709],{"class":157},[147,74967,71937],{"class":448},[147,74969,957],{"class":157},[147,74971,71942],{"class":2237},[147,74973,74974],{"class":157},"(arr))\n",[147,74976,74978],{"class":149,"line":74977},270,[147,74979,33735],{"class":157},[147,74981,74983],{"class":149,"line":74982},271,[147,74984,2674],{"emptyLinePlaceholder":324},[147,74986,74988],{"class":149,"line":74987},272,[147,74989,74990],{"class":458},"    \u002F\u002F 3.删除业务\n",[147,74992,74994],{"class":149,"line":74993},273,[147,74995,74996],{"class":458},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[147,74998,75000,75002,75004,75006,75008,75010,75012,75014,75016],{"class":149,"line":74999},274,[147,75001,70614],{"class":157},[147,75003,58086],{"class":2237},[147,75005,401],{"class":157},[147,75007,58091],{"class":504},[147,75009,12709],{"class":157},[147,75011,54722],{"class":397},[147,75013,1932],{"class":157},[147,75015,474],{"class":5490},[147,75017,12716],{"class":157},[147,75019,75021],{"class":149,"line":75020},275,[147,75022,75023],{"class":458},"      \u002F\u002F 判断是否点击的是删除按钮\n",[147,75025,75027,75029,75031,75033,75035],{"class":149,"line":75026},276,[147,75028,54753],{"class":397},[147,75030,67307],{"class":157},[147,75032,54759],{"class":397},[147,75034,68529],{"class":504},[147,75036,12716],{"class":157},[147,75038,75040],{"class":149,"line":75039},277,[147,75041,75042],{"class":458},"        \u002F\u002F alert(1)\n",[147,75044,75046],{"class":149,"line":75045},278,[147,75047,75048],{"class":458},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[147,75050,75052],{"class":149,"line":75051},279,[147,75053,75054],{"class":458},"        \u002F\u002F console.log(e.target)\n",[147,75056,75058],{"class":149,"line":75057},280,[147,75059,75060],{"class":458},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[147,75062,75064],{"class":149,"line":75063},281,[147,75065,2674],{"emptyLinePlaceholder":324},[147,75067,75069],{"class":149,"line":75068},282,[147,75070,75071],{"class":458},"        \u002F\u002F 确认框，确然是否真的要删除\n",[147,75073,75075],{"class":149,"line":75074},283,[147,75076,75077],{"class":458},"        \u002F\u002F confirm()为确认框\n",[147,75079,75081],{"class":149,"line":75080},284,[147,75082,75083],{"class":458},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[147,75085,75087,75089,75091,75094,75096,75099],{"class":149,"line":75086},285,[147,75088,2771],{"class":397},[147,75090,1932],{"class":157},[147,75092,75093],{"class":2237},"confirm",[147,75095,401],{"class":157},[147,75097,75098],{"class":504},"'您确定要删除这条数据吗？'",[147,75100,75101],{"class":157},")) {\n",[147,75103,75105,75108,75110,75112,75114],{"class":149,"line":75104},286,[147,75106,75107],{"class":157},"          arr.",[147,75109,58283],{"class":2237},[147,75111,70667],{"class":157},[147,75113,616],{"class":448},[147,75115,407],{"class":157},[147,75117,75119],{"class":149,"line":75118},287,[147,75120,75121],{"class":458},"          \u002F\u002F 3.4 重新渲染页面\n",[147,75123,75125,75128],{"class":149,"line":75124},288,[147,75126,75127],{"class":2237},"          render",[147,75129,2250],{"class":157},[147,75131,75133],{"class":149,"line":75132},289,[147,75134,75135],{"class":458},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[147,75137,75139,75142,75144,75146,75148,75150,75152,75154,75156],{"class":149,"line":75138},290,[147,75140,75141],{"class":157},"          localStorage.",[147,75143,71927],{"class":2237},[147,75145,401],{"class":157},[147,75147,74963],{"class":504},[147,75149,12709],{"class":157},[147,75151,71937],{"class":448},[147,75153,957],{"class":157},[147,75155,71942],{"class":2237},[147,75157,74974],{"class":157},[147,75159,75161],{"class":149,"line":75160},291,[147,75162,2803],{"class":157},[147,75164,75166],{"class":149,"line":75165},292,[147,75167,52671],{"class":157},[147,75169,75171],{"class":149,"line":75170},293,[147,75172,2674],{"emptyLinePlaceholder":324},[147,75174,75176],{"class":149,"line":75175},294,[147,75177,33735],{"class":157},[147,75179,75181],{"class":149,"line":75180},295,[147,75182,2674],{"emptyLinePlaceholder":324},[147,75184,75186,75188,75190],{"class":149,"line":75185},296,[147,75187,52690],{"class":157},[147,75189,52086],{"class":153},[147,75191,51580],{"class":157},[147,75193,75195,75197,75199],{"class":149,"line":75194},297,[147,75196,52058],{"class":157},[147,75198,52073],{"class":153},[147,75200,51580],{"class":157},[147,75202,75204],{"class":149,"line":75203},298,[147,75205,2674],{"emptyLinePlaceholder":324},[147,75207,75209,75211,75213],{"class":149,"line":75208},299,[147,75210,52058],{"class":157},[147,75212,50909],{"class":153},[147,75214,51580],{"class":157},[14,75216,75218],{"id":75217},"_36-正则表达式","3.6 正则表达式",[19,75220,75221],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,75223,75224],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,75226,75227],{},"正则表达式的作用：",[1406,75229,75230,75237,75243],{},[353,75231,75232,75233,75236],{},"表单验证（ ",[234,75234,75235],{},"匹配"," ）",[353,75238,75239,75240,75236],{},"过滤敏感词（ ",[234,75241,75242],{},"替换",[353,75244,75245,75246,75236],{},"字符串中提取我们想要的部分（ ",[234,75247,75248],{},"提取",[367,75250,75252],{"id":75251},"_361-语法","3.6.1 语法",[19,75254,75255],{},"正则表达式使用步骤：",[350,75257,75258,75261],{},[353,75259,75260],{},"定义规则",[353,75262,75263],{},"查找是否匹配",[19,75265,75266],{},"正则表达式里边不需要写引号",[19,75268,75269],{},[29,75270],{"alt":143,"src":75271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,75273,75274],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,75276,75277],{},"reg.test(str)",[19,75279,75280],{},[29,75281],{"alt":143,"src":75282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,75284,75285],{},[29,75286],{"alt":143,"src":75287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[367,75289,75291],{"id":75290},"_362-元字符","3.6.2 元字符",[350,75293,75294,75297,75300,75303,75310],{},[353,75295,75296],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[353,75298,75299],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[353,75301,75302],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[353,75304,75305,75306],{},"正则验证工具：",[637,75307,75308],{"href":75308,"rel":75309},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[24138],[353,75311,75312],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22271,75314,75316],{"id":75315},"_3621-边界符","3.6.2.1 边界符",[19,75318,75319],{},[29,75320],{"alt":143,"src":75321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,75323,75324],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,75326,75327],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,75329,75330],{},"只匹配一次",[19,75332,75333],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22271,75335,75337],{"id":75336},"_3622-量词","3.6.2.2 量词",[19,75339,75340],{},[29,75341],{"alt":143,"src":75342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,75344,75345],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22271,75347,75349],{"id":75348},"_3623-元字符","3.6.2.3 元字符",[19,75351,75352],{},[29,75353],{"alt":143,"src":75354},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,75356,75357],{},"匹配的是a或b或c []只选一个",[19,75359,75360],{},[29,75361],{"alt":143,"src":75362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,75364,75365],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,75367,75368],{},[29,75369],{"alt":143,"src":75370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,75372,75373],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,75375,75376],{},[29,75377],{"alt":143,"src":75378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[138,75380,75382],{"className":50907,"code":75381,"language":50909,"meta":143,"style":143},"\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",[51,75383,75384,75394,75408,75412,75420,75434,75454,75466,75474,75478,75486,75494,75499,75530,75557,75585,75589,75594,75622,75653,75658,75663,75694,75726,75758,75762,75767,75798,75828,75858,75862,75867,75898,75929,75959,75989,75993,75998,76031,76035,76040,76071,76102,76106,76111,76142,76172,76203,76207,76212,76244,76275,76306,76333,76364,76396,76429,76460,76491,76523,76554,76562,76570,76574],{"__ignoreMap":143},[147,75385,75386,75388,75390,75392],{"class":149,"line":150},[147,75387,51571],{"class":157},[147,75389,51574],{"class":153},[147,75391,51577],{"class":2237},[147,75393,51580],{"class":157},[147,75395,75396,75398,75400,75402,75404,75406],{"class":149,"line":312},[147,75397,1309],{"class":157},[147,75399,50909],{"class":153},[147,75401,51589],{"class":2237},[147,75403,445],{"class":157},[147,75405,51594],{"class":504},[147,75407,51580],{"class":157},[147,75409,75410],{"class":149,"line":1454},[147,75411,2674],{"emptyLinePlaceholder":324},[147,75413,75414,75416,75418],{"class":149,"line":1469},[147,75415,1309],{"class":157},[147,75417,51607],{"class":153},[147,75419,51580],{"class":157},[147,75421,75422,75424,75426,75428,75430,75432],{"class":149,"line":1475},[147,75423,52417],{"class":157},[147,75425,51617],{"class":153},[147,75427,51620],{"class":2237},[147,75429,445],{"class":157},[147,75431,51625],{"class":504},[147,75433,51580],{"class":157},[147,75435,75436,75438,75440,75442,75444,75446,75448,75450,75452],{"class":149,"line":1489},[147,75437,52417],{"class":157},[147,75439,51617],{"class":153},[147,75441,15193],{"class":2237},[147,75443,445],{"class":157},[147,75445,51664],{"class":504},[147,75447,51644],{"class":2237},[147,75449,445],{"class":157},[147,75451,51671],{"class":504},[147,75453,51580],{"class":157},[147,75455,75456,75458,75460,75462,75464],{"class":149,"line":1495},[147,75457,52417],{"class":157},[147,75459,51680],{"class":153},[147,75461,51683],{"class":157},[147,75463,51680],{"class":153},[147,75465,51580],{"class":157},[147,75467,75468,75470,75472],{"class":149,"line":1586},[147,75469,52058],{"class":157},[147,75471,51607],{"class":153},[147,75473,51580],{"class":157},[147,75475,75476],{"class":149,"line":1592},[147,75477,2674],{"emptyLinePlaceholder":324},[147,75479,75480,75482,75484],{"class":149,"line":1604},[147,75481,1309],{"class":157},[147,75483,52073],{"class":153},[147,75485,51580],{"class":157},[147,75487,75488,75490,75492],{"class":149,"line":1886},[147,75489,52417],{"class":157},[147,75491,52086],{"class":153},[147,75493,51580],{"class":157},[147,75495,75496],{"class":149,"line":1891},[147,75497,75498],{"class":458},"    \u002F\u002F 元字符中\n",[147,75500,75501,75503,75505,75507,75509,75512,75514,75516,75519,75521,75524,75527],{"class":149,"line":1897},[147,75502,74026],{"class":157},[147,75504,58520],{"class":2237},[147,75506,401],{"class":157},[147,75508,983],{"class":504},[147,75510,75511],{"class":48251},"哈",[147,75513,983],{"class":504},[147,75515,957],{"class":157},[147,75517,75518],{"class":2237},"test",[147,75520,401],{"class":157},[147,75522,75523],{"class":504},"'哈'",[147,75525,75526],{"class":157},"))  ",[147,75528,75529],{"class":458},"\u002F\u002Ftrue\n",[147,75531,75532,75534,75536,75538,75540,75542,75544,75546,75548,75550,75553,75555],{"class":149,"line":1902},[147,75533,74026],{"class":157},[147,75535,58520],{"class":2237},[147,75537,401],{"class":157},[147,75539,983],{"class":504},[147,75541,75511],{"class":48251},[147,75543,983],{"class":504},[147,75545,957],{"class":157},[147,75547,75518],{"class":2237},[147,75549,401],{"class":157},[147,75551,75552],{"class":504},"'哈哈'",[147,75554,75526],{"class":157},[147,75556,75529],{"class":458},[147,75558,75559,75561,75563,75565,75567,75569,75571,75573,75575,75577,75580,75583],{"class":149,"line":1916},[147,75560,74026],{"class":157},[147,75562,58520],{"class":2237},[147,75564,401],{"class":157},[147,75566,983],{"class":504},[147,75568,75511],{"class":48251},[147,75570,983],{"class":504},[147,75572,957],{"class":157},[147,75574,75518],{"class":2237},[147,75576,401],{"class":157},[147,75578,75579],{"class":504},"'二哈'",[147,75581,75582],{"class":157},"))   ",[147,75584,75529],{"class":458},[147,75586,75587],{"class":149,"line":1921},[147,75588,2674],{"emptyLinePlaceholder":324},[147,75590,75591],{"class":149,"line":1927},[147,75592,75593],{"class":458},"    \u002F\u002F 1.边界符\n",[147,75595,75596,75598,75600,75602,75604,75606,75608,75610,75612,75614,75616,75618,75620],{"class":149,"line":1948},[147,75597,74026],{"class":157},[147,75599,58520],{"class":2237},[147,75601,401],{"class":157},[147,75603,983],{"class":504},[147,75605,1365],{"class":397},[147,75607,75511],{"class":48251},[147,75609,983],{"class":504},[147,75611,957],{"class":157},[147,75613,75518],{"class":2237},[147,75615,401],{"class":157},[147,75617,75523],{"class":504},[147,75619,75526],{"class":157},[147,75621,75529],{"class":458},[147,75623,75624,75626,75628,75630,75632,75634,75636,75638,75640,75642,75644,75646,75648,75650],{"class":149,"line":1953},[147,75625,74026],{"class":157},[147,75627,58520],{"class":2237},[147,75629,401],{"class":157},[147,75631,983],{"class":504},[147,75633,1365],{"class":397},[147,75635,75511],{"class":48251},[147,75637,701],{"class":397},[147,75639,983],{"class":504},[147,75641,957],{"class":157},[147,75643,75518],{"class":2237},[147,75645,401],{"class":157},[147,75647,75552],{"class":504},[147,75649,75526],{"class":157},[147,75651,75652],{"class":458},"\u002F\u002Ffalse\n",[147,75654,75655],{"class":149,"line":1967},[147,75656,75657],{"class":458},"    \u002F\u002F 2.量词\n",[147,75659,75660],{"class":149,"line":1972},[147,75661,75662],{"class":458},"    \u002F\u002F 量词 * 类似于 >= 0\n",[147,75664,75665,75667,75669,75671,75673,75675,75677,75680,75682,75684,75686,75688,75690,75692],{"class":149,"line":2001},[147,75666,74026],{"class":157},[147,75668,58520],{"class":2237},[147,75670,401],{"class":157},[147,75672,983],{"class":504},[147,75674,1365],{"class":397},[147,75676,75511],{"class":48251},[147,75678,75679],{"class":397},"*$",[147,75681,983],{"class":504},[147,75683,957],{"class":157},[147,75685,75518],{"class":2237},[147,75687,401],{"class":157},[147,75689,75552],{"class":504},[147,75691,75526],{"class":157},[147,75693,75529],{"class":458},[147,75695,75696,75698,75700,75702,75704,75706,75708,75710,75712,75714,75716,75718,75721,75723],{"class":149,"line":2006},[147,75697,74026],{"class":157},[147,75699,58520],{"class":2237},[147,75701,401],{"class":157},[147,75703,983],{"class":504},[147,75705,1365],{"class":397},[147,75707,75511],{"class":48251},[147,75709,75679],{"class":397},[147,75711,983],{"class":504},[147,75713,957],{"class":157},[147,75715,75518],{"class":2237},[147,75717,401],{"class":157},[147,75719,75720],{"class":504},"'二哈好傻'",[147,75722,75526],{"class":157},[147,75724,75725],{"class":458},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[147,75727,75728,75730,75732,75734,75736,75738,75740,75742,75744,75746,75748,75750,75753,75755],{"class":149,"line":2023},[147,75729,74026],{"class":157},[147,75731,58520],{"class":2237},[147,75733,401],{"class":157},[147,75735,983],{"class":504},[147,75737,1365],{"class":397},[147,75739,75511],{"class":48251},[147,75741,75679],{"class":397},[147,75743,983],{"class":504},[147,75745,957],{"class":157},[147,75747,75518],{"class":2237},[147,75749,401],{"class":157},[147,75751,75752],{"class":504},"'哈好哈'",[147,75754,75582],{"class":157},[147,75756,75757],{"class":458},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[147,75759,75760],{"class":149,"line":2028},[147,75761,2674],{"emptyLinePlaceholder":324},[147,75763,75764],{"class":149,"line":2033},[147,75765,75766],{"class":458},"    \u002F\u002F +类似于>=1\n",[147,75768,75769,75771,75773,75775,75777,75779,75781,75784,75786,75788,75790,75792,75794,75796],{"class":149,"line":2038},[147,75770,74026],{"class":157},[147,75772,58520],{"class":2237},[147,75774,401],{"class":157},[147,75776,983],{"class":504},[147,75778,1365],{"class":397},[147,75780,75511],{"class":48251},[147,75782,75783],{"class":397},"+$",[147,75785,983],{"class":504},[147,75787,957],{"class":157},[147,75789,75518],{"class":2237},[147,75791,401],{"class":157},[147,75793,75552],{"class":504},[147,75795,75526],{"class":157},[147,75797,75529],{"class":458},[147,75799,75800,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822,75824,75826],{"class":149,"line":2052},[147,75801,74026],{"class":157},[147,75803,58520],{"class":2237},[147,75805,401],{"class":157},[147,75807,983],{"class":504},[147,75809,1365],{"class":397},[147,75811,75511],{"class":48251},[147,75813,75783],{"class":397},[147,75815,983],{"class":504},[147,75817,957],{"class":157},[147,75819,75518],{"class":2237},[147,75821,401],{"class":157},[147,75823,75720],{"class":504},[147,75825,75526],{"class":157},[147,75827,75725],{"class":458},[147,75829,75830,75832,75834,75836,75838,75840,75842,75844,75846,75848,75850,75852,75854,75856],{"class":149,"line":2057},[147,75831,74026],{"class":157},[147,75833,58520],{"class":2237},[147,75835,401],{"class":157},[147,75837,983],{"class":504},[147,75839,1365],{"class":397},[147,75841,75511],{"class":48251},[147,75843,75783],{"class":397},[147,75845,983],{"class":504},[147,75847,957],{"class":157},[147,75849,75518],{"class":2237},[147,75851,401],{"class":157},[147,75853,75752],{"class":504},[147,75855,75582],{"class":157},[147,75857,75652],{"class":458},[147,75859,75860],{"class":149,"line":2851},[147,75861,2674],{"emptyLinePlaceholder":324},[147,75863,75864],{"class":149,"line":2865},[147,75865,75866],{"class":458},"    \u002F\u002F ?类似于0次或一次\n",[147,75868,75869,75871,75873,75875,75877,75879,75882,75884,75886,75888,75890,75892,75894,75896],{"class":149,"line":2873},[147,75870,74026],{"class":157},[147,75872,58520],{"class":2237},[147,75874,401],{"class":157},[147,75876,983],{"class":504},[147,75878,1365],{"class":397},[147,75880,75881],{"class":48251},"哈？",[147,75883,701],{"class":397},[147,75885,983],{"class":504},[147,75887,957],{"class":157},[147,75889,75518],{"class":2237},[147,75891,401],{"class":157},[147,75893,74501],{"class":504},[147,75895,75582],{"class":157},[147,75897,75529],{"class":458},[147,75899,75900,75902,75904,75906,75908,75910,75912,75915,75917,75919,75921,75923,75925,75927],{"class":149,"line":2878},[147,75901,74026],{"class":157},[147,75903,58520],{"class":2237},[147,75905,401],{"class":157},[147,75907,983],{"class":504},[147,75909,1365],{"class":397},[147,75911,75511],{"class":48251},[147,75913,75914],{"class":397},"?$",[147,75916,983],{"class":504},[147,75918,957],{"class":157},[147,75920,75518],{"class":2237},[147,75922,401],{"class":157},[147,75924,75552],{"class":504},[147,75926,75526],{"class":157},[147,75928,75652],{"class":458},[147,75930,75931,75933,75935,75937,75939,75941,75943,75945,75947,75949,75951,75953,75955,75957],{"class":149,"line":2884},[147,75932,74026],{"class":157},[147,75934,58520],{"class":2237},[147,75936,401],{"class":157},[147,75938,983],{"class":504},[147,75940,1365],{"class":397},[147,75942,75511],{"class":48251},[147,75944,75914],{"class":397},[147,75946,983],{"class":504},[147,75948,957],{"class":157},[147,75950,75518],{"class":2237},[147,75952,401],{"class":157},[147,75954,75720],{"class":504},[147,75956,75526],{"class":157},[147,75958,75725],{"class":458},[147,75960,75961,75963,75965,75967,75969,75971,75973,75975,75977,75979,75981,75983,75985,75987],{"class":149,"line":2890},[147,75962,74026],{"class":157},[147,75964,58520],{"class":2237},[147,75966,401],{"class":157},[147,75968,983],{"class":504},[147,75970,1365],{"class":397},[147,75972,75511],{"class":48251},[147,75974,75914],{"class":397},[147,75976,983],{"class":504},[147,75978,957],{"class":157},[147,75980,75518],{"class":2237},[147,75982,401],{"class":157},[147,75984,75752],{"class":504},[147,75986,75526],{"class":157},[147,75988,75652],{"class":458},[147,75990,75991],{"class":149,"line":2895},[147,75992,2674],{"emptyLinePlaceholder":324},[147,75994,75995],{"class":149,"line":8222},[147,75996,75997],{"class":458},"    \u002F\u002F {n}写几，就必须出现几次\n",[147,75999,76000,76002,76004,76006,76008,76010,76012,76015,76017,76019,76021,76023,76026,76029],{"class":149,"line":8246},[147,76001,74026],{"class":157},[147,76003,58520],{"class":2237},[147,76005,401],{"class":157},[147,76007,983],{"class":504},[147,76009,1365],{"class":397},[147,76011,75511],{"class":48251},[147,76013,76014],{"class":397},"{4}$",[147,76016,983],{"class":504},[147,76018,957],{"class":157},[147,76020,75518],{"class":2237},[147,76022,401],{"class":157},[147,76024,76025],{"class":504},"'哈哈哈哈'",[147,76027,76028],{"class":157},")) ",[147,76030,75529],{"class":458},[147,76032,76033],{"class":149,"line":8251},[147,76034,2674],{"emptyLinePlaceholder":324},[147,76036,76037],{"class":149,"line":8257},[147,76038,76039],{"class":458},"    \u002F\u002F {n,}大于等于n次\n",[147,76041,76042,76044,76046,76048,76050,76052,76054,76057,76059,76061,76063,76065,76067,76069],{"class":149,"line":8284},[147,76043,74026],{"class":157},[147,76045,58520],{"class":2237},[147,76047,401],{"class":157},[147,76049,983],{"class":504},[147,76051,1365],{"class":397},[147,76053,75511],{"class":48251},[147,76055,76056],{"class":397},"{4,}$",[147,76058,983],{"class":504},[147,76060,957],{"class":157},[147,76062,75518],{"class":2237},[147,76064,401],{"class":157},[147,76066,76025],{"class":504},[147,76068,76028],{"class":157},[147,76070,75529],{"class":458},[147,76072,76073,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76098,76100],{"class":149,"line":8289},[147,76074,74026],{"class":157},[147,76076,58520],{"class":2237},[147,76078,401],{"class":157},[147,76080,983],{"class":504},[147,76082,1365],{"class":397},[147,76084,75511],{"class":48251},[147,76086,76056],{"class":397},[147,76088,983],{"class":504},[147,76090,957],{"class":157},[147,76092,75518],{"class":2237},[147,76094,401],{"class":157},[147,76096,76097],{"class":504},"'哈哈哈哈哈'",[147,76099,76028],{"class":157},[147,76101,75529],{"class":458},[147,76103,76104],{"class":149,"line":8295},[147,76105,2674],{"emptyLinePlaceholder":324},[147,76107,76108],{"class":149,"line":8307},[147,76109,76110],{"class":458},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[147,76112,76113,76115,76117,76119,76121,76123,76125,76128,76130,76132,76134,76136,76138,76140],{"class":149,"line":8319},[147,76114,74026],{"class":157},[147,76116,58520],{"class":2237},[147,76118,401],{"class":157},[147,76120,983],{"class":504},[147,76122,1365],{"class":397},[147,76124,75511],{"class":48251},[147,76126,76127],{"class":397},"{4,6}$",[147,76129,983],{"class":504},[147,76131,957],{"class":157},[147,76133,75518],{"class":2237},[147,76135,401],{"class":157},[147,76137,76025],{"class":504},[147,76139,76028],{"class":157},[147,76141,75529],{"class":458},[147,76143,76144,76146,76148,76150,76152,76154,76156,76158,76160,76162,76164,76166,76168,76170],{"class":149,"line":8331},[147,76145,74026],{"class":157},[147,76147,58520],{"class":2237},[147,76149,401],{"class":157},[147,76151,983],{"class":504},[147,76153,1365],{"class":397},[147,76155,75511],{"class":48251},[147,76157,76127],{"class":397},[147,76159,983],{"class":504},[147,76161,957],{"class":157},[147,76163,75518],{"class":2237},[147,76165,401],{"class":157},[147,76167,76097],{"class":504},[147,76169,76028],{"class":157},[147,76171,75529],{"class":458},[147,76173,76174,76176,76178,76180,76182,76184,76186,76188,76190,76192,76194,76196,76199,76201],{"class":149,"line":9990},[147,76175,74026],{"class":157},[147,76177,58520],{"class":2237},[147,76179,401],{"class":157},[147,76181,983],{"class":504},[147,76183,1365],{"class":397},[147,76185,75511],{"class":48251},[147,76187,76127],{"class":397},[147,76189,983],{"class":504},[147,76191,957],{"class":157},[147,76193,75518],{"class":2237},[147,76195,401],{"class":157},[147,76197,76198],{"class":504},"'哈哈哈哈哈哈哈'",[147,76200,76028],{"class":157},[147,76202,75652],{"class":458},[147,76204,76205],{"class":149,"line":10015},[147,76206,2674],{"emptyLinePlaceholder":324},[147,76208,76209],{"class":149,"line":10038},[147,76210,76211],{"class":458},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[147,76213,76214,76216,76218,76220,76222,76224,76227,76229,76231,76233,76235,76237,76240,76242],{"class":149,"line":10062},[147,76215,74026],{"class":157},[147,76217,58520],{"class":2237},[147,76219,401],{"class":157},[147,76221,983],{"class":504},[147,76223,1365],{"class":397},[147,76225,76226],{"class":448},"[abc]",[147,76228,701],{"class":397},[147,76230,983],{"class":504},[147,76232,957],{"class":157},[147,76234,75518],{"class":2237},[147,76236,401],{"class":157},[147,76238,76239],{"class":504},"'a'",[147,76241,75526],{"class":157},[147,76243,75529],{"class":458},[147,76245,76246,76248,76250,76252,76254,76256,76258,76260,76262,76264,76266,76268,76271,76273],{"class":149,"line":10067},[147,76247,74026],{"class":157},[147,76249,58520],{"class":2237},[147,76251,401],{"class":157},[147,76253,983],{"class":504},[147,76255,1365],{"class":397},[147,76257,76226],{"class":448},[147,76259,701],{"class":397},[147,76261,983],{"class":504},[147,76263,957],{"class":157},[147,76265,75518],{"class":2237},[147,76267,401],{"class":157},[147,76269,76270],{"class":504},"'b'",[147,76272,75526],{"class":157},[147,76274,75529],{"class":458},[147,76276,76277,76279,76281,76283,76285,76287,76289,76291,76293,76295,76297,76299,76302,76304],{"class":149,"line":10072},[147,76278,74026],{"class":157},[147,76280,58520],{"class":2237},[147,76282,401],{"class":157},[147,76284,983],{"class":504},[147,76286,1365],{"class":397},[147,76288,76226],{"class":448},[147,76290,701],{"class":397},[147,76292,983],{"class":504},[147,76294,957],{"class":157},[147,76296,75518],{"class":2237},[147,76298,401],{"class":157},[147,76300,76301],{"class":504},"'c'",[147,76303,75526],{"class":157},[147,76305,75529],{"class":458},[147,76307,76308,76310,76312,76314,76316,76318,76320,76322,76324,76326,76329,76331],{"class":149,"line":10077},[147,76309,74026],{"class":157},[147,76311,58520],{"class":2237},[147,76313,401],{"class":157},[147,76315,983],{"class":504},[147,76317,76226],{"class":448},[147,76319,983],{"class":504},[147,76321,957],{"class":157},[147,76323,75518],{"class":2237},[147,76325,401],{"class":157},[147,76327,76328],{"class":504},"'ab'",[147,76330,75526],{"class":157},[147,76332,75529],{"class":458},[147,76334,76335,76337,76339,76341,76343,76345,76347,76349,76351,76353,76355,76357,76359,76361],{"class":149,"line":10086},[147,76336,74026],{"class":157},[147,76338,58520],{"class":2237},[147,76340,401],{"class":157},[147,76342,983],{"class":504},[147,76344,1365],{"class":397},[147,76346,76226],{"class":448},[147,76348,701],{"class":397},[147,76350,983],{"class":504},[147,76352,957],{"class":157},[147,76354,75518],{"class":2237},[147,76356,401],{"class":157},[147,76358,76328],{"class":504},[147,76360,75526],{"class":157},[147,76362,76363],{"class":458},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[147,76365,76366,76368,76370,76372,76374,76376,76378,76381,76383,76385,76387,76389,76391,76393],{"class":149,"line":10091},[147,76367,74026],{"class":157},[147,76369,58520],{"class":2237},[147,76371,401],{"class":157},[147,76373,983],{"class":504},[147,76375,1365],{"class":397},[147,76377,76226],{"class":448},[147,76379,76380],{"class":397},"{2}$",[147,76382,983],{"class":504},[147,76384,957],{"class":157},[147,76386,75518],{"class":2237},[147,76388,401],{"class":157},[147,76390,76328],{"class":504},[147,76392,75526],{"class":157},[147,76394,76395],{"class":458},"\u002F\u002Ftrue   可以选两个\n",[147,76397,76398,76400,76402,76404,76406,76408,76411,76413,76415,76417,76419,76421,76424,76426],{"class":149,"line":10097},[147,76399,74026],{"class":157},[147,76401,58520],{"class":2237},[147,76403,401],{"class":157},[147,76405,983],{"class":504},[147,76407,1365],{"class":397},[147,76409,76410],{"class":448},"[a-z]",[147,76412,701],{"class":397},[147,76414,983],{"class":504},[147,76416,957],{"class":157},[147,76418,75518],{"class":2237},[147,76420,401],{"class":157},[147,76422,76423],{"class":504},"'p'",[147,76425,75582],{"class":157},[147,76427,76428],{"class":458},"\u002F\u002Ftrue   依然只能选一个\n",[147,76430,76431,76433,76435,76437,76439,76441,76444,76446,76448,76450,76452,76454,76456,76458],{"class":149,"line":10118},[147,76432,74026],{"class":157},[147,76434,58520],{"class":2237},[147,76436,401],{"class":157},[147,76438,983],{"class":504},[147,76440,1365],{"class":397},[147,76442,76443],{"class":448},"[A-Z]",[147,76445,701],{"class":397},[147,76447,983],{"class":504},[147,76449,957],{"class":157},[147,76451,75518],{"class":2237},[147,76453,401],{"class":157},[147,76455,76423],{"class":504},[147,76457,75582],{"class":157},[147,76459,75652],{"class":458},[147,76461,76462,76464,76466,76468,76470,76472,76474,76476,76478,76480,76482,76484,76487,76489],{"class":149,"line":10124},[147,76463,74026],{"class":157},[147,76465,58520],{"class":2237},[147,76467,401],{"class":157},[147,76469,983],{"class":504},[147,76471,1365],{"class":397},[147,76473,76443],{"class":448},[147,76475,701],{"class":397},[147,76477,983],{"class":504},[147,76479,957],{"class":157},[147,76481,75518],{"class":2237},[147,76483,401],{"class":157},[147,76485,76486],{"class":504},"'P'",[147,76488,75582],{"class":157},[147,76490,75529],{"class":458},[147,76492,76493,76495,76497,76499,76501,76503,76506,76508,76510,76512,76514,76516,76519,76521],{"class":149,"line":10138},[147,76494,74026],{"class":157},[147,76496,58520],{"class":2237},[147,76498,401],{"class":157},[147,76500,983],{"class":504},[147,76502,1365],{"class":397},[147,76504,76505],{"class":448},"[0-9]",[147,76507,701],{"class":397},[147,76509,983],{"class":504},[147,76511,957],{"class":157},[147,76513,75518],{"class":2237},[147,76515,401],{"class":157},[147,76517,76518],{"class":504},"'0'",[147,76520,75582],{"class":157},[147,76522,75529],{"class":458},[147,76524,76525,76527,76529,76531,76533,76535,76538,76540,76542,76544,76546,76548,76550,76552],{"class":149,"line":10144},[147,76526,74026],{"class":157},[147,76528,58520],{"class":2237},[147,76530,401],{"class":157},[147,76532,983],{"class":504},[147,76534,1365],{"class":397},[147,76536,76537],{"class":448},"[a-zA-Z0-9]",[147,76539,701],{"class":397},[147,76541,983],{"class":504},[147,76543,957],{"class":157},[147,76545,75518],{"class":2237},[147,76547,401],{"class":157},[147,76549,76423],{"class":504},[147,76551,75526],{"class":157},[147,76553,75529],{"class":458},[147,76555,76556,76558,76560],{"class":149,"line":10171},[147,76557,52690],{"class":157},[147,76559,52086],{"class":153},[147,76561,51580],{"class":157},[147,76563,76564,76566,76568],{"class":149,"line":10180},[147,76565,52058],{"class":157},[147,76567,52073],{"class":153},[147,76569,51580],{"class":157},[147,76571,76572],{"class":149,"line":10186},[147,76573,2674],{"emptyLinePlaceholder":324},[147,76575,76576,76578,76580],{"class":149,"line":10194},[147,76577,52058],{"class":157},[147,76579,50909],{"class":153},[147,76581,51580],{"class":157},[22271,76583,76585],{"id":76584},"_3624-修饰符","3.6.2.4 修饰符",[19,76587,76588],{},[29,76589],{"alt":143,"src":76590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,76592,76593],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,76595,76596],{},[29,76597],{"alt":143,"src":76598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[138,76600,76602],{"className":50907,"code":76601,"language":50909,"meta":143,"style":143},"\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",[51,76603,76604,76614,76628,76636,76650,76670,76682,76690,76698,76706,76738,76769,76774,76806,76817,76850,76859,76867,76875],{"__ignoreMap":143},[147,76605,76606,76608,76610,76612],{"class":149,"line":150},[147,76607,51571],{"class":157},[147,76609,51574],{"class":153},[147,76611,51577],{"class":2237},[147,76613,51580],{"class":157},[147,76615,76616,76618,76620,76622,76624,76626],{"class":149,"line":312},[147,76617,1309],{"class":157},[147,76619,50909],{"class":153},[147,76621,51589],{"class":2237},[147,76623,445],{"class":157},[147,76625,51594],{"class":504},[147,76627,51580],{"class":157},[147,76629,76630,76632,76634],{"class":149,"line":1454},[147,76631,1309],{"class":157},[147,76633,51607],{"class":153},[147,76635,51580],{"class":157},[147,76637,76638,76640,76642,76644,76646,76648],{"class":149,"line":1469},[147,76639,52417],{"class":157},[147,76641,51617],{"class":153},[147,76643,51620],{"class":2237},[147,76645,445],{"class":157},[147,76647,51625],{"class":504},[147,76649,51580],{"class":157},[147,76651,76652,76654,76656,76658,76660,76662,76664,76666,76668],{"class":149,"line":1475},[147,76653,52417],{"class":157},[147,76655,51617],{"class":153},[147,76657,15193],{"class":2237},[147,76659,445],{"class":157},[147,76661,51664],{"class":504},[147,76663,51644],{"class":2237},[147,76665,445],{"class":157},[147,76667,51671],{"class":504},[147,76669,51580],{"class":157},[147,76671,76672,76674,76676,76678,76680],{"class":149,"line":1489},[147,76673,52417],{"class":157},[147,76675,51680],{"class":153},[147,76677,51683],{"class":157},[147,76679,51680],{"class":153},[147,76681,51580],{"class":157},[147,76683,76684,76686,76688],{"class":149,"line":1495},[147,76685,52058],{"class":157},[147,76687,51607],{"class":153},[147,76689,51580],{"class":157},[147,76691,76692,76694,76696],{"class":149,"line":1586},[147,76693,1309],{"class":157},[147,76695,52073],{"class":153},[147,76697,51580],{"class":157},[147,76699,76700,76702,76704],{"class":149,"line":1592},[147,76701,52417],{"class":157},[147,76703,52086],{"class":153},[147,76705,51580],{"class":157},[147,76707,76708,76710,76712,76714,76716,76718,76721,76723,76725,76727,76729,76731,76734,76736],{"class":149,"line":1604},[147,76709,74026],{"class":157},[147,76711,58520],{"class":2237},[147,76713,401],{"class":157},[147,76715,983],{"class":504},[147,76717,1365],{"class":397},[147,76719,76720],{"class":48251},"java",[147,76722,701],{"class":397},[147,76724,983],{"class":504},[147,76726,957],{"class":157},[147,76728,75518],{"class":2237},[147,76730,401],{"class":157},[147,76732,76733],{"class":504},"'java'",[147,76735,76028],{"class":157},[147,76737,75529],{"class":458},[147,76739,76740,76742,76744,76746,76748,76750,76752,76754,76756,76758,76760,76762,76765,76767],{"class":149,"line":1886},[147,76741,74026],{"class":157},[147,76743,58520],{"class":2237},[147,76745,401],{"class":157},[147,76747,983],{"class":504},[147,76749,1365],{"class":397},[147,76751,76720],{"class":48251},[147,76753,701],{"class":397},[147,76755,983],{"class":504},[147,76757,957],{"class":157},[147,76759,75518],{"class":2237},[147,76761,401],{"class":157},[147,76763,76764],{"class":504},"'Java'",[147,76766,76028],{"class":157},[147,76768,75652],{"class":458},[147,76770,76771],{"class":149,"line":1891},[147,76772,76773],{"class":458},"    \u002F\u002F 不区分大小写、\n",[147,76775,76776,76778,76780,76782,76784,76786,76788,76790,76792,76794,76796,76798,76800,76802,76804],{"class":149,"line":1897},[147,76777,74026],{"class":157},[147,76779,58520],{"class":2237},[147,76781,401],{"class":157},[147,76783,983],{"class":504},[147,76785,1365],{"class":397},[147,76787,76720],{"class":48251},[147,76789,701],{"class":397},[147,76791,983],{"class":504},[147,76793,840],{"class":397},[147,76795,957],{"class":157},[147,76797,75518],{"class":2237},[147,76799,401],{"class":157},[147,76801,76764],{"class":504},[147,76803,76028],{"class":157},[147,76805,75529],{"class":458},[147,76807,76808,76810,76812,76814],{"class":149,"line":1902},[147,76809,11495],{"class":397},[147,76811,74192],{"class":448},[147,76813,13838],{"class":397},[147,76815,76816],{"class":504}," 'java是一门编程语言，学完java工资很高'\n",[147,76818,76819,76821,76824,76826,76829,76832,76834,76836,76838,76840,76843,76845,76848],{"class":149,"line":1916},[147,76820,11495],{"class":397},[147,76822,76823],{"class":448}," result",[147,76825,13838],{"class":397},[147,76827,76828],{"class":157}," str.",[147,76830,76831],{"class":2237},"replace",[147,76833,401],{"class":157},[147,76835,983],{"class":504},[147,76837,76720],{"class":48251},[147,76839,983],{"class":504},[147,76841,76842],{"class":397},"ig",[147,76844,12709],{"class":157},[147,76846,76847],{"class":504},"'前端'",[147,76849,407],{"class":157},[147,76851,76852,76854,76856],{"class":149,"line":1921},[147,76853,74026],{"class":157},[147,76855,58520],{"class":2237},[147,76857,76858],{"class":157},"(result)\n",[147,76860,76861,76863,76865],{"class":149,"line":1927},[147,76862,52690],{"class":157},[147,76864,52086],{"class":153},[147,76866,51580],{"class":157},[147,76868,76869,76871,76873],{"class":149,"line":1948},[147,76870,52058],{"class":157},[147,76872,52073],{"class":153},[147,76874,51580],{"class":157},[147,76876,76877,76879,76881],{"class":149,"line":1953},[147,76878,52058],{"class":157},[147,76880,50909],{"class":153},[147,76882,51580],{"class":157},[308,76884,76885],{},"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":143,"searchDepth":312,"depth":312,"links":76887},[76888,76898,76910,76927,76934,76942],{"id":53633,"depth":312,"text":53634,"children":76889},[76890,76891,76892,76893,76894,76895,76896,76897],{"id":53637,"depth":1454,"text":53638},{"id":53670,"depth":1454,"text":53671},{"id":53709,"depth":1454,"text":53710},{"id":53867,"depth":1454,"text":53868},{"id":53915,"depth":1454,"text":53916},{"id":54052,"depth":1454,"text":54053},{"id":54374,"depth":1454,"text":54375},{"id":57362,"depth":1454,"text":57363},{"id":57390,"depth":312,"text":57391,"children":76899},[76900,76901,76902,76903,76904,76905,76906,76907,76908,76909],{"id":57394,"depth":1454,"text":57395},{"id":57417,"depth":1454,"text":57418},{"id":58332,"depth":1454,"text":58333},{"id":59022,"depth":1454,"text":59023},{"id":59304,"depth":1454,"text":59305},{"id":63465,"depth":1454,"text":63466},{"id":63635,"depth":1454,"text":63636},{"id":63763,"depth":1454,"text":63764},{"id":63788,"depth":1454,"text":63789},{"id":65177,"depth":1454,"text":65178},{"id":66330,"depth":312,"text":66331,"children":76911},[76912,76913,76914,76915,76916,76917,76918,76919,76920,76921,76922,76923,76924,76925,76926],{"id":66334,"depth":1454,"text":66335},{"id":66988,"depth":1454,"text":66989},{"id":68683,"depth":1454,"text":68684},{"id":68724,"depth":1454,"text":68725},{"id":68766,"depth":1454,"text":68767},{"id":68780,"depth":1454,"text":68781},{"id":68829,"depth":1454,"text":68830},{"id":68841,"depth":1454,"text":68842},{"id":68856,"depth":1454,"text":68857},{"id":68892,"depth":1454,"text":68893},{"id":68973,"depth":1454,"text":68974},{"id":69101,"depth":1454,"text":69102},{"id":69113,"depth":1454,"text":69114},{"id":69132,"depth":1454,"text":69133},{"id":71243,"depth":1454,"text":71244},{"id":71262,"depth":312,"text":71263,"children":76928},[76929,76930,76931,76932,76933],{"id":71283,"depth":1454,"text":71284},{"id":71303,"depth":1454,"text":71304},{"id":71352,"depth":1454,"text":71353},{"id":71477,"depth":1454,"text":71478},{"id":71658,"depth":1454,"text":71659},{"id":71676,"depth":312,"text":71677,"children":76935},[76936,76937,76938,76939,76940,76941],{"id":71691,"depth":1454,"text":71692},{"id":71750,"depth":1454,"text":71751},{"id":71774,"depth":1454,"text":71775},{"id":72094,"depth":1454,"text":72095},{"id":72126,"depth":1454,"text":72127},{"id":72149,"depth":1454,"text":72150},{"id":75217,"depth":312,"text":75218,"children":76943},[76944,76945],{"id":75251,"depth":1454,"text":75252},{"id":75290,"depth":1454,"text":75291},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53605,"description":321},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76952,"title":76953,"body":76954,"description":321,"extension":322,"meta":93090,"navigation":324,"path":93091,"seo":93092,"stem":93093,"__hash__":93094},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76955,"toc":93026},[76956,76959,76962,76966,76970,76975,76980,76991,76995,77000,77003,77007,77010,77015,77019,77023,77026,77031,77034,77038,77041,77049,77052,77056,77061,77066,77069,77073,77078,77083,77086,77090,77095,77098,77103,77106,77111,77114,77119,77124,77127,77130,77134,77139,77144,77147,77151,77155,77158,77161,77164,77168,77172,77177,77182,77185,77189,77194,77199,77202,77205,77208,77211,77214,77217,77220,77223,77226,77231,77235,77240,77245,77248,77251,77254,77257,77260,77263,77266,77269,77273,77277,77280,77283,77286,77291,77293,77296,77299,77302,77305,77308,77311,77314,77317,77320,77323,77326,77329,77332,77337,77342,77347,77350,77354,77357,77362,77366,77368,77379,77384,77485,77488,77491,77494,77497,77499,77502,77505,77508,77510,77513,77516,77519,77522,77525,77527,77530,77533,77536,77539,77542,77545,77547,77550,77552,77554,77557,77561,77565,77568,77571,77574,77577,77580,77583,77586,77589,77592,77597,77717,77720,77723,77728,77731,77734,77737,77740,77745,77748,77751,77754,77757,77762,77765,77865,77930,78004,78008,78011,78014,78018,78021,78035,78064,78067,78070,78073,78076,78079,78082,78085,78087,78090,78093,78096,78099,78103,78108,78112,78117,78192,78195,78378,78381,78384,78387,78390,78393,78395,78398,78401,78404,78407,78410,78413,78415,78419,78422,78427,78430,78433,78436,78439,78441,78446,78449,78452,78455,78458,78460,78465,78468,78471,78473,78475,78478,78482,78485,78488,78493,78496,78499,78502,78552,78557,78561,78566,78569,78638,78641,78650,78654,78659,78662,78665,78673,78676,78693,80495,80499,80503,80508,80511,80515,80521,80527,80679,80684,80689,80692,80695,80698,80701,80704,80707,80710,80713,80716,80719,80722,80725,80730,80734,80737,80748,80752,80757,80760,80763,80766,80769,80772,80774,80777,80780,80783,80786,80788,80805,80808,80812,80815,80820,80825,80828,80831,80835,80838,80841,80850,80853,80857,80860,80865,80870,80937,80941,80944,80947,80952,80957,81043,81048,81052,81055,81058,81073,81076,81081,81085,81090,81199,81202,81213,81363,81367,81372,81481,81485,81490,81495,81500,81503,81510,81530,81566,81730,81735,81738,81743,81750,81753,81756,81759,81818,81874,81930,81934,81939,82254,82257,82261,82264,82269,82378,82383,82387,82392,82396,82467,82471,82473,82476,82479,82517,82793,82797,82814,82880,82914,82918,82921,82926,82955,82962,82971,82976,82991,82996,83005,83008,83145,83149,83211,83215,83220,83465,83469,83474,83477,83480,83483,83486,83490,83495,85076,85080,85084,85090,85093,85098,85102,85105,85110,85113,85124,85128,85133,85137,85142,85147,85150,85155,85159,85163,85166,85171,85176,85179,85182,85185,85307,85312,85414,85417,85420,85424,85429,85601,85606,85610,85613,85618,85684,85689,85692,85823,85826,85831,85834,85837,85928,85933,85936,85939,85942,85945,85950,85955,85958,85963,85968,85973,85977,85980,85983,85988,85993,85998,86003,86057,86060,86063,86068,86071,86074,86079,86084,86089,86093,86098,86112,86117,86120,86125,86129,86134,86139,86144,86149,86154,86159,86164,86169,86172,86176,86181,86184,86187,86190,86195,86200,86203,86206,86210,86213,86216,86221,86226,86231,86236,86239,86244,86249,86310,86315,86318,86323,87564,87569,87573,87577,87582,87585,87590,87595,87598,87603,87605,87610,87614,87617,87620,87631,87635,87640,87645,87700,87705,87710,87715,87926,87931,87935,87940,87943,87945,87948,87951,88398,88403,88410,88416,88419,88422,88686,88691,88695,88960,88965,88969,88974,88979,88984,88989,89320,89323,89328,89333,89336,89340,89344,89349,89354,89359,89364,89369,89374,89378,89381,89386,89391,89394,89468,89473,89478,89483,89485,89488,89858,89863,89868,89873,89876,89879,89981,89986,89991,90094,90098,90103,90107,90111,90116,90121,90124,90129,90132,90135,90528,90533,90536,90539,90542,90545,91065,91069,91074,91079,91084,91087,91092,91095,91098,91480,91485,91487,91489,91492,91495,92007,92011,92072,92075,92078,92081,92085,92088,92093,92098,93023],[10,76957,76953],{"id":76958},"_4js进阶",[19,76960,76961],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,76963,76965],{"id":76964},"_41-作用域","4.1 作用域",[367,76967,76969],{"id":76968},"_411-局部作用域","4.1.1 局部作用域",[19,76971,76972],{},[29,76973],{"alt":143,"src":76974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,76976,76977],{},[29,76978],{"alt":143,"src":76979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1406,76981,76982,76985,76988],{},[353,76983,76984],{},"函数作用域在函数内部",[353,76986,76987],{},"块级作用域在{}",[353,76989,76990],{},"对象的那个{}不是作用域，不是块作用域",[367,76992,76994],{"id":76993},"_412-全局作用域","4.1.2 全局作用域",[19,76996,76997],{},[29,76998],{"alt":143,"src":76999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,77001,77002],{},"window.a=10不要这样写",[367,77004,77006],{"id":77005},"_413-作用域链","4.1.3 作用域链",[19,77008,77009],{},"变量查找机制",[19,77011,77012],{},[29,77013],{"alt":143,"src":77014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,77016,77018],{"id":77017},"_42-垃圾回收机制","4.2 垃圾回收机制",[367,77020,77022],{"id":77021},"_421-大体介绍","4.2.1 大体介绍",[19,77024,77025],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,77027,77028],{},[29,77029],{"alt":143,"src":77030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,77032,77033],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[367,77035,77037],{"id":77036},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,77039,77040],{},"堆栈空间分配区别：",[350,77042,77043,77046],{},[353,77044,77045],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[353,77047,77048],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,77050,77051],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22271,77053,77055],{"id":77054},"_4221-引用计数","4.2.2.1 引用计数",[19,77057,77058],{},[29,77059],{"alt":143,"src":77060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,77062,77063],{},[29,77064],{"alt":143,"src":77065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,77067,77068],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22271,77070,77072],{"id":77071},"_4222-标记清除法","4.2.2.2 标记清除法",[19,77074,77075],{},[29,77076],{"alt":143,"src":77077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,77079,77080],{},[29,77081],{"alt":143,"src":77082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,77084,77085],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,77087,77089],{"id":77088},"_43-闭包","4.3 闭包",[19,77091,77092],{},[29,77093],{"alt":143,"src":77094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,77096,77097],{},"闭包：内层函数+外层函数的变量",[19,77099,77100],{},[29,77101],{"alt":143,"src":77102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,77104,77105],{},"closure就是闭包",[19,77107,77108],{},[29,77109],{"alt":143,"src":77110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,77112,77113],{},"内层函数必须包含外层函数的变量才是闭包",[19,77115,77116],{},[29,77117],{"alt":143,"src":77118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,77120,77121],{},[29,77122],{"alt":143,"src":77123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,77125,77126],{},"闭包可能会引起内存泄漏",[19,77128,77129],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,77131,77133],{"id":77132},"_44-变量提升","4.4 变量提升",[19,77135,77136],{},[29,77137],{"alt":143,"src":77138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,77140,77141],{},[29,77142],{"alt":143,"src":77143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,77145,77146],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,77148,77150],{"id":77149},"_45-函数进阶","4.5 函数进阶",[367,77152,77154],{"id":77153},"_451-函数提升","4.5.1 函数提升",[19,77156,77157],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,77159,77160],{},"只提升函数声明，不提升函数调用",[52086,77162,77163],{},"\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",[367,77165,77167],{"id":77166},"_452-函数参数","4.5.2 函数参数",[22271,77169,77171],{"id":77170},"_4521-动态参数","4.5.2.1 动态参数",[19,77173,77174],{},[29,77175],{"alt":143,"src":77176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,77178,77179],{},[29,77180],{"alt":143,"src":77181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,77183,77184],{},"箭头函数里边没有arguments",[22271,77186,77188],{"id":77187},"_4522-剩余参数","4.5.2.2 剩余参数",[19,77190,77191],{},[29,77192],{"alt":143,"src":77193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,77195,77196],{},[29,77197],{"alt":143,"src":77198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,77200,77201],{},"剩余参数使用的时候不需要写...",[19,77203,77204],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,77206,77207],{},"  function getSum(a,b,...arr) {",[19,77209,77210],{},"  console.log(11)",[19,77212,77213],{},"  }",[19,77215,77216],{},"  getSum(1,2,3,4)",[19,77218,77219],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,77221,77222],{},"  getSum(1,2)",[19,77224,77225],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,77227,77228],{},[29,77229],{"alt":143,"src":77230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22271,77232,77234],{"id":77233},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,77236,77237],{},[29,77238],{"alt":143,"src":77239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,77241,77242],{},[29,77243],{"alt":143,"src":77244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,77246,77247],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,77249,77250],{},"展开运算符可以用于数组之间的合并：",[19,77252,77253],{},"const arr1 = [1, 2, 3]",[19,77255,77256],{},"const arr2 = [3, 4, 5]",[19,77258,77259],{},"const arr = [...arr1, ...arr2]",[19,77261,77262],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,77264,77265],{},"剩余参数：函数参数使用，得到真数组",[19,77267,77268],{},"展开运算符：数组中使用，数组展开",[367,77270,77272],{"id":77271},"_453-箭头函数","4.5.3 箭头函数",[22271,77274,77276],{"id":77275},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,77278,77279],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,77281,77282],{},"它不是万能的！！！",[19,77284,77285],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,77287,77288],{},[29,77289],{"alt":143,"src":77290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,77292,248],{},[19,77294,77295],{},"① 只有一个形参的时候，可以省略小括号：",[19,77297,77298],{},"const fn=x=>{console.log(x)}",[19,77300,77301],{},"② 只有一行代码时可以省略大括号：",[19,77303,77304],{},"const fn=x=>console.log(11)",[19,77306,77307],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,77309,77310],{},"const fn=x=>x+x",[19,77312,77313],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,77315,77316],{},"⑤ 阻止表单默认提交：",[19,77318,77319],{},"const form = document.querySelector('form')",[19,77321,77322],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,77324,77325],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,77327,77328],{},"const fn=uname=>({uname:uname})",[19,77330,77331],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,77333,77334],{},[29,77335],{"alt":143,"src":77336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,77338,77339],{},[29,77340],{"alt":143,"src":77341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,77343,77344],{},[29,77345],{"alt":143,"src":77346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,77348,77349],{},"一定不要忘记用()，有()就理解为自带return",[22271,77351,77353],{"id":77352},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,77355,77356],{},"箭头函数是没有动态参数的arguments",[19,77358,77359],{},[29,77360],{"alt":143,"src":77361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22271,77363,77365],{"id":77364},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,77367,11606],{},[350,77369,77370,77373,77376],{},[353,77371,77372],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[353,77374,77375],{},"事件回调函数使用箭头函数时，this 为全局的 window",[353,77377,77378],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,77380,77381],{},[29,77382],{"alt":143,"src":77383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[138,77385,77387],{"className":53340,"code":77386,"language":53342,"meta":143,"style":143},"  \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",[51,77388,77389,77397,77402,77407,77412,77417,77422,77426,77431,77435,77439,77444,77449,77454,77458,77462,77467,77472,77477],{"__ignoreMap":143},[147,77390,77391,77393,77395],{"class":149,"line":150},[147,77392,52417],{"class":157},[147,77394,52086],{"class":153},[147,77396,51580],{"class":157},[147,77398,77399],{"class":149,"line":312},[147,77400,77401],{"class":157},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[147,77403,77404],{"class":149,"line":1454},[147,77405,77406],{"class":157},"    console.log(this) \u002F\u002F指向window\n",[147,77408,77409],{"class":149,"line":1469},[147,77410,77411],{"class":157},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[147,77413,77414],{"class":149,"line":1475},[147,77415,77416],{"class":157},"    function fn() {\n",[147,77418,77419],{"class":149,"line":1489},[147,77420,77421],{"class":157},"      console.log(this)  \u002F\u002F指向window\n",[147,77423,77424],{"class":149,"line":1495},[147,77425,2461],{"class":157},[147,77427,77428],{"class":149,"line":1586},[147,77429,77430],{"class":157},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[147,77432,77433],{"class":149,"line":1592},[147,77434,2674],{"emptyLinePlaceholder":324},[147,77436,77437],{"class":149,"line":1604},[147,77438,71796],{"class":157},[147,77440,77441],{"class":149,"line":1886},[147,77442,77443],{"class":157},"      name: 'andy',\n",[147,77445,77446],{"class":149,"line":1891},[147,77447,77448],{"class":157},"      sayHai: function () {\n",[147,77450,77451],{"class":149,"line":1897},[147,77452,77453],{"class":157},"        console.log(this)\n",[147,77455,77456],{"class":149,"line":1902},[147,77457,52671],{"class":157},[147,77459,77460],{"class":149,"line":1916},[147,77461,2461],{"class":157},[147,77463,77464],{"class":149,"line":1921},[147,77465,77466],{"class":157},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[147,77468,77469],{"class":149,"line":1927},[147,77470,77471],{"class":157},"    \u002F\u002F 2.箭头函数的this\n",[147,77473,77474],{"class":149,"line":1948},[147,77475,77476],{"class":157},"    const fn = () => console.log(this)\n",[147,77478,77479,77481,77483],{"class":149,"line":1953},[147,77480,52690],{"class":157},[147,77482,52086],{"class":153},[147,77484,51580],{"class":157},[19,77486,77487],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,77489,77490],{},"const fn = () => console.log(this)",[19,77492,77493],{},"fn() \u002F\u002F指向window",[19,77495,77496],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,77498,205],{},[19,77500,77501],{},"const obj = {",[19,77503,77504],{},"uname: 'pink老师',",[19,77506,77507],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,77509,1345],{},[19,77511,77512],{},"调用对象里边的函数",[19,77514,77515],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,77517,77518],{},"obj.sayHai()",[19,77520,77521],{},"②",[19,77523,77524],{},"const obj1 = {",[19,77526,77504],{},[19,77528,77529],{},"sayHai: function () {",[19,77531,77532],{},"let i = 10",[19,77534,77535],{},"const count = () => {",[19,77537,77538],{},"console.log(this)",[19,77540,77541],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,77543,77544],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,77546,1345],{},[19,77548,77549],{},"count()",[19,77551,1345],{},[19,77553,1345],{},[19,77555,77556],{},"obj1.sayHai()",[14,77558,77560],{"id":77559},"_46-解构赋值","4.6 解构赋值",[367,77562,77564],{"id":77563},"_461-数组解构","4.6.1 数组解构",[19,77566,77567],{},"以前要是使用数组中的值的话：",[19,77569,77570],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,77572,77573],{},"const arr=[100,60,80]",[19,77575,77576],{},"const max=arr[0]",[19,77578,77579],{},"const min=arr[1]",[19,77581,77582],{},"const avg=arr[2]",[19,77584,77585],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,77587,77588],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,77590,77591],{},"这个写法就类似于上边的那种用很多const的方法",[19,77593,77594],{},[29,77595],{"alt":143,"src":77596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[138,77598,77600],{"className":50907,"code":77599,"language":50909,"meta":143,"style":143},"①变量之间交换值:\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",[51,77601,77602,77607,77612,77617,77622,77627,77631,77635,77640,77644,77649,77654,77658,77663,77668,77679,77689,77694,77699,77704,77708,77712],{"__ignoreMap":143},[147,77603,77604],{"class":149,"line":150},[147,77605,77606],{"class":157},"①变量之间交换值:\n",[147,77608,77609],{"class":149,"line":312},[147,77610,77611],{"class":157},"let a=1\n",[147,77613,77614],{"class":149,"line":1454},[147,77615,77616],{"class":157},"let b=2;\n",[147,77618,77619],{"class":149,"line":1469},[147,77620,77621],{"class":157},"必须加这行代码，不然就会报错\n",[147,77623,77624],{"class":149,"line":1475},[147,77625,77626],{"class":157},"[b,a]=[a,b]\n",[147,77628,77629],{"class":149,"line":1489},[147,77630,2674],{"emptyLinePlaceholder":324},[147,77632,77633],{"class":149,"line":1495},[147,77634,2674],{"emptyLinePlaceholder":324},[147,77636,77637],{"class":149,"line":1586},[147,77638,77639],{"class":157},"可以写成下面的方式：\n",[147,77641,77642],{"class":149,"line":1592},[147,77643,77611],{"class":157},[147,77645,77646],{"class":149,"line":1604},[147,77647,77648],{"class":157},"let b=2\n",[147,77650,77651],{"class":149,"line":1886},[147,77652,77653],{"class":157},";[b,a]=[a,b]\n",[147,77655,77656],{"class":149,"line":1891},[147,77657,2674],{"emptyLinePlaceholder":324},[147,77659,77660],{"class":149,"line":1897},[147,77661,77662],{"class":157},"②排序\n",[147,77664,77665],{"class":149,"line":1902},[147,77666,77667],{"class":157},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[147,77669,77670,77673,77676],{"class":149,"line":1916},[147,77671,77672],{"class":157},"for (let i = 0; i ",[147,77674,1309],{"class":77675},"s7hpK",[147,77677,77678],{"class":157}," arr1.length; i++) {\n",[147,77680,77681,77684,77686],{"class":149,"line":1921},[147,77682,77683],{"class":157},"   for (let j = 0; j ",[147,77685,1309],{"class":77675},[147,77687,77688],{"class":157}," arr1.length - 1; j++) {\n",[147,77690,77691],{"class":149,"line":1927},[147,77692,77693],{"class":157},"      if (arr1[j] > arr1[j + 1]) {\n",[147,77695,77696],{"class":149,"line":1948},[147,77697,77698],{"class":157},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[147,77700,77701],{"class":149,"line":1953},[147,77702,77703],{"class":157},"       }\n",[147,77705,77706],{"class":149,"line":1967},[147,77707,4583],{"class":157},[147,77709,77710],{"class":149,"line":1972},[147,77711,1839],{"class":157},[147,77713,77714],{"class":149,"line":2001},[147,77715,77716],{"class":157},"console.log(arr1)\n",[19,77718,77719],{},"数组解构的细节：",[19,77721,77722],{},"①变量多，单元值少",[19,77724,77725],{},[29,77726],{"alt":143,"src":77727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,77729,77730],{},"防止出现undefined的方法：",[19,77732,77733],{},"const [a=0,b=0] =[1]",[19,77735,77736],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,77738,77739],{},"②变量少，单元值多",[19,77741,77742],{},[29,77743],{"alt":143,"src":77744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,77746,77747],{},"此时可以使用剩余参数来接收多余的值",[19,77749,77750],{},"const [a,b,...c]=[1,2,3,4]",[19,77752,77753],{},"console.log(c) 输出[3,4]",[19,77755,77756],{},"③可以按需导入，忽略某些返回值",[19,77758,77759],{},[29,77760],{"alt":143,"src":77761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,77763,77764],{},"④支持多维数组的结构",[138,77766,77770],{"className":77767,"code":77768,"language":77769,"meta":143,"style":143},"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",[51,77771,77772,77800,77816,77831,77846],{"__ignoreMap":143},[147,77773,77774,77776,77778,77780,77782,77784,77786,77788,77791,77793,77795,77797],{"class":149,"line":150},[147,77775,7066],{"class":397},[147,77777,52106],{"class":157},[147,77779,445],{"class":397},[147,77781,52499],{"class":157},[147,77783,616],{"class":448},[147,77785,12709],{"class":157},[147,77787,477],{"class":448},[147,77789,77790],{"class":157},", [",[147,77792,471],{"class":448},[147,77794,12709],{"class":157},[147,77796,692],{"class":448},[147,77798,77799],{"class":157},"]]\n",[147,77801,77802,77805,77807,77809,77811,77813],{"class":149,"line":312},[147,77803,77804],{"class":157},"console.",[147,77806,58520],{"class":2237},[147,77808,4125],{"class":157},[147,77810,590],{"class":448},[147,77812,4490],{"class":157},[147,77814,77815],{"class":458},"  \u002F\u002F1\n",[147,77817,77818,77820,77822,77824,77826,77828],{"class":149,"line":1454},[147,77819,77804],{"class":157},[147,77821,58520],{"class":2237},[147,77823,4125],{"class":157},[147,77825,616],{"class":448},[147,77827,4490],{"class":157},[147,77829,77830],{"class":458},"  \u002F\u002F2\n",[147,77832,77833,77835,77837,77839,77841,77843],{"class":149,"line":1469},[147,77834,77804],{"class":157},[147,77836,58520],{"class":2237},[147,77838,4125],{"class":157},[147,77840,477],{"class":448},[147,77842,4490],{"class":157},[147,77844,77845],{"class":458},"  \u002F\u002F[3,4]\n",[147,77847,77848,77850,77852,77854,77856,77858,77860,77862],{"class":149,"line":1475},[147,77849,77804],{"class":157},[147,77851,58520],{"class":2237},[147,77853,4125],{"class":157},[147,77855,477],{"class":448},[147,77857,5175],{"class":157},[147,77859,590],{"class":448},[147,77861,4490],{"class":157},[147,77863,77864],{"class":458},"  \u002F\u002F3\n",[138,77866,77868],{"className":77767,"code":77867,"language":77769,"meta":143,"style":143},"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",[51,77869,77870,77897,77908,77919],{"__ignoreMap":143},[147,77871,77872,77874,77877,77879,77881,77883,77885,77887,77889,77891,77893,77895],{"class":149,"line":150},[147,77873,7066],{"class":397},[147,77875,77876],{"class":157}," [a, b, c] ",[147,77878,445],{"class":397},[147,77880,52499],{"class":157},[147,77882,616],{"class":448},[147,77884,12709],{"class":157},[147,77886,477],{"class":448},[147,77888,77790],{"class":157},[147,77890,471],{"class":448},[147,77892,12709],{"class":157},[147,77894,692],{"class":448},[147,77896,77799],{"class":157},[147,77898,77899,77901,77903,77906],{"class":149,"line":312},[147,77900,77804],{"class":157},[147,77902,58520],{"class":2237},[147,77904,77905],{"class":157},"(a)",[147,77907,77815],{"class":458},[147,77909,77910,77912,77914,77917],{"class":149,"line":1454},[147,77911,77804],{"class":157},[147,77913,58520],{"class":2237},[147,77915,77916],{"class":157},"(b)",[147,77918,77830],{"class":458},[147,77920,77921,77923,77925,77928],{"class":149,"line":1469},[147,77922,77804],{"class":157},[147,77924,58520],{"class":2237},[147,77926,77927],{"class":157},"(c)",[147,77929,77845],{"class":458},[138,77931,77933],{"className":77767,"code":77932,"language":77769,"meta":143,"style":143},"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",[51,77934,77935,77962,77972,77982,77992],{"__ignoreMap":143},[147,77936,77937,77939,77942,77944,77946,77948,77950,77952,77954,77956,77958,77960],{"class":149,"line":150},[147,77938,7066],{"class":397},[147,77940,77941],{"class":157}," [a, b, [c, d]] ",[147,77943,445],{"class":397},[147,77945,52499],{"class":157},[147,77947,616],{"class":448},[147,77949,12709],{"class":157},[147,77951,477],{"class":448},[147,77953,77790],{"class":157},[147,77955,471],{"class":448},[147,77957,12709],{"class":157},[147,77959,692],{"class":448},[147,77961,77799],{"class":157},[147,77963,77964,77966,77968,77970],{"class":149,"line":312},[147,77965,77804],{"class":157},[147,77967,58520],{"class":2237},[147,77969,77905],{"class":157},[147,77971,77815],{"class":458},[147,77973,77974,77976,77978,77980],{"class":149,"line":1454},[147,77975,77804],{"class":157},[147,77977,58520],{"class":2237},[147,77979,77916],{"class":157},[147,77981,77830],{"class":458},[147,77983,77984,77986,77988,77990],{"class":149,"line":1469},[147,77985,77804],{"class":157},[147,77987,58520],{"class":2237},[147,77989,77927],{"class":157},[147,77991,77864],{"class":458},[147,77993,77994,77996,77998,78001],{"class":149,"line":1475},[147,77995,77804],{"class":157},[147,77997,58520],{"class":2237},[147,77999,78000],{"class":157},"(d)",[147,78002,78003],{"class":458},"  \u002F\u002F4\n",[367,78005,78007],{"id":78006},"_462-对象解构","4.6.2 对象解构",[19,78009,78010],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,78012,78013],{},"用的非常非常多！！！！！！",[22271,78015,78017],{"id":78016},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,78019,78020],{},"基本语法：",[350,78022,78023,78026,78029,78032],{},[353,78024,78025],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[353,78027,78028],{},"对象属性的值将被赋值给与属性名相同的变量",[353,78030,78031],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[353,78033,78034],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[138,78036,78038],{"className":50907,"code":78037,"language":50909,"meta":143,"style":143},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[51,78039,78040,78045,78050,78055,78059],{"__ignoreMap":143},[147,78041,78042],{"class":149,"line":150},[147,78043,78044],{"class":157},"const obj = {\n",[147,78046,78047],{"class":149,"line":312},[147,78048,78049],{"class":157},"   uname: 'pink老师',\n",[147,78051,78052],{"class":149,"line":1454},[147,78053,78054],{"class":157},"   age: 18,\n",[147,78056,78057],{"class":149,"line":1469},[147,78058,1839],{"class":157},[147,78060,78061],{"class":149,"line":1475},[147,78062,78063],{"class":157},"const { uname, age } = obj\n",[19,78065,78066],{},"上方代码这样写等价于：",[19,78068,78069],{},"const uname等价于obj.uname",[19,78071,78072],{},"变量名可以重新改名：",[19,78074,78075],{},"const uname='red老师'",[19,78077,78078],{},"const user={",[19,78080,78081],{},"  uname:'pink老师',",[19,78083,78084],{},"  age:18",[19,78086,1345],{},[19,78088,78089],{},"const {uname,age}=user",[19,78091,78092],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,78094,78095],{},"const {旧变量名：新变量名}=对象",[19,78097,78098],{},"const {uname:username,age}=user",[22271,78100,78102],{"id":78101},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,78104,78105],{},[29,78106],{"alt":143,"src":78107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22271,78109,78111],{"id":78110},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,78113,78114],{},[29,78115],{"alt":143,"src":78116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[138,78118,78120],{"className":53340,"code":78119,"language":53342,"meta":143,"style":143},"  \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",[51,78121,78122,78130,78135,78140,78145,78150,78155,78160,78165,78170,78174,78179,78184],{"__ignoreMap":143},[147,78123,78124,78126,78128],{"class":149,"line":150},[147,78125,52417],{"class":157},[147,78127,52086],{"class":153},[147,78129,51580],{"class":157},[147,78131,78132],{"class":149,"line":312},[147,78133,78134],{"class":157},"    const pig = {\n",[147,78136,78137],{"class":149,"line":1454},[147,78138,78139],{"class":157},"      name: '佩奇',\n",[147,78141,78142],{"class":149,"line":1469},[147,78143,78144],{"class":157},"      family: {\n",[147,78146,78147],{"class":149,"line":1475},[147,78148,78149],{"class":157},"        mother: '猪妈妈',\n",[147,78151,78152],{"class":149,"line":1489},[147,78153,78154],{"class":157},"        father: '猪爸爸',\n",[147,78156,78157],{"class":149,"line":1495},[147,78158,78159],{"class":157},"        sister: '乔治'\n",[147,78161,78162],{"class":149,"line":1586},[147,78163,78164],{"class":157},"      },\n",[147,78166,78167],{"class":149,"line":1592},[147,78168,78169],{"class":157},"      age: 6\n",[147,78171,78172],{"class":149,"line":1604},[147,78173,2461],{"class":157},[147,78175,78176],{"class":149,"line":1886},[147,78177,78178],{"class":157},"    \u002F\u002F 多级对象解构\n",[147,78180,78181],{"class":149,"line":1891},[147,78182,78183],{"class":157},"    const { name, family: { mother, father, sister }, age } = pig\n",[147,78185,78186,78188,78190],{"class":149,"line":1897},[147,78187,52690],{"class":157},[147,78189,52086],{"class":153},[147,78191,51580],{"class":157},[19,78193,78194],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[138,78196,78199],{"className":78197,"code":78198,"language":76720,"meta":143,"style":143},"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",[51,78200,78201,78206,78217,78229,78241,78250,78254,78265,78277,78287,78292,78296,78306,78317,78326,78330,78334,78345,78356,78365,78369,78374],{"__ignoreMap":143},[147,78202,78203],{"class":149,"line":150},[147,78204,78205],{"class":458},"    \u002F\u002F 这是后台传递过来的数据\n",[147,78207,78208,78210,78213,78215],{"class":149,"line":312},[147,78209,11495],{"class":397},[147,78211,78212],{"class":157}," msg ",[147,78214,445],{"class":397},[147,78216,15845],{"class":157},[147,78218,78219,78222,78224,78227],{"class":149,"line":1454},[147,78220,78221],{"class":504},"      \"code\"",[147,78223,1258],{"class":397},[147,78225,78226],{"class":448}," 200",[147,78228,31740],{"class":157},[147,78230,78231,78234,78236,78239],{"class":149,"line":1469},[147,78232,78233],{"class":504},"      \"msg\"",[147,78235,1258],{"class":397},[147,78237,78238],{"class":504}," \"获取新闻列表成功\"",[147,78240,31740],{"class":157},[147,78242,78243,78246,78248],{"class":149,"line":1475},[147,78244,78245],{"class":504},"      \"data\"",[147,78247,1258],{"class":397},[147,78249,55720],{"class":157},[147,78251,78252],{"class":149,"line":1489},[147,78253,2784],{"class":157},[147,78255,78256,78259,78261,78263],{"class":149,"line":1495},[147,78257,78258],{"class":504},"          \"id\"",[147,78260,1258],{"class":397},[147,78262,25392],{"class":448},[147,78264,31740],{"class":157},[147,78266,78267,78270,78272,78275],{"class":149,"line":1586},[147,78268,78269],{"class":504},"          \"title\"",[147,78271,1258],{"class":397},[147,78273,78274],{"class":504}," \"5G商用自己，三大运用商收入下降\"",[147,78276,31740],{"class":157},[147,78278,78279,78282,78284],{"class":149,"line":1592},[147,78280,78281],{"class":504},"          \"count\"",[147,78283,1258],{"class":397},[147,78285,78286],{"class":448}," 58\n",[147,78288,78289],{"class":149,"line":1604},[147,78290,78291],{"class":157},"        },\n",[147,78293,78294],{"class":149,"line":1886},[147,78295,2784],{"class":157},[147,78297,78298,78300,78302,78304],{"class":149,"line":1891},[147,78299,78258],{"class":504},[147,78301,1258],{"class":397},[147,78303,15028],{"class":448},[147,78305,31740],{"class":157},[147,78307,78308,78310,78312,78315],{"class":149,"line":1897},[147,78309,78269],{"class":504},[147,78311,1258],{"class":397},[147,78313,78314],{"class":504}," \"国际媒体头条速览\"",[147,78316,31740],{"class":157},[147,78318,78319,78321,78323],{"class":149,"line":1902},[147,78320,78281],{"class":504},[147,78322,1258],{"class":397},[147,78324,78325],{"class":448}," 56\n",[147,78327,78328],{"class":149,"line":1916},[147,78329,78291],{"class":157},[147,78331,78332],{"class":149,"line":1921},[147,78333,2784],{"class":157},[147,78335,78336,78338,78340,78343],{"class":149,"line":1927},[147,78337,78258],{"class":504},[147,78339,1258],{"class":397},[147,78341,78342],{"class":448}," 3",[147,78344,31740],{"class":157},[147,78346,78347,78349,78351,78354],{"class":149,"line":1948},[147,78348,78269],{"class":504},[147,78350,1258],{"class":397},[147,78352,78353],{"class":504}," \"乌克兰和俄罗斯持续冲突\"",[147,78355,31740],{"class":157},[147,78357,78358,78360,78362],{"class":149,"line":1953},[147,78359,78281],{"class":504},[147,78361,1258],{"class":397},[147,78363,78364],{"class":448}," 1669\n",[147,78366,78367],{"class":149,"line":1967},[147,78368,78291],{"class":157},[147,78370,78371],{"class":149,"line":1972},[147,78372,78373],{"class":157},"      ]\n",[147,78375,78376],{"class":149,"line":2001},[147,78377,2461],{"class":157},[19,78379,78380],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,78382,78383],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,78385,78386],{},"\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,78388,78389],{},"function({data}) {",[19,78391,78392],{},"console.log(data)",[19,78394,1345],{},[19,78396,78397],{},"render(msg)",[19,78399,78400],{},"实参传递给形参的时候解构了",[19,78402,78403],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,78405,78406],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,78408,78409],{},"function render({data:mydata}) {",[19,78411,78412],{},"  console.log(data)",[19,78414,1345],{},[367,78416,78418],{"id":78417},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,78420,78421],{},"有两种情况：一个是数组结构，一个是立即执行函数",[350,78423,78424],{},[353,78425,78426],{},"如果对一个数组进行遍历，有两种方式：",[19,78428,78429],{},"①法1",[19,78431,78432],{},"const arr=[1,2,3]",[19,78434,78435],{},"arr.map(function(item,index) {",[19,78437,78438],{},"  console.log(item)",[19,78440,52737],{},[19,78442,78443],{},[29,78444],{"alt":143,"src":78445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,78447,78448],{},"②法2",[19,78450,78451],{},"const str='pink'",[19,78453,78454],{},"[1,2,3].map(function(item,index) {",[19,78456,78457],{},"console.log(item)",[19,78459,52737],{},[19,78461,78462],{},[29,78463],{"alt":143,"src":78464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,78466,78467],{},"此时会报错",[19,78469,78470],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,78472,78457],{},[19,78474,52737],{},[19,78476,78477],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,78479,78481],{"id":78480},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,78483,78484],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,78486,78487],{},"可以理解为加强版的for循环",[19,78489,78490],{},[29,78491],{"alt":143,"src":78492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,78494,78495],{},"里边不写return，不返回数组，只遍历不返回",[19,78497,78498],{},"map是返回数组",[19,78500,78501],{},"forEach主要用于遍历数组对象",[138,78503,78505],{"className":53340,"code":78504,"language":53342,"meta":143,"style":143},"  \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",[51,78506,78507,78515,78520,78525,78530,78535,78539,78544],{"__ignoreMap":143},[147,78508,78509,78511,78513],{"class":149,"line":150},[147,78510,52417],{"class":157},[147,78512,52086],{"class":153},[147,78514,51580],{"class":157},[147,78516,78517],{"class":149,"line":312},[147,78518,78519],{"class":157},"    const arr = ['red', 'green', 'pink']\n",[147,78521,78522],{"class":149,"line":1454},[147,78523,78524],{"class":157},"    const result = arr.forEach(function (item, index) {\n",[147,78526,78527],{"class":149,"line":1469},[147,78528,78529],{"class":157},"      console.log(item)\n",[147,78531,78532],{"class":149,"line":1475},[147,78533,78534],{"class":157},"      console.log(index)\n",[147,78536,78537],{"class":149,"line":1489},[147,78538,33735],{"class":157},[147,78540,78541],{"class":149,"line":1495},[147,78542,78543],{"class":157},"    console.log(result)\n",[147,78545,78546,78548,78550],{"class":149,"line":1586},[147,78547,52690],{"class":157},[147,78549,52086],{"class":153},[147,78551,51580],{"class":157},[19,78553,78554],{},[29,78555],{"alt":143,"src":78556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,78558,78560],{"id":78559},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,78562,78563],{},[29,78564],{"alt":143,"src":78565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,78567,78568],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[138,78570,78572],{"className":53340,"code":78571,"language":53342,"meta":143,"style":143},"\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",[51,78573,78574,78582,78590,78595,78600,78604,78608,78613,78617,78622,78630],{"__ignoreMap":143},[147,78575,78576,78578,78580],{"class":149,"line":150},[147,78577,1309],{"class":157},[147,78579,52073],{"class":153},[147,78581,51580],{"class":157},[147,78583,78584,78586,78588],{"class":149,"line":312},[147,78585,52417],{"class":157},[147,78587,52086],{"class":153},[147,78589,51580],{"class":157},[147,78591,78592],{"class":149,"line":1454},[147,78593,78594],{"class":157},"    const arr = [10, 20, 30]\n",[147,78596,78597],{"class":149,"line":1469},[147,78598,78599],{"class":157},"    const newArr = arr.filter(function (item, index) {\n",[147,78601,78602],{"class":149,"line":1475},[147,78603,78529],{"class":157},[147,78605,78606],{"class":149,"line":1489},[147,78607,78534],{"class":157},[147,78609,78610],{"class":149,"line":1495},[147,78611,78612],{"class":157},"      return item >= 20\n",[147,78614,78615],{"class":149,"line":1586},[147,78616,33735],{"class":157},[147,78618,78619],{"class":149,"line":1592},[147,78620,78621],{"class":157},"    console.log(newArr)\n",[147,78623,78624,78626,78628],{"class":149,"line":1604},[147,78625,52690],{"class":157},[147,78627,52086],{"class":153},[147,78629,51580],{"class":157},[147,78631,78632,78634,78636],{"class":149,"line":1886},[147,78633,52058],{"class":157},[147,78635,52073],{"class":153},[147,78637,51580],{"class":157},[19,78639,78640],{},"这个也可以写成箭头函数：",[138,78642,78644],{"className":50907,"code":78643,"language":50909,"meta":143,"style":143},"const newArr = arr.filter(item => item >= 20)\n",[51,78645,78646],{"__ignoreMap":143},[147,78647,78648],{"class":149,"line":150},[147,78649,78643],{"class":157},[14,78651,78653],{"id":78652},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,78655,78656],{},[29,78657],{"alt":143,"src":78658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,78660,78661],{},"步骤：",[19,78663,78664],{},"①：渲染页面模块",[1406,78666,78667,78670],{},[353,78668,78669],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[353,78671,78672],{},"用forEach+字符串的形式",[19,78674,78675],{},"②：点击不同需求，显示不同页面内容",[1406,78677,78678,78681,78684,78687,78690],{},[353,78679,78680],{},"点击采取事件委托方式 .filter",[353,78682,78683],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[353,78685,78686],{},"筛选条件是根据点击的 data-index 来判断",[353,78688,78689],{},"可以使用对象解构，把事件对象解构",[353,78691,78692],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[138,78694,78696],{"className":50907,"code":78695,"language":50909,"meta":143,"style":143},"\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",[51,78697,78698,78708,78722,78726,78734,78748,78768,78780,78788,78794,78804,78814,78824,78828,78832,78838,78851,78863,78873,78885,78889,78893,78900,78913,78925,78942,78960,78973,78977,78981,78993,79003,79007,79011,79018,79059,79086,79096,79100,79104,79112,79124,79128,79132,79140,79152,79164,79175,79179,79183,79192,79204,79215,79219,79223,79232,79244,79256,79260,79264,79271,79281,79293,79305,79320,79324,79328,79336,79352,79362,79372,79382,79394,79398,79402,79412,79423,79433,79437,79445,79453,79457,79465,79480,79506,79531,79556,79575,79583,79597,79602,79607,79612,79617,79622,79630,79638,79643,79654,79659,79669,79679,79689,79699,79703,79707,79716,79725,79734,79743,79747,79751,79760,79769,79778,79787,79791,79795,79804,79813,79822,79831,79835,79839,79848,79857,79866,79875,79879,79883,79892,79901,79910,79919,79923,79927,79936,79945,79954,79963,79967,79971,79980,79989,79997,80006,80010,80014,80018,80023,80035,80040,80052,80056,80073,80101,80110,80115,80125,80135,80144,80149,80154,80158,80163,80180,80184,80189,80197,80202,80229,80234,80254,80259,80271,80276,80281,80286,80297,80311,80348,80366,80399,80416,80440,80444,80449,80455,80459,80463,80467,80475,80483,80487],{"__ignoreMap":143},[147,78699,78700,78702,78704,78706],{"class":149,"line":150},[147,78701,51571],{"class":157},[147,78703,51574],{"class":153},[147,78705,51577],{"class":2237},[147,78707,51580],{"class":157},[147,78709,78710,78712,78714,78716,78718,78720],{"class":149,"line":312},[147,78711,1309],{"class":157},[147,78713,50909],{"class":153},[147,78715,51589],{"class":2237},[147,78717,445],{"class":157},[147,78719,51594],{"class":504},[147,78721,51580],{"class":157},[147,78723,78724],{"class":149,"line":1454},[147,78725,2674],{"emptyLinePlaceholder":324},[147,78727,78728,78730,78732],{"class":149,"line":1469},[147,78729,1309],{"class":157},[147,78731,51607],{"class":153},[147,78733,51580],{"class":157},[147,78735,78736,78738,78740,78742,78744,78746],{"class":149,"line":1475},[147,78737,52417],{"class":157},[147,78739,51617],{"class":153},[147,78741,51620],{"class":2237},[147,78743,445],{"class":157},[147,78745,51625],{"class":504},[147,78747,51580],{"class":157},[147,78749,78750,78752,78754,78756,78758,78760,78762,78764,78766],{"class":149,"line":1489},[147,78751,52417],{"class":157},[147,78753,51617],{"class":153},[147,78755,15193],{"class":2237},[147,78757,445],{"class":157},[147,78759,51664],{"class":504},[147,78761,51644],{"class":2237},[147,78763,445],{"class":157},[147,78765,51671],{"class":504},[147,78767,51580],{"class":157},[147,78769,78770,78772,78774,78776,78778],{"class":149,"line":1495},[147,78771,52417],{"class":157},[147,78773,51680],{"class":153},[147,78775,51683],{"class":157},[147,78777,51680],{"class":153},[147,78779,51580],{"class":157},[147,78781,78782,78784,78786],{"class":149,"line":1586},[147,78783,52417],{"class":157},[147,78785,308],{"class":153},[147,78787,51580],{"class":157},[147,78789,78790,78792],{"class":149,"line":1592},[147,78791,6677],{"class":153},[147,78793,15845],{"class":157},[147,78795,78796,78798,78800,78802],{"class":149,"line":1604},[147,78797,54968],{"class":448},[147,78799,51710],{"class":157},[147,78801,590],{"class":448},[147,78803,1565],{"class":157},[147,78805,78806,78808,78810,78812],{"class":149,"line":1886},[147,78807,54979],{"class":448},[147,78809,51710],{"class":157},[147,78811,590],{"class":448},[147,78813,1565],{"class":157},[147,78815,78816,78818,78820,78822],{"class":149,"line":1891},[147,78817,72869],{"class":448},[147,78819,51710],{"class":157},[147,78821,60778],{"class":448},[147,78823,1565],{"class":157},[147,78825,78826],{"class":149,"line":1897},[147,78827,2461],{"class":157},[147,78829,78830],{"class":149,"line":1902},[147,78831,2674],{"emptyLinePlaceholder":324},[147,78833,78834,78836],{"class":149,"line":1916},[147,78835,62396],{"class":2237},[147,78837,15845],{"class":157},[147,78839,78840,78842,78844,78847,78849],{"class":149,"line":1921},[147,78841,55044],{"class":448},[147,78843,51710],{"class":157},[147,78845,78846],{"class":448},"990",[147,78848,51765],{"class":397},[147,78850,1565],{"class":157},[147,78852,78853,78855,78857,78859,78861],{"class":149,"line":1927},[147,78854,54979],{"class":448},[147,78856,51710],{"class":157},[147,78858,590],{"class":448},[147,78860,51829],{"class":448},[147,78862,1565],{"class":157},[147,78864,78865,78867,78869,78871],{"class":149,"line":1948},[147,78866,55282],{"class":448},[147,78868,51710],{"class":157},[147,78870,51750],{"class":448},[147,78872,1565],{"class":157},[147,78874,78875,78878,78880,78883],{"class":149,"line":1953},[147,78876,78877],{"class":448},"      flex-wrap",[147,78879,51710],{"class":157},[147,78881,78882],{"class":448},"wrap",[147,78884,1565],{"class":157},[147,78886,78887],{"class":149,"line":1967},[147,78888,2461],{"class":157},[147,78890,78891],{"class":149,"line":1972},[147,78892,2674],{"emptyLinePlaceholder":324},[147,78894,78895,78898],{"class":149,"line":2001},[147,78896,78897],{"class":2237},"    .item",[147,78899,15845],{"class":157},[147,78901,78902,78904,78906,78909,78911],{"class":149,"line":2006},[147,78903,55044],{"class":448},[147,78905,51710],{"class":157},[147,78907,78908],{"class":448},"240",[147,78910,51765],{"class":397},[147,78912,1565],{"class":157},[147,78914,78915,78917,78919,78921,78923],{"class":149,"line":2023},[147,78916,62273],{"class":448},[147,78918,51710],{"class":157},[147,78920,845],{"class":448},[147,78922,51765],{"class":397},[147,78924,1565],{"class":157},[147,78926,78927,78929,78931,78933,78935,78938,78940],{"class":149,"line":2028},[147,78928,54968],{"class":448},[147,78930,51710],{"class":157},[147,78932,1099],{"class":448},[147,78934,51765],{"class":397},[147,78936,78937],{"class":448}," 30",[147,78939,51765],{"class":397},[147,78941,1565],{"class":157},[147,78943,78944,78946,78948,78950,78953,78956,78958],{"class":149,"line":2033},[147,78945,62133],{"class":448},[147,78947,51710],{"class":157},[147,78949,28395],{"class":448},[147,78951,78952],{"class":448}," ease",[147,78954,78955],{"class":448}," .5",[147,78957,1094],{"class":397},[147,78959,1565],{"class":157},[147,78961,78962,78965,78967,78969,78971],{"class":149,"line":2038},[147,78963,78964],{"class":448},"      margin-bottom",[147,78966,51710],{"class":157},[147,78968,1099],{"class":448},[147,78970,51765],{"class":397},[147,78972,1565],{"class":157},[147,78974,78975],{"class":149,"line":2052},[147,78976,2461],{"class":157},[147,78978,78979],{"class":149,"line":2057},[147,78980,2674],{"emptyLinePlaceholder":324},[147,78982,78983,78986,78988,78991],{"class":149,"line":2851},[147,78984,78985],{"class":2237},"    .item:nth-child",[147,78987,401],{"class":157},[147,78989,78990],{"class":448},"4n",[147,78992,12716],{"class":157},[147,78994,78995,78997,78999,79001],{"class":149,"line":2865},[147,78996,62273],{"class":448},[147,78998,51710],{"class":157},[147,79000,590],{"class":448},[147,79002,1565],{"class":157},[147,79004,79005],{"class":149,"line":2873},[147,79006,2461],{"class":157},[147,79008,79009],{"class":149,"line":2878},[147,79010,2674],{"emptyLinePlaceholder":324},[147,79012,79013,79016],{"class":149,"line":2884},[147,79014,79015],{"class":2237},"    .item:hover",[147,79017,15845],{"class":157},[147,79019,79020,79023,79025,79027,79029,79031,79033,79035,79037,79040,79042,79044,79046,79048,79050,79052,79054,79057],{"class":149,"line":2890},[147,79021,79022],{"class":448},"      box-shadow",[147,79024,51710],{"class":157},[147,79026,590],{"class":448},[147,79028,51765],{"class":397},[147,79030,4367],{"class":448},[147,79032,51765],{"class":397},[147,79034,2422],{"class":448},[147,79036,51765],{"class":397},[147,79038,79039],{"class":448}," rgba",[147,79041,401],{"class":157},[147,79043,590],{"class":448},[147,79045,12709],{"class":157},[147,79047,590],{"class":448},[147,79049,12709],{"class":157},[147,79051,590],{"class":448},[147,79053,12709],{"class":157},[147,79055,79056],{"class":448},".2",[147,79058,2993],{"class":157},[147,79060,79061,79064,79066,79069,79071,79073,79075,79078,79080,79082,79084],{"class":149,"line":2895},[147,79062,79063],{"class":448},"      transform",[147,79065,51710],{"class":157},[147,79067,79068],{"class":448},"translate3d",[147,79070,401],{"class":157},[147,79072,590],{"class":448},[147,79074,12709],{"class":157},[147,79076,79077],{"class":448},"-4",[147,79079,51765],{"class":397},[147,79081,12709],{"class":157},[147,79083,590],{"class":448},[147,79085,2993],{"class":157},[147,79087,79088,79090,79092,79094],{"class":149,"line":8222},[147,79089,62298],{"class":448},[147,79091,51710],{"class":157},[147,79093,62303],{"class":448},[147,79095,1565],{"class":157},[147,79097,79098],{"class":149,"line":8246},[147,79099,2461],{"class":157},[147,79101,79102],{"class":149,"line":8251},[147,79103,2674],{"emptyLinePlaceholder":324},[147,79105,79106,79108,79110],{"class":149,"line":8257},[147,79107,78897],{"class":2237},[147,79109,55888],{"class":153},[147,79111,15845],{"class":157},[147,79113,79114,79116,79118,79120,79122],{"class":149,"line":8284},[147,79115,55044],{"class":448},[147,79117,51710],{"class":157},[147,79119,710],{"class":448},[147,79121,727],{"class":397},[147,79123,1565],{"class":157},[147,79125,79126],{"class":149,"line":8289},[147,79127,2461],{"class":157},[147,79129,79130],{"class":149,"line":8295},[147,79131,2674],{"emptyLinePlaceholder":324},[147,79133,79134,79136,79138],{"class":149,"line":8307},[147,79135,78897],{"class":2237},[147,79137,62577],{"class":2237},[147,79139,15845],{"class":157},[147,79141,79142,79144,79146,79148,79150],{"class":149,"line":8319},[147,79143,55195],{"class":448},[147,79145,51710],{"class":157},[147,79147,1049],{"class":448},[147,79149,51765],{"class":397},[147,79151,1565],{"class":157},[147,79153,79154,79156,79158,79160,79162],{"class":149,"line":8331},[147,79155,78964],{"class":448},[147,79157,51710],{"class":157},[147,79159,845],{"class":448},[147,79161,51765],{"class":397},[147,79163,1565],{"class":157},[147,79165,79166,79168,79170,79173],{"class":149,"line":9990},[147,79167,57689],{"class":448},[147,79169,51710],{"class":157},[147,79171,79172],{"class":448},"#666",[147,79174,1565],{"class":157},[147,79176,79177],{"class":149,"line":10015},[147,79178,2461],{"class":157},[147,79180,79181],{"class":149,"line":10038},[147,79182,2674],{"emptyLinePlaceholder":324},[147,79184,79185,79187,79190],{"class":149,"line":10062},[147,79186,78897],{"class":2237},[147,79188,79189],{"class":2237}," .price",[147,79191,15845],{"class":157},[147,79193,79194,79196,79198,79200,79202],{"class":149,"line":10067},[147,79195,55195],{"class":448},[147,79197,51710],{"class":157},[147,79199,1149],{"class":448},[147,79201,51765],{"class":397},[147,79203,1565],{"class":157},[147,79205,79206,79208,79210,79213],{"class":149,"line":10072},[147,79207,57689],{"class":448},[147,79209,51710],{"class":157},[147,79211,79212],{"class":448},"firebrick",[147,79214,1565],{"class":157},[147,79216,79217],{"class":149,"line":10077},[147,79218,2461],{"class":157},[147,79220,79221],{"class":149,"line":10086},[147,79222,2674],{"emptyLinePlaceholder":324},[147,79224,79225,79227,79230],{"class":149,"line":10091},[147,79226,78897],{"class":2237},[147,79228,79229],{"class":2237}," .price::before",[147,79231,15845],{"class":157},[147,79233,79234,79237,79239,79242],{"class":149,"line":10097},[147,79235,79236],{"class":448},"      content",[147,79238,51710],{"class":157},[147,79240,79241],{"class":504},"'￥'",[147,79243,1565],{"class":157},[147,79245,79246,79248,79250,79252,79254],{"class":149,"line":10118},[147,79247,55195],{"class":448},[147,79249,51710],{"class":157},[147,79251,948],{"class":448},[147,79253,51765],{"class":397},[147,79255,1565],{"class":157},[147,79257,79258],{"class":149,"line":10124},[147,79259,2461],{"class":157},[147,79261,79262],{"class":149,"line":10138},[147,79263,2674],{"emptyLinePlaceholder":324},[147,79265,79266,79269],{"class":149,"line":10144},[147,79267,79268],{"class":2237},"    .filter",[147,79270,15845],{"class":157},[147,79272,79273,79275,79277,79279],{"class":149,"line":10171},[147,79274,55282],{"class":448},[147,79276,51710],{"class":157},[147,79278,51750],{"class":448},[147,79280,1565],{"class":157},[147,79282,79283,79285,79287,79289,79291],{"class":149,"line":10180},[147,79284,55044],{"class":448},[147,79286,51710],{"class":157},[147,79288,78846],{"class":448},[147,79290,51765],{"class":397},[147,79292,1565],{"class":157},[147,79294,79295,79297,79299,79301,79303],{"class":149,"line":10186},[147,79296,54979],{"class":448},[147,79298,51710],{"class":157},[147,79300,590],{"class":448},[147,79302,51829],{"class":448},[147,79304,1565],{"class":157},[147,79306,79307,79309,79311,79313,79315,79317],{"class":149,"line":10194},[147,79308,54968],{"class":448},[147,79310,51710],{"class":157},[147,79312,1055],{"class":448},[147,79314,51765],{"class":397},[147,79316,78937],{"class":448},[147,79318,79319],{"class":397},"px\n",[147,79321,79322],{"class":149,"line":10199},[147,79323,2461],{"class":157},[147,79325,79326],{"class":149,"line":16877},[147,79327,2674],{"emptyLinePlaceholder":324},[147,79329,79330,79332,79334],{"class":149,"line":16883},[147,79331,79268],{"class":2237},[147,79333,1673],{"class":153},[147,79335,15845],{"class":157},[147,79337,79338,79340,79342,79344,79346,79348,79350],{"class":149,"line":16906},[147,79339,54968],{"class":448},[147,79341,51710],{"class":157},[147,79343,845],{"class":448},[147,79345,51765],{"class":397},[147,79347,9224],{"class":448},[147,79349,51765],{"class":397},[147,79351,1565],{"class":157},[147,79353,79354,79356,79358,79360],{"class":149,"line":16912},[147,79355,61994],{"class":448},[147,79357,51710],{"class":157},[147,79359,62091],{"class":448},[147,79361,1565],{"class":157},[147,79363,79364,79366,79368,79370],{"class":149,"line":16935},[147,79365,57689],{"class":448},[147,79367,51710],{"class":157},[147,79369,79172],{"class":448},[147,79371,1565],{"class":157},[147,79373,79374,79376,79378,79380],{"class":149,"line":16949},[147,79375,64243],{"class":448},[147,79377,51710],{"class":157},[147,79379,55010],{"class":448},[147,79381,1565],{"class":157},[147,79383,79384,79386,79388,79390,79392],{"class":149,"line":16969},[147,79385,62023],{"class":448},[147,79387,51710],{"class":157},[147,79389,1099],{"class":448},[147,79391,51765],{"class":397},[147,79393,1565],{"class":157},[147,79395,79396],{"class":149,"line":16975},[147,79397,2461],{"class":157},[147,79399,79400],{"class":149,"line":16986},[147,79401,2674],{"emptyLinePlaceholder":324},[147,79403,79404,79406,79408,79410],{"class":149,"line":17009},[147,79405,79268],{"class":2237},[147,79407,1673],{"class":153},[147,79409,62173],{"class":2237},[147,79411,15845],{"class":157},[147,79413,79414,79416,79418,79421],{"class":149,"line":17031},[147,79415,55157],{"class":448},[147,79417,51710],{"class":157},[147,79419,79420],{"class":448},"#05943c",[147,79422,1565],{"class":157},[147,79424,79425,79427,79429,79431],{"class":149,"line":17036},[147,79426,57689],{"class":448},[147,79428,51710],{"class":157},[147,79430,61115],{"class":448},[147,79432,1565],{"class":157},[147,79434,79435],{"class":149,"line":17042},[147,79436,2461],{"class":157},[147,79438,79439,79441,79443],{"class":149,"line":17056},[147,79440,52690],{"class":157},[147,79442,308],{"class":153},[147,79444,51580],{"class":157},[147,79446,79447,79449,79451],{"class":149,"line":17069},[147,79448,52058],{"class":157},[147,79450,51607],{"class":153},[147,79452,51580],{"class":157},[147,79454,79455],{"class":149,"line":17074},[147,79456,2674],{"emptyLinePlaceholder":324},[147,79458,79459,79461,79463],{"class":149,"line":17088},[147,79460,1309],{"class":157},[147,79462,52073],{"class":153},[147,79464,51580],{"class":157},[147,79466,79467,79469,79471,79473,79475,79478],{"class":149,"line":17093},[147,79468,52417],{"class":157},[147,79470,51884],{"class":153},[147,79472,53759],{"class":2237},[147,79474,445],{"class":157},[147,79476,79477],{"class":504},"\"filter\"",[147,79479,51580],{"class":157},[147,79481,79482,79484,79486,79488,79490,79492,79495,79497,79499,79502,79504],{"class":149,"line":17099},[147,79483,51614],{"class":157},[147,79485,637],{"class":153},[147,79487,61330],{"class":2237},[147,79489,445],{"class":157},[147,79491,61335],{"class":504},[147,79493,79494],{"class":2237}," data-index",[147,79496,445],{"class":157},[147,79498,3952],{"class":504},[147,79500,79501],{"class":157},">0-100元\u003C\u002F",[147,79503,637],{"class":153},[147,79505,51580],{"class":157},[147,79507,79508,79510,79512,79514,79516,79518,79520,79522,79524,79527,79529],{"class":149,"line":17104},[147,79509,51614],{"class":157},[147,79511,637],{"class":153},[147,79513,61330],{"class":2237},[147,79515,445],{"class":157},[147,79517,61335],{"class":504},[147,79519,79494],{"class":2237},[147,79521,445],{"class":157},[147,79523,3975],{"class":504},[147,79525,79526],{"class":157},">100-300元\u003C\u002F",[147,79528,637],{"class":153},[147,79530,51580],{"class":157},[147,79532,79533,79535,79537,79539,79541,79543,79545,79547,79549,79552,79554],{"class":149,"line":17118},[147,79534,51614],{"class":157},[147,79536,637],{"class":153},[147,79538,61330],{"class":2237},[147,79540,445],{"class":157},[147,79542,61335],{"class":504},[147,79544,79494],{"class":2237},[147,79546,445],{"class":157},[147,79548,3988],{"class":504},[147,79550,79551],{"class":157},">300元以上\u003C\u002F",[147,79553,637],{"class":153},[147,79555,51580],{"class":157},[147,79557,79558,79560,79562,79564,79566,79568,79571,79573],{"class":149,"line":17123},[147,79559,51614],{"class":157},[147,79561,637],{"class":153},[147,79563,61330],{"class":2237},[147,79565,445],{"class":157},[147,79567,61335],{"class":504},[147,79569,79570],{"class":157},">全部区间\u003C\u002F",[147,79572,637],{"class":153},[147,79574,51580],{"class":157},[147,79576,79577,79579,79581],{"class":149,"line":17128},[147,79578,52690],{"class":157},[147,79580,51884],{"class":153},[147,79582,51580],{"class":157},[147,79584,79585,79587,79589,79591,79593,79595],{"class":149,"line":17142},[147,79586,52417],{"class":157},[147,79588,51884],{"class":153},[147,79590,53759],{"class":2237},[147,79592,445],{"class":157},[147,79594,62881],{"class":504},[147,79596,51580],{"class":157},[147,79598,79599],{"class":149,"line":17154},[147,79600,79601],{"class":458},"    \u003C!-- \u003Cdiv class=\"item\">\n",[147,79603,79604],{"class":149,"line":17159},[147,79605,79606],{"class":458},"      \u003Cimg src=\"\" alt=\"\">\n",[147,79608,79609],{"class":149,"line":17172},[147,79610,79611],{"class":458},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[147,79613,79614],{"class":149,"line":17177},[147,79615,79616],{"class":458},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[147,79618,79619],{"class":149,"line":17182},[147,79620,79621],{"class":458},"    \u003C\u002Fdiv> -->\n",[147,79623,79624,79626,79628],{"class":149,"line":17187},[147,79625,52690],{"class":157},[147,79627,51884],{"class":153},[147,79629,51580],{"class":157},[147,79631,79632,79634,79636],{"class":149,"line":17200},[147,79633,52417],{"class":157},[147,79635,52086],{"class":153},[147,79637,51580],{"class":157},[147,79639,79640],{"class":149,"line":17205},[147,79641,79642],{"class":458},"    \u002F\u002F 2. 初始化数据\n",[147,79644,79645,79647,79650,79652],{"class":149,"line":32907},[147,79646,11495],{"class":397},[147,79648,79649],{"class":448}," goodsList",[147,79651,13838],{"class":397},[147,79653,55720],{"class":157},[147,79655,79656],{"class":149,"line":32913},[147,79657,79658],{"class":157},"      {\n",[147,79660,79661,79664,79667],{"class":149,"line":32919},[147,79662,79663],{"class":157},"        id: ",[147,79665,79666],{"class":504},"'4001172'",[147,79668,31740],{"class":157},[147,79670,79671,79674,79677],{"class":149,"line":32925},[147,79672,79673],{"class":157},"        name: ",[147,79675,79676],{"class":504},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[147,79678,31740],{"class":157},[147,79680,79681,79684,79687],{"class":149,"line":32931},[147,79682,79683],{"class":157},"        price: ",[147,79685,79686],{"class":504},"'289.00'",[147,79688,31740],{"class":157},[147,79690,79691,79694,79697],{"class":149,"line":32942},[147,79692,79693],{"class":157},"        picture: ",[147,79695,79696],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[147,79698,31740],{"class":157},[147,79700,79701],{"class":149,"line":32948},[147,79702,78164],{"class":157},[147,79704,79705],{"class":149,"line":32968},[147,79706,79658],{"class":157},[147,79708,79709,79711,79714],{"class":149,"line":32974},[147,79710,79663],{"class":157},[147,79712,79713],{"class":504},"'4001594'",[147,79715,31740],{"class":157},[147,79717,79718,79720,79723],{"class":149,"line":32985},[147,79719,79673],{"class":157},[147,79721,79722],{"class":504},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[147,79724,31740],{"class":157},[147,79726,79727,79729,79732],{"class":149,"line":32991},[147,79728,79683],{"class":157},[147,79730,79731],{"class":504},"'288.00'",[147,79733,31740],{"class":157},[147,79735,79736,79738,79741],{"class":149,"line":32997},[147,79737,79693],{"class":157},[147,79739,79740],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[147,79742,31740],{"class":157},[147,79744,79745],{"class":149,"line":33003},[147,79746,78164],{"class":157},[147,79748,79749],{"class":149,"line":33009},[147,79750,79658],{"class":157},[147,79752,79753,79755,79758],{"class":149,"line":33015},[147,79754,79663],{"class":157},[147,79756,79757],{"class":504},"'4001009'",[147,79759,31740],{"class":157},[147,79761,79762,79764,79767],{"class":149,"line":33021},[147,79763,79673],{"class":157},[147,79765,79766],{"class":504},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[147,79768,31740],{"class":157},[147,79770,79771,79773,79776],{"class":149,"line":33027},[147,79772,79683],{"class":157},[147,79774,79775],{"class":504},"'109.00'",[147,79777,31740],{"class":157},[147,79779,79780,79782,79785],{"class":149,"line":33047},[147,79781,79693],{"class":157},[147,79783,79784],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[147,79786,31740],{"class":157},[147,79788,79789],{"class":149,"line":33053},[147,79790,78164],{"class":157},[147,79792,79793],{"class":149,"line":33069},[147,79794,79658],{"class":157},[147,79796,79797,79799,79802],{"class":149,"line":33075},[147,79798,79663],{"class":157},[147,79800,79801],{"class":504},"'4001874'",[147,79803,31740],{"class":157},[147,79805,79806,79808,79811],{"class":149,"line":33089},[147,79807,79673],{"class":157},[147,79809,79810],{"class":504},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[147,79812,31740],{"class":157},[147,79814,79815,79817,79820],{"class":149,"line":33095},[147,79816,79683],{"class":157},[147,79818,79819],{"class":504},"'488.00'",[147,79821,31740],{"class":157},[147,79823,79824,79826,79829],{"class":149,"line":33110},[147,79825,79693],{"class":157},[147,79827,79828],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[147,79830,31740],{"class":157},[147,79832,79833],{"class":149,"line":33116},[147,79834,78164],{"class":157},[147,79836,79837],{"class":149,"line":33125},[147,79838,79658],{"class":157},[147,79840,79841,79843,79846],{"class":149,"line":33131},[147,79842,79663],{"class":157},[147,79844,79845],{"class":504},"'4001649'",[147,79847,31740],{"class":157},[147,79849,79850,79852,79855],{"class":149,"line":33140},[147,79851,79673],{"class":157},[147,79853,79854],{"class":504},"'大师监制龙泉青瓷茶叶罐'",[147,79856,31740],{"class":157},[147,79858,79859,79861,79864],{"class":149,"line":33146},[147,79860,79683],{"class":157},[147,79862,79863],{"class":504},"'139.00'",[147,79865,31740],{"class":157},[147,79867,79868,79870,79873],{"class":149,"line":33152},[147,79869,79693],{"class":157},[147,79871,79872],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[147,79874,31740],{"class":157},[147,79876,79877],{"class":149,"line":33161},[147,79878,78164],{"class":157},[147,79880,79881],{"class":149,"line":33167},[147,79882,79658],{"class":157},[147,79884,79885,79887,79890],{"class":149,"line":33178},[147,79886,79663],{"class":157},[147,79888,79889],{"class":504},"'3997185'",[147,79891,31740],{"class":157},[147,79893,79894,79896,79899],{"class":149,"line":33184},[147,79895,79673],{"class":157},[147,79897,79898],{"class":504},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[147,79900,31740],{"class":157},[147,79902,79903,79905,79908],{"class":149,"line":33203},[147,79904,79683],{"class":157},[147,79906,79907],{"class":504},"'108.00'",[147,79909,31740],{"class":157},[147,79911,79912,79914,79917],{"class":149,"line":33209},[147,79913,79693],{"class":157},[147,79915,79916],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[147,79918,31740],{"class":157},[147,79920,79921],{"class":149,"line":33220},[147,79922,78164],{"class":157},[147,79924,79925],{"class":149,"line":33226},[147,79926,79658],{"class":157},[147,79928,79929,79931,79934],{"class":149,"line":33246},[147,79930,79663],{"class":157},[147,79932,79933],{"class":504},"'3997403'",[147,79935,31740],{"class":157},[147,79937,79938,79940,79943],{"class":149,"line":33262},[147,79939,79673],{"class":157},[147,79941,79942],{"class":504},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[147,79944,31740],{"class":157},[147,79946,79947,79949,79952],{"class":149,"line":33268},[147,79948,79683],{"class":157},[147,79950,79951],{"class":504},"'100.00'",[147,79953,31740],{"class":157},[147,79955,79956,79958,79961],{"class":149,"line":33282},[147,79957,79693],{"class":157},[147,79959,79960],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[147,79962,31740],{"class":157},[147,79964,79965],{"class":149,"line":33288},[147,79966,78164],{"class":157},[147,79968,79969],{"class":149,"line":33294},[147,79970,79658],{"class":157},[147,79972,79973,79975,79978],{"class":149,"line":33305},[147,79974,79663],{"class":157},[147,79976,79977],{"class":504},"'3998274'",[147,79979,31740],{"class":157},[147,79981,79982,79984,79987],{"class":149,"line":33311},[147,79983,79673],{"class":157},[147,79985,79986],{"class":504},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[147,79988,31740],{"class":157},[147,79990,79991,79993,79995],{"class":149,"line":33317},[147,79992,79683],{"class":157},[147,79994,79863],{"class":504},[147,79996,31740],{"class":157},[147,79998,79999,80001,80004],{"class":149,"line":33327},[147,80000,79693],{"class":157},[147,80002,80003],{"class":504},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[147,80005,31740],{"class":157},[147,80007,80008],{"class":149,"line":33333},[147,80009,78164],{"class":157},[147,80011,80012],{"class":149,"line":33344},[147,80013,53382],{"class":157},[147,80015,80016],{"class":149,"line":33350},[147,80017,2674],{"emptyLinePlaceholder":324},[147,80019,80020],{"class":149,"line":33360},[147,80021,80022],{"class":458},"    \u002F\u002F 1.渲染函数\n",[147,80024,80025,80027,80029,80031,80033],{"class":149,"line":33365},[147,80026,70357],{"class":397},[147,80028,70360],{"class":2237},[147,80030,401],{"class":157},[147,80032,4154],{"class":5490},[147,80034,12716],{"class":157},[147,80036,80037],{"class":149,"line":33371},[147,80038,80039],{"class":458},"      \u002F\u002F 声明空字符串\n",[147,80041,80042,80045,80048,80050],{"class":149,"line":33420},[147,80043,80044],{"class":397},"      let",[147,80046,80047],{"class":157}," str ",[147,80049,445],{"class":397},[147,80051,70377],{"class":504},[147,80053,80054],{"class":149,"line":33467},[147,80055,70382],{"class":458},[147,80057,80058,80060,80063,80065,80068,80071],{"class":149,"line":33472},[147,80059,58280],{"class":157},[147,80061,80062],{"class":2237},"forEach",[147,80064,401],{"class":157},[147,80066,80067],{"class":5490},"item",[147,80069,80070],{"class":397}," =>",[147,80072,15845],{"class":157},[147,80074,80075,80077,80080,80083,80085,80088,80090,80093,80096,80098],{"class":149,"line":33478},[147,80076,61543],{"class":397},[147,80078,80079],{"class":157}," { ",[147,80081,80082],{"class":448},"name",[147,80084,12709],{"class":157},[147,80086,80087],{"class":448},"price",[147,80089,12709],{"class":157},[147,80091,80092],{"class":448},"picture",[147,80094,80095],{"class":157}," } ",[147,80097,445],{"class":397},[147,80099,80100],{"class":157}," item\n",[147,80102,80103,80106,80108],{"class":149,"line":33497},[147,80104,80105],{"class":157},"        str ",[147,80107,9751],{"class":397},[147,80109,70441],{"class":504},[147,80111,80112],{"class":149,"line":33503},[147,80113,80114],{"class":504},"          \u003Cdiv class=\"item\">\n",[147,80116,80117,80120,80122],{"class":149,"line":33523},[147,80118,80119],{"class":504},"            \u003Cimg src=\"${",[147,80121,80092],{"class":157},[147,80123,80124],{"class":504},"}\" alt=\"\">\n",[147,80126,80127,80130,80132],{"class":149,"line":33529},[147,80128,80129],{"class":504},"            \u003Cp class=\"name\">${",[147,80131,80082],{"class":157},[147,80133,80134],{"class":504},"}\u003C\u002Fp>\n",[147,80136,80137,80140,80142],{"class":149,"line":33535},[147,80138,80139],{"class":504},"            \u003Cp class=\"price\">${",[147,80141,80087],{"class":157},[147,80143,80134],{"class":504},[147,80145,80146],{"class":149,"line":33545},[147,80147,80148],{"class":504},"          \u003C\u002Fdiv>\n",[147,80150,80151],{"class":149,"line":33550},[147,80152,80153],{"class":504},"        `\n",[147,80155,80156],{"class":149,"line":33556},[147,80157,65088],{"class":157},[147,80159,80160],{"class":149,"line":33572},[147,80161,80162],{"class":458},"      \u002F\u002F 追加给List\n",[147,80164,80165,80167,80169,80171,80174,80176,80178],{"class":149,"line":33617},[147,80166,56044],{"class":157},[147,80168,54672],{"class":2237},[147,80170,401],{"class":157},[147,80172,80173],{"class":504},"'.list'",[147,80175,74522],{"class":157},[147,80177,445],{"class":397},[147,80179,74258],{"class":157},[147,80181,80182],{"class":149,"line":33623},[147,80183,2461],{"class":157},[147,80185,80186],{"class":149,"line":33629},[147,80187,80188],{"class":458},"    \u002F\u002F 页面一打开就需要渲染\n",[147,80190,80191,80194],{"class":149,"line":33635},[147,80192,80193],{"class":2237},"    render",[147,80195,80196],{"class":157},"(goodsList)\n",[147,80198,80199],{"class":149,"line":33646},[147,80200,80201],{"class":458},"    \u002F\u002F 2.过滤筛选\n",[147,80203,80204,80206,80208,80210,80213,80215,80217,80219,80221,80223,80225,80227],{"class":149,"line":33652},[147,80205,52680],{"class":157},[147,80207,54672],{"class":2237},[147,80209,401],{"class":157},[147,80211,80212],{"class":504},"'.filter'",[147,80214,31100],{"class":157},[147,80216,58086],{"class":2237},[147,80218,401],{"class":157},[147,80220,58091],{"class":504},[147,80222,12709],{"class":157},[147,80224,474],{"class":5490},[147,80226,80070],{"class":397},[147,80228,15845],{"class":157},[147,80230,80231],{"class":149,"line":33658},[147,80232,80233],{"class":458},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[147,80235,80236,80238,80240,80243,80245,80247,80249,80251],{"class":149,"line":33664},[147,80237,58501],{"class":397},[147,80239,80079],{"class":157},[147,80241,80242],{"class":448},"tagName",[147,80244,12709],{"class":157},[147,80246,31811],{"class":448},[147,80248,80095],{"class":157},[147,80250,445],{"class":397},[147,80252,80253],{"class":157}," e.target\n",[147,80255,80256],{"class":149,"line":33682},[147,80257,80258],{"class":458},"      \u002F\u002F 判断\n",[147,80260,80261,80263,80265,80267,80269],{"class":149,"line":33696},[147,80262,54753],{"class":397},[147,80264,67307],{"class":157},[147,80266,54759],{"class":397},[147,80268,68529],{"class":504},[147,80270,12716],{"class":157},[147,80272,80273],{"class":149,"line":33705},[147,80274,80275],{"class":458},"        \u002F\u002F console.log(11)\n",[147,80277,80278],{"class":149,"line":33714},[147,80279,80280],{"class":458},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[147,80282,80283],{"class":149,"line":33723},[147,80284,80285],{"class":458},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[147,80287,80288,80290,80292,80294],{"class":149,"line":33732},[147,80289,52103],{"class":397},[147,80291,52106],{"class":157},[147,80293,445],{"class":397},[147,80295,80296],{"class":157}," goodsList\n",[147,80298,80299,80301,80304,80306,80309],{"class":149,"line":33738},[147,80300,2771],{"class":397},[147,80302,80303],{"class":157}," (dataset.index ",[147,80305,54759],{"class":397},[147,80307,80308],{"class":504}," '1'",[147,80310,12716],{"class":157},[147,80312,80313,80316,80318,80321,80324,80326,80328,80330,80333,80335,80337,80340,80342,80344,80346],{"class":149,"line":33744},[147,80314,80315],{"class":157},"          arr ",[147,80317,445],{"class":397},[147,80319,80320],{"class":157}," goodsList.",[147,80322,80323],{"class":2237},"filter",[147,80325,401],{"class":157},[147,80327,80067],{"class":5490},[147,80329,80070],{"class":397},[147,80331,80332],{"class":157}," item.price ",[147,80334,1984],{"class":397},[147,80336,4367],{"class":448},[147,80338,80339],{"class":397}," &&",[147,80341,80332],{"class":157},[147,80343,1862],{"class":397},[147,80345,6028],{"class":448},[147,80347,407],{"class":157},[147,80349,80350,80353,80355,80357,80359,80361,80364],{"class":149,"line":33752},[147,80351,80352],{"class":157},"        } ",[147,80354,1975],{"class":397},[147,80356,1978],{"class":397},[147,80358,80303],{"class":157},[147,80360,54759],{"class":397},[147,80362,80363],{"class":504}," '2'",[147,80365,12716],{"class":157},[147,80367,80368,80370,80372,80374,80376,80378,80380,80382,80384,80386,80388,80390,80392,80394,80397],{"class":149,"line":33757},[147,80369,80315],{"class":157},[147,80371,445],{"class":397},[147,80373,80320],{"class":157},[147,80375,80323],{"class":2237},[147,80377,401],{"class":157},[147,80379,80067],{"class":5490},[147,80381,80070],{"class":397},[147,80383,80332],{"class":157},[147,80385,1984],{"class":397},[147,80387,6028],{"class":448},[147,80389,80339],{"class":397},[147,80391,80332],{"class":157},[147,80393,1862],{"class":397},[147,80395,80396],{"class":448}," 300",[147,80398,407],{"class":157},[147,80400,80401,80403,80405,80407,80409,80411,80414],{"class":149,"line":33763},[147,80402,80352],{"class":157},[147,80404,1975],{"class":397},[147,80406,1978],{"class":397},[147,80408,80303],{"class":157},[147,80410,54759],{"class":397},[147,80412,80413],{"class":504}," '3'",[147,80415,12716],{"class":157},[147,80417,80418,80420,80422,80424,80426,80428,80430,80432,80434,80436,80438],{"class":149,"line":33774},[147,80419,80315],{"class":157},[147,80421,445],{"class":397},[147,80423,80320],{"class":157},[147,80425,80323],{"class":2237},[147,80427,401],{"class":157},[147,80429,80067],{"class":5490},[147,80431,80070],{"class":397},[147,80433,80332],{"class":157},[147,80435,1984],{"class":397},[147,80437,80396],{"class":448},[147,80439,407],{"class":157},[147,80441,80442],{"class":149,"line":33780},[147,80443,2803],{"class":157},[147,80445,80446],{"class":149,"line":33800},[147,80447,80448],{"class":458},"        \u002F\u002F 渲染函数\n",[147,80450,80451,80453],{"class":149,"line":33806},[147,80452,70681],{"class":2237},[147,80454,52685],{"class":157},[147,80456,80457],{"class":149,"line":33812},[147,80458,52671],{"class":157},[147,80460,80461],{"class":149,"line":33818},[147,80462,2674],{"emptyLinePlaceholder":324},[147,80464,80465],{"class":149,"line":33835},[147,80466,33735],{"class":157},[147,80468,80469,80471,80473],{"class":149,"line":33841},[147,80470,52690],{"class":157},[147,80472,52086],{"class":153},[147,80474,51580],{"class":157},[147,80476,80477,80479,80481],{"class":149,"line":33847},[147,80478,52058],{"class":157},[147,80480,52073],{"class":153},[147,80482,51580],{"class":157},[147,80484,80485],{"class":149,"line":33853},[147,80486,2674],{"emptyLinePlaceholder":324},[147,80488,80489,80491,80493],{"class":149,"line":33859},[147,80490,52058],{"class":157},[147,80492,50909],{"class":153},[147,80494,51580],{"class":157},[14,80496,80498],{"id":80497},"_410-深入了解对象","4.10 深入了解对象",[367,80500,80502],{"id":80501},"_4101-创建对象","4.10.1 创建对象",[19,80504,80505],{},[29,80506],{"alt":143,"src":80507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,80509,80510],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[367,80512,80514],{"id":80513},"_4102-构造函数","4.10.2 构造函数",[19,80516,80517,80520],{},[234,80518,80519],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,80522,80523,80526],{},[234,80524,80525],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[138,80528,80530],{"className":50907,"code":80529,"language":50909,"meta":143,"style":143},"\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",[51,80531,80532,80540,80545,80566,80579,80591,80603,80607,80612,80639,80644,80671],{"__ignoreMap":143},[147,80533,80534,80536,80538],{"class":149,"line":150},[147,80535,1309],{"class":157},[147,80537,52086],{"class":153},[147,80539,51580],{"class":157},[147,80541,80542],{"class":149,"line":312},[147,80543,80544],{"class":458},"\u002F\u002F例：\n",[147,80546,80547,80549,80552,80554,80556,80558,80560,80562,80564],{"class":149,"line":1454},[147,80548,54722],{"class":397},[147,80550,80551],{"class":2237}," Pig",[147,80553,401],{"class":157},[147,80555,80082],{"class":5490},[147,80557,777],{"class":157},[147,80559,70494],{"class":5490},[147,80561,777],{"class":157},[147,80563,70511],{"class":5490},[147,80565,12716],{"class":157},[147,80567,80568,80571,80574,80576],{"class":149,"line":1469},[147,80569,80570],{"class":448},"    this",[147,80572,80573],{"class":157},".name",[147,80575,445],{"class":397},[147,80577,80578],{"class":157},"name\n",[147,80580,80581,80583,80586,80588],{"class":149,"line":1475},[147,80582,80570],{"class":448},[147,80584,80585],{"class":157},".age",[147,80587,445],{"class":397},[147,80589,80590],{"class":157},"age\n",[147,80592,80593,80595,80598,80600],{"class":149,"line":1489},[147,80594,80570],{"class":448},[147,80596,80597],{"class":157},".gender",[147,80599,445],{"class":397},[147,80601,80602],{"class":157},"gender    \n",[147,80604,80605],{"class":149,"line":1495},[147,80606,1839],{"class":157},[147,80608,80609],{"class":149,"line":1586},[147,80610,80611],{"class":458},"\u002F\u002F创建佩奇对象\n",[147,80613,80614,80616,80619,80621,80623,80625,80628,80630,80632,80634,80637],{"class":149,"line":1592},[147,80615,7066],{"class":397},[147,80617,80618],{"class":448}," Peppa",[147,80620,11991],{"class":397},[147,80622,80551],{"class":2237},[147,80624,401],{"class":157},[147,80626,80627],{"class":504},"'佩奇'",[147,80629,777],{"class":157},[147,80631,743],{"class":448},[147,80633,777],{"class":157},[147,80635,80636],{"class":504},"'女'",[147,80638,407],{"class":157},[147,80640,80641],{"class":149,"line":1604},[147,80642,80643],{"class":458},"\u002F\u002F创建乔治对象\n",[147,80645,80646,80648,80651,80653,80655,80657,80660,80662,80664,80666,80669],{"class":149,"line":1886},[147,80647,7066],{"class":397},[147,80649,80650],{"class":448}," George",[147,80652,11991],{"class":397},[147,80654,80551],{"class":2237},[147,80656,401],{"class":157},[147,80658,80659],{"class":504},"'乔治'",[147,80661,777],{"class":157},[147,80663,471],{"class":448},[147,80665,777],{"class":157},[147,80667,80668],{"class":504},"'男'",[147,80670,407],{"class":157},[147,80672,80673,80675,80677],{"class":149,"line":1891},[147,80674,52058],{"class":157},[147,80676,52086],{"class":153},[147,80678,51580],{"class":157},[19,80680,80681],{},[29,80682],{"alt":143,"src":80683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,80685,80686],{},[29,80687],{"alt":143,"src":80688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,80690,80691],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,80693,80694],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,80696,80697],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,80699,80700],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,80702,80703],{},"这里用等号是因为：对象.属性=值",[19,80705,80706],{},"①利用对象字面量创建对象",[19,80708,80709],{},"const o={",[19,80711,80712],{},"name:'pink'",[19,80714,80715],{},"} ②利用new Object创建对象",[19,80717,80718],{},"const o=new Object({name:'pink'})",[19,80720,80721],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,80723,80724],{},"构造函数创建对象的执行过程：",[19,80726,80727],{},[29,80728],{"alt":143,"src":80729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[367,80731,80733],{"id":80732},"_4103-实例成员","4.10.3 实例成员",[19,80735,80736],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[350,80738,80739,80742,80745],{},[353,80740,80741],{},"实例对象的属性和方法即为实例成员",[353,80743,80744],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[353,80746,80747],{},"构造函数创建的实例对象彼此独立互不影响",[367,80749,80751],{"id":80750},"_4104-静态成员","4.10.4 静态成员",[19,80753,80754],{},[29,80755],{"alt":143,"src":80756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,80758,80759],{},"静态成员有Date.now() Math.PI Math.random()",[19,80761,80762],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,80764,80765],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,80767,80768],{},"function Pig(name) n {",[19,80770,80771],{},"this.name=name",[19,80773,1345],{},[19,80775,80776],{},"Pig.eyes=2",[19,80778,80779],{},"Pig.sayHai=function () { console.log(this) }",[19,80781,80782],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,80784,80785],{},"console.log(Pig.eyes) \u002F\u002F2",[19,80787,11606],{},[350,80789,80790,80793,80796,80799,80802],{},[353,80791,80792],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[353,80794,80795],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[353,80797,80798],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[353,80800,80801],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[353,80803,80804],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,80806,80807],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[367,80809,80811],{"id":80810},"_4105-内置构造函数","4.10.5 内置构造函数",[19,80813,80814],{},"内置构造函数包含：",[19,80816,80817],{},[29,80818],{"alt":143,"src":80819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,80821,80822],{},[29,80823],{"alt":143,"src":80824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,80826,80827],{},"这些基本数据类型，js对他们进行了包装",[52086,80829,80830],{},"\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",[22271,80832,80834],{"id":80833},"_41051-object","4.10.5.1 Object",[19,80836,80837],{},"Object 是内置的构造函数，用于创建普通对象",[19,80839,80840],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[138,80842,80844],{"className":50907,"code":80843,"language":50909,"meta":143,"style":143},"const user=new Object({name:'小明',age:15})\n",[51,80845,80846],{"__ignoreMap":143},[147,80847,80848],{"class":149,"line":150},[147,80849,80843],{"class":157},[19,80851,80852],{},"三个常用的静态方法：",[23183,80854,80856],{"id":80855},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,80858,80859],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,80861,80862],{},[29,80863],{"alt":143,"src":80864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,80866,80867],{},[29,80868],{"alt":143,"src":80869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[138,80871,80873],{"className":53340,"code":80872,"language":53342,"meta":143,"style":143},"\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",[51,80874,80875,80883,80891,80896,80901,80906,80911,80916,80921,80929],{"__ignoreMap":143},[147,80876,80877,80879,80881],{"class":149,"line":150},[147,80878,1309],{"class":157},[147,80880,52073],{"class":153},[147,80882,51580],{"class":157},[147,80884,80885,80887,80889],{"class":149,"line":312},[147,80886,52417],{"class":157},[147,80888,52086],{"class":153},[147,80890,51580],{"class":157},[147,80892,80893],{"class":149,"line":1454},[147,80894,80895],{"class":157},"    const o = { name: 'pink', age: 6 }\n",[147,80897,80898],{"class":149,"line":1469},[147,80899,80900],{"class":157},"    \u002F\u002F 获得所有属性名\n",[147,80902,80903],{"class":149,"line":1475},[147,80904,80905],{"class":157},"    const arr = Object.keys(o)\n",[147,80907,80908],{"class":149,"line":1489},[147,80909,80910],{"class":157},"    console.log(arr)\n",[147,80912,80913],{"class":149,"line":1495},[147,80914,80915],{"class":157},"    \u002F\u002F 获得所有属性值\n",[147,80917,80918],{"class":149,"line":1586},[147,80919,80920],{"class":157},"    console.log(Object.values(o))\n",[147,80922,80923,80925,80927],{"class":149,"line":1592},[147,80924,52690],{"class":157},[147,80926,52086],{"class":153},[147,80928,51580],{"class":157},[147,80930,80931,80933,80935],{"class":149,"line":1604},[147,80932,52058],{"class":157},[147,80934,52073],{"class":153},[147,80936,51580],{"class":157},[23183,80938,80940],{"id":80939},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,80942,80943],{},"Object.assign(oo,o)",[19,80945,80946],{},"后的东西添加给前 是追加",[19,80948,80949],{},[29,80950],{"alt":143,"src":80951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,80953,80954],{},[29,80955],{"alt":143,"src":80956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[138,80958,80960],{"className":53340,"code":80959,"language":53342,"meta":143,"style":143},"\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",[51,80961,80962,80970,80978,80982,80986,80990,80994,80998,81002,81007,81012,81017,81022,81027,81035],{"__ignoreMap":143},[147,80963,80964,80966,80968],{"class":149,"line":150},[147,80965,1309],{"class":157},[147,80967,52073],{"class":153},[147,80969,51580],{"class":157},[147,80971,80972,80974,80976],{"class":149,"line":312},[147,80973,52417],{"class":157},[147,80975,52086],{"class":153},[147,80977,51580],{"class":157},[147,80979,80980],{"class":149,"line":1454},[147,80981,80895],{"class":157},[147,80983,80984],{"class":149,"line":1469},[147,80985,80900],{"class":157},[147,80987,80988],{"class":149,"line":1475},[147,80989,80905],{"class":157},[147,80991,80992],{"class":149,"line":1489},[147,80993,80910],{"class":157},[147,80995,80996],{"class":149,"line":1495},[147,80997,80915],{"class":157},[147,80999,81000],{"class":149,"line":1586},[147,81001,80920],{"class":157},[147,81003,81004],{"class":149,"line":1592},[147,81005,81006],{"class":157},"    const oo = {}\n",[147,81008,81009],{"class":149,"line":1604},[147,81010,81011],{"class":157},"    Object.assign(oo, o)\n",[147,81013,81014],{"class":149,"line":1886},[147,81015,81016],{"class":157},"    console.log(oo)\n",[147,81018,81019],{"class":149,"line":1891},[147,81020,81021],{"class":157},"    Object.assign(o, { gender: '女' })\n",[147,81023,81024],{"class":149,"line":1897},[147,81025,81026],{"class":157},"    console.log(o)\n",[147,81028,81029,81031,81033],{"class":149,"line":1902},[147,81030,52690],{"class":157},[147,81032,52086],{"class":153},[147,81034,51580],{"class":157},[147,81036,81037,81039,81041],{"class":149,"line":1916},[147,81038,52058],{"class":157},[147,81040,52073],{"class":153},[147,81042,51580],{"class":157},[19,81044,81045],{},[29,81046],{"alt":143,"src":81047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22271,81049,81051],{"id":81050},"_41052-array","4.10.5.2 Array",[19,81053,81054],{},"Array 是内置的构造函数，用于创建数组",[19,81056,81057],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[138,81059,81061],{"className":50907,"code":81060,"language":50909,"meta":143,"style":143},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[51,81062,81063,81068],{"__ignoreMap":143},[147,81064,81065],{"class":149,"line":150},[147,81066,81067],{"class":157},"const arr=new Array(3,5)\n",[147,81069,81070],{"class":149,"line":312},[147,81071,81072],{"class":157},"console.log(arr)  \u002F\u002F[3,5]\n",[19,81074,81075],{},"Array的实例方法，这个方法是实例成员",[19,81077,81078],{},[29,81079],{"alt":143,"src":81080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[23183,81082,81084],{"id":81083},"_410521-reduce","4.10.5.2.1 reduce",[19,81086,81087],{},[29,81088],{"alt":143,"src":81089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[138,81091,81093],{"className":53340,"code":81092,"language":53342,"meta":143,"style":143},"\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",[51,81094,81095,81103,81111,81116,81121,81126,81131,81135,81140,81145,81150,81154,81159,81164,81168,81173,81178,81183,81191],{"__ignoreMap":143},[147,81096,81097,81099,81101],{"class":149,"line":150},[147,81098,1309],{"class":157},[147,81100,52073],{"class":153},[147,81102,51580],{"class":157},[147,81104,81105,81107,81109],{"class":149,"line":312},[147,81106,52417],{"class":157},[147,81108,52086],{"class":153},[147,81110,51580],{"class":157},[147,81112,81113],{"class":149,"line":1454},[147,81114,81115],{"class":157},"    const arr = [1, 5, 8]\n",[147,81117,81118],{"class":149,"line":1469},[147,81119,81120],{"class":157},"    \u002F\u002F 1.没有初始值\n",[147,81122,81123],{"class":149,"line":1475},[147,81124,81125],{"class":157},"    const total = arr.reduce(function (prev, current) {\n",[147,81127,81128],{"class":149,"line":1489},[147,81129,81130],{"class":157},"      return prev + current\n",[147,81132,81133],{"class":149,"line":1495},[147,81134,33735],{"class":157},[147,81136,81137],{"class":149,"line":1586},[147,81138,81139],{"class":157},"    console.log(total)   \u002F\u002F14\n",[147,81141,81142],{"class":149,"line":1592},[147,81143,81144],{"class":157},"    \u002F\u002F 2.有初始值\n",[147,81146,81147],{"class":149,"line":1604},[147,81148,81149],{"class":157},"    const total1 = arr.reduce(function (prev, current) {\n",[147,81151,81152],{"class":149,"line":1886},[147,81153,81130],{"class":157},[147,81155,81156],{"class":149,"line":1891},[147,81157,81158],{"class":157},"    }, 10)\n",[147,81160,81161],{"class":149,"line":1897},[147,81162,81163],{"class":157},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[147,81165,81166],{"class":149,"line":1902},[147,81167,2674],{"emptyLinePlaceholder":324},[147,81169,81170],{"class":149,"line":1916},[147,81171,81172],{"class":157},"    \u002F\u002F 3.箭头函数写法\n",[147,81174,81175],{"class":149,"line":1921},[147,81176,81177],{"class":157},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[147,81179,81180],{"class":149,"line":1927},[147,81181,81182],{"class":157},"    console.log(total2)   \u002F\u002F24\n",[147,81184,81185,81187,81189],{"class":149,"line":1948},[147,81186,52690],{"class":157},[147,81188,52086],{"class":153},[147,81190,51580],{"class":157},[147,81192,81193,81195,81197],{"class":149,"line":1953},[147,81194,52058],{"class":157},[147,81196,52073],{"class":153},[147,81198,51580],{"class":157},[19,81200,81201],{},"执行过程：",[350,81203,81204,81207,81210],{},[353,81205,81206],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[353,81208,81209],{},"每一次循环，把返回值给作为下一次循环的上一次值",[353,81211,81212],{},"如果有起始值，则起始值作为上一次值",[138,81214,81216],{"className":53340,"code":81215,"language":53342,"meta":143,"style":143},"\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",[51,81217,81218,81226,81234,81238,81242,81246,81250,81254,81258,81263,81268,81273,81278,81283,81287,81291,81295,81299,81303,81307,81312,81316,81321,81325,81330,81335,81339,81343,81347,81355],{"__ignoreMap":143},[147,81219,81220,81222,81224],{"class":149,"line":150},[147,81221,1309],{"class":157},[147,81223,52073],{"class":153},[147,81225,51580],{"class":157},[147,81227,81228,81230,81232],{"class":149,"line":312},[147,81229,52417],{"class":157},[147,81231,52086],{"class":153},[147,81233,51580],{"class":157},[147,81235,81236],{"class":149,"line":1454},[147,81237,81115],{"class":157},[147,81239,81240],{"class":149,"line":1469},[147,81241,81120],{"class":157},[147,81243,81244],{"class":149,"line":1475},[147,81245,81125],{"class":157},[147,81247,81248],{"class":149,"line":1489},[147,81249,81130],{"class":157},[147,81251,81252],{"class":149,"line":1495},[147,81253,33735],{"class":157},[147,81255,81256],{"class":149,"line":1586},[147,81257,81139],{"class":157},[147,81259,81260],{"class":149,"line":1592},[147,81261,81262],{"class":157},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[147,81264,81265],{"class":149,"line":1604},[147,81266,81267],{"class":157},"    \u002F\u002F     1              5                    6\n",[147,81269,81270],{"class":149,"line":1886},[147,81271,81272],{"class":157},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[147,81274,81275],{"class":149,"line":1891},[147,81276,81277],{"class":157},"    \u002F\u002F     6              8                    14\n",[147,81279,81280],{"class":149,"line":1897},[147,81281,81282],{"class":157},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[147,81284,81285],{"class":149,"line":1902},[147,81286,81144],{"class":157},[147,81288,81289],{"class":149,"line":1916},[147,81290,81149],{"class":157},[147,81292,81293],{"class":149,"line":1921},[147,81294,81130],{"class":157},[147,81296,81297],{"class":149,"line":1927},[147,81298,81158],{"class":157},[147,81300,81301],{"class":149,"line":1948},[147,81302,81163],{"class":157},[147,81304,81305],{"class":149,"line":1953},[147,81306,81262],{"class":157},[147,81308,81309],{"class":149,"line":1967},[147,81310,81311],{"class":157},"    \u002F\u002F     10             1                     11\n",[147,81313,81314],{"class":149,"line":1972},[147,81315,81272],{"class":157},[147,81317,81318],{"class":149,"line":2001},[147,81319,81320],{"class":157},"    \u002F\u002F     11             5                    16\n",[147,81322,81323],{"class":149,"line":2006},[147,81324,81272],{"class":157},[147,81326,81327],{"class":149,"line":2023},[147,81328,81329],{"class":157},"    \u002F\u002F     16             8                    24\n",[147,81331,81332],{"class":149,"line":2028},[147,81333,81334],{"class":157},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[147,81336,81337],{"class":149,"line":2033},[147,81338,81172],{"class":157},[147,81340,81341],{"class":149,"line":2038},[147,81342,81177],{"class":157},[147,81344,81345],{"class":149,"line":2052},[147,81346,81182],{"class":157},[147,81348,81349,81351,81353],{"class":149,"line":2057},[147,81350,52690],{"class":157},[147,81352,52086],{"class":153},[147,81354,51580],{"class":157},[147,81356,81357,81359,81361],{"class":149,"line":2851},[147,81358,52058],{"class":157},[147,81360,52073],{"class":153},[147,81362,51580],{"class":157},[23183,81364,81366],{"id":81365},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,81368,81369],{},[29,81370],{"alt":143,"src":81371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[138,81373,81375],{"className":53340,"code":81374,"language":53342,"meta":143,"style":143},"\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",[51,81376,81377,81385,81393,81398,81403,81408,81413,81417,81422,81427,81432,81437,81442,81447,81451,81456,81460,81465,81473],{"__ignoreMap":143},[147,81378,81379,81381,81383],{"class":149,"line":150},[147,81380,1309],{"class":157},[147,81382,52073],{"class":153},[147,81384,51580],{"class":157},[147,81386,81387,81389,81391],{"class":149,"line":312},[147,81388,52417],{"class":157},[147,81390,52086],{"class":153},[147,81392,51580],{"class":157},[147,81394,81395],{"class":149,"line":1454},[147,81396,81397],{"class":157},"    const arr = [\n",[147,81399,81400],{"class":149,"line":1469},[147,81401,81402],{"class":157},"      { name: '张三', salary: 10000 },\n",[147,81404,81405],{"class":149,"line":1475},[147,81406,81407],{"class":157},"      { name: '李四', salary: 10000 },\n",[147,81409,81410],{"class":149,"line":1489},[147,81411,81412],{"class":157},"      { name: '王五', salary: 10000 }\n",[147,81414,81415],{"class":149,"line":1495},[147,81416,53382],{"class":157},[147,81418,81419],{"class":149,"line":1586},[147,81420,81421],{"class":157},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[147,81423,81424],{"class":149,"line":1592},[147,81425,81426],{"class":157},"    \u002F\u002F prev是累计值\n",[147,81428,81429],{"class":149,"line":1604},[147,81430,81431],{"class":157},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[147,81433,81434],{"class":149,"line":1886},[147,81435,81436],{"class":157},"    console.log(total)\n",[147,81438,81439],{"class":149,"line":1891},[147,81440,81441],{"class":157},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[147,81443,81444],{"class":149,"line":1897},[147,81445,81446],{"class":157},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[147,81448,81449],{"class":149,"line":1902},[147,81450,81441],{"class":157},[147,81452,81453],{"class":149,"line":1916},[147,81454,81455],{"class":157},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[147,81457,81458],{"class":149,"line":1921},[147,81459,81441],{"class":157},[147,81461,81462],{"class":149,"line":1927},[147,81463,81464],{"class":157},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[147,81466,81467,81469,81471],{"class":149,"line":1948},[147,81468,52690],{"class":157},[147,81470,52086],{"class":153},[147,81472,51580],{"class":157},[147,81474,81475,81477,81479],{"class":149,"line":1953},[147,81476,52058],{"class":157},[147,81478,52073],{"class":153},[147,81480,51580],{"class":157},[23183,81482,81484],{"id":81483},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,81486,81487],{},[29,81488],{"alt":143,"src":81489},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,81491,81492],{},[29,81493],{"alt":143,"src":81494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[350,81496,81497],{},[353,81498,81499],{},"find()",[19,81501,81502],{},"循环查找，找到第一个就ok",[19,81504,81505],{},[637,81506,81509],{"href":81507,"rel":81508},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[24138],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[138,81511,81513],{"className":50907,"code":81512,"language":50909,"meta":143,"style":143},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[51,81514,81515,81520,81525],{"__ignoreMap":143},[147,81516,81517],{"class":149,"line":150},[147,81518,81519],{"class":157},"const array1 = [5, 12, 8, 130, 44]\n",[147,81521,81522],{"class":149,"line":312},[147,81523,81524],{"class":157},"const found = array1.find((element) => element > 10)\n",[147,81526,81527],{"class":149,"line":1454},[147,81528,81529],{"class":157},"console.log(found)  \u002F\u002F12\n",[19,81531,81532,81534,81535,81540,81541,81544,81545,81547,81548,81553,81554,81556,81557,81559,81560,81562,81563],{},[51,81533,81499],{}," 方法是一个",[637,81536,81539],{"href":81537,"rel":81538},"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",[24138],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[51,81542,81543],{},"callbackFn"," 函数，直到 ",[51,81546,81543],{}," 返回一个",[637,81549,81552],{"href":81550,"rel":81551},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[24138],"真值","。然后 ",[51,81555,81499],{}," 返回该元素并停止迭代数组。如果 ",[51,81558,81543],{}," 从未返回真值，则 ",[51,81561,81499],{}," 返回 ",[51,81564,81565],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[138,81567,81569],{"className":53340,"code":81568,"language":53342,"meta":143,"style":143},"\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",[51,81570,81571,81579,81587,81592,81597,81602,81606,81611,81616,81620,81625,81630,81634,81638,81643,81648,81652,81656,81661,81666,81671,81676,81681,81685,81690,81695,81700,81705,81709,81714,81722],{"__ignoreMap":143},[147,81572,81573,81575,81577],{"class":149,"line":150},[147,81574,1309],{"class":157},[147,81576,52073],{"class":153},[147,81578,51580],{"class":157},[147,81580,81581,81583,81585],{"class":149,"line":312},[147,81582,52417],{"class":157},[147,81584,52086],{"class":153},[147,81586,51580],{"class":157},[147,81588,81589],{"class":149,"line":1454},[147,81590,81591],{"class":157},"    const arr = ['red', 'blue', 'green']\n",[147,81593,81594],{"class":149,"line":1469},[147,81595,81596],{"class":157},"    const found = arr.find(item => item === 'pink')\n",[147,81598,81599],{"class":149,"line":1475},[147,81600,81601],{"class":157},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[147,81603,81604],{"class":149,"line":1489},[147,81605,2674],{"emptyLinePlaceholder":324},[147,81607,81608],{"class":149,"line":1495},[147,81609,81610],{"class":157},"    \u002F\u002F 使用场景，用于查找数据\n",[147,81612,81613],{"class":149,"line":1586},[147,81614,81615],{"class":157},"    const arr1 = [\n",[147,81617,81618],{"class":149,"line":1592},[147,81619,79658],{"class":157},[147,81621,81622],{"class":149,"line":1604},[147,81623,81624],{"class":157},"        name: '小米',\n",[147,81626,81627],{"class":149,"line":1886},[147,81628,81629],{"class":157},"        price: 1999\n",[147,81631,81632],{"class":149,"line":1891},[147,81633,78164],{"class":157},[147,81635,81636],{"class":149,"line":1897},[147,81637,79658],{"class":157},[147,81639,81640],{"class":149,"line":1902},[147,81641,81642],{"class":157},"        name: '华为',\n",[147,81644,81645],{"class":149,"line":1916},[147,81646,81647],{"class":157},"        price: 3999\n",[147,81649,81650],{"class":149,"line":1921},[147,81651,52671],{"class":157},[147,81653,81654],{"class":149,"line":1927},[147,81655,53382],{"class":157},[147,81657,81658],{"class":149,"line":1948},[147,81659,81660],{"class":157},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[147,81662,81663],{"class":149,"line":1953},[147,81664,81665],{"class":157},"    \u002F\u002F const found1 = arr1.find(item => {\n",[147,81667,81668],{"class":149,"line":1967},[147,81669,81670],{"class":157},"    \u002F\u002F   if (item.name === '小米') {\n",[147,81672,81673],{"class":149,"line":1972},[147,81674,81675],{"class":157},"    \u002F\u002F     return item\n",[147,81677,81678],{"class":149,"line":2001},[147,81679,81680],{"class":157},"    \u002F\u002F   }\n",[147,81682,81683],{"class":149,"line":2006},[147,81684,63563],{"class":157},[147,81686,81687],{"class":149,"line":2023},[147,81688,81689],{"class":157},"    \u002F\u002F 另一种写法\n",[147,81691,81692],{"class":149,"line":2028},[147,81693,81694],{"class":157},"    const found1 = arr1.find(item => {\n",[147,81696,81697],{"class":149,"line":2033},[147,81698,81699],{"class":157},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[147,81701,81702],{"class":149,"line":2038},[147,81703,81704],{"class":157},"      return item.name = '小米'\n",[147,81706,81707],{"class":149,"line":2052},[147,81708,33735],{"class":157},[147,81710,81711],{"class":149,"line":2057},[147,81712,81713],{"class":157},"    console.log(found1)\n",[147,81715,81716,81718,81720],{"class":149,"line":2851},[147,81717,52690],{"class":157},[147,81719,52086],{"class":153},[147,81721,51580],{"class":157},[147,81723,81724,81726,81728],{"class":149,"line":2865},[147,81725,52058],{"class":157},[147,81727,52073],{"class":153},[147,81729,51580],{"class":157},[19,81731,81732],{},[29,81733],{"alt":143,"src":81734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,81736,81737],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[350,81739,81740],{"start":312},[353,81741,81742],{},"every()返回的是布尔值",[19,81744,81745],{},[637,81746,81749],{"href":81747,"rel":81748},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[24138],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,81751,81752],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,81754,81755],{},"some是只有有一个就没问题",[19,81757,81758],{},"every是必须全是才行",[138,81760,81764],{"className":81761,"code":81762,"language":81763,"meta":143,"style":143},"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",[51,81765,81766,81782,81796,81800,81809],{"__ignoreMap":143},[147,81767,81768,81770,81773,81775,81777,81780],{"class":149,"line":150},[147,81769,54722],{"class":397},[147,81771,81772],{"class":157}," isBigEnough(element, ",[147,81774,74331],{"class":397},[147,81776,12709],{"class":157},[147,81778,81779],{"class":397},"array",[147,81781,12716],{"class":157},[147,81783,81784,81787,81790,81792,81794],{"class":149,"line":312},[147,81785,81786],{"class":397},"  return",[147,81788,81789],{"class":157}," element ",[147,81791,1984],{"class":397},[147,81793,2312],{"class":448},[147,81795,1565],{"class":157},[147,81797,81798],{"class":149,"line":1454},[147,81799,1839],{"class":157},[147,81801,81802,81805,81807],{"class":149,"line":1469},[147,81803,81804],{"class":157},"[12, 5, 8, 130, 44].every(isBigEnough); ",[147,81806,33603],{"class":397},[147,81808,54789],{"class":157},[147,81810,81811,81814,81816],{"class":149,"line":1475},[147,81812,81813],{"class":157},"[12, 54, 18, 130, 44].every(isBigEnough); ",[147,81815,33603],{"class":397},[147,81817,58213],{"class":157},[138,81819,81821],{"className":53340,"code":81820,"language":53342,"meta":143,"style":143},"\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",[51,81822,81823,81831,81839,81844,81848,81853,81858,81866],{"__ignoreMap":143},[147,81824,81825,81827,81829],{"class":149,"line":150},[147,81826,1309],{"class":157},[147,81828,52073],{"class":153},[147,81830,51580],{"class":157},[147,81832,81833,81835,81837],{"class":149,"line":312},[147,81834,52417],{"class":157},[147,81836,52086],{"class":153},[147,81838,51580],{"class":157},[147,81840,81841],{"class":149,"line":1454},[147,81842,81843],{"class":157},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[147,81845,81846],{"class":149,"line":1469},[147,81847,78594],{"class":157},[147,81849,81850],{"class":149,"line":1475},[147,81851,81852],{"class":157},"    const flag = arr.every(item => item >= 10)\n",[147,81854,81855],{"class":149,"line":1489},[147,81856,81857],{"class":157},"    console.log(flag)    \u002F\u002Ftrue\n",[147,81859,81860,81862,81864],{"class":149,"line":1495},[147,81861,52690],{"class":157},[147,81863,52086],{"class":153},[147,81865,51580],{"class":157},[147,81867,81868,81870,81872],{"class":149,"line":1586},[147,81869,52058],{"class":157},[147,81871,52073],{"class":153},[147,81873,51580],{"class":157},[138,81875,81877],{"className":53340,"code":81876,"language":53342,"meta":143,"style":143},"\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",[51,81878,81879,81887,81895,81899,81904,81909,81914,81922],{"__ignoreMap":143},[147,81880,81881,81883,81885],{"class":149,"line":150},[147,81882,1309],{"class":157},[147,81884,52073],{"class":153},[147,81886,51580],{"class":157},[147,81888,81889,81891,81893],{"class":149,"line":312},[147,81890,52417],{"class":157},[147,81892,52086],{"class":153},[147,81894,51580],{"class":157},[147,81896,81897],{"class":149,"line":1454},[147,81898,81843],{"class":157},[147,81900,81901],{"class":149,"line":1469},[147,81902,81903],{"class":157},"    const arr = [10, 0, 5]\n",[147,81905,81906],{"class":149,"line":1475},[147,81907,81908],{"class":157},"    const flag = arr.some(item => item >= 10)\n",[147,81910,81911],{"class":149,"line":1489},[147,81912,81913],{"class":157},"    console.log(flag)   \u002F\u002Ftrue\n",[147,81915,81916,81918,81920],{"class":149,"line":1495},[147,81917,52690],{"class":157},[147,81919,52086],{"class":153},[147,81921,51580],{"class":157},[147,81923,81924,81926,81928],{"class":149,"line":1586},[147,81925,52058],{"class":157},[147,81927,52073],{"class":153},[147,81929,51580],{"class":157},[23183,81931,81933],{"id":81932},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,81935,81936],{},[29,81937],{"alt":143,"src":81938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[138,81940,81942],{"className":50907,"code":81941,"language":50909,"meta":143,"style":143},"\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",[51,81943,81944,81954,81968,81972,81980,81994,82014,82026,82034,82041,82053,82065,82077,82089,82099,82109,82113,82121,82129,82133,82141,82153,82161,82183,82188,82193,82226,82234,82242,82246],{"__ignoreMap":143},[147,81945,81946,81948,81950,81952],{"class":149,"line":150},[147,81947,51571],{"class":157},[147,81949,51574],{"class":153},[147,81951,51577],{"class":2237},[147,81953,51580],{"class":157},[147,81955,81956,81958,81960,81962,81964,81966],{"class":149,"line":312},[147,81957,1309],{"class":157},[147,81959,50909],{"class":153},[147,81961,51589],{"class":2237},[147,81963,445],{"class":157},[147,81965,51594],{"class":504},[147,81967,51580],{"class":157},[147,81969,81970],{"class":149,"line":1454},[147,81971,2674],{"emptyLinePlaceholder":324},[147,81973,81974,81976,81978],{"class":149,"line":1469},[147,81975,1309],{"class":157},[147,81977,51607],{"class":153},[147,81979,51580],{"class":157},[147,81981,81982,81984,81986,81988,81990,81992],{"class":149,"line":1475},[147,81983,52417],{"class":157},[147,81985,51617],{"class":153},[147,81987,51620],{"class":2237},[147,81989,445],{"class":157},[147,81991,51625],{"class":504},[147,81993,51580],{"class":157},[147,81995,81996,81998,82000,82002,82004,82006,82008,82010,82012],{"class":149,"line":1489},[147,81997,52417],{"class":157},[147,81999,51617],{"class":153},[147,82001,15193],{"class":2237},[147,82003,445],{"class":157},[147,82005,51664],{"class":504},[147,82007,51644],{"class":2237},[147,82009,445],{"class":157},[147,82011,51671],{"class":504},[147,82013,51580],{"class":157},[147,82015,82016,82018,82020,82022,82024],{"class":149,"line":1495},[147,82017,52417],{"class":157},[147,82019,51680],{"class":153},[147,82021,51683],{"class":157},[147,82023,51680],{"class":153},[147,82025,51580],{"class":157},[147,82027,82028,82030,82032],{"class":149,"line":1586},[147,82029,52417],{"class":157},[147,82031,308],{"class":153},[147,82033,51580],{"class":157},[147,82035,82036,82039],{"class":149,"line":1592},[147,82037,82038],{"class":153},"    div",[147,82040,15845],{"class":157},[147,82042,82043,82045,82047,82049,82051],{"class":149,"line":1604},[147,82044,55044],{"class":448},[147,82046,51710],{"class":157},[147,82048,1996],{"class":448},[147,82050,51765],{"class":397},[147,82052,1565],{"class":157},[147,82054,82055,82057,82059,82061,82063],{"class":149,"line":1886},[147,82056,55058],{"class":448},[147,82058,51710],{"class":157},[147,82060,800],{"class":448},[147,82062,51765],{"class":397},[147,82064,1565],{"class":157},[147,82066,82067,82069,82071,82073,82075],{"class":149,"line":1891},[147,82068,57632],{"class":448},[147,82070,51710],{"class":157},[147,82072,800],{"class":448},[147,82074,51765],{"class":397},[147,82076,1565],{"class":157},[147,82078,82079,82081,82083,82085,82087],{"class":149,"line":1897},[147,82080,65406],{"class":448},[147,82082,51710],{"class":157},[147,82084,897],{"class":448},[147,82086,51765],{"class":397},[147,82088,1565],{"class":157},[147,82090,82091,82093,82095,82097],{"class":149,"line":1902},[147,82092,57559],{"class":448},[147,82094,51710],{"class":157},[147,82096,51865],{"class":448},[147,82098,1565],{"class":157},[147,82100,82101,82103,82105,82107],{"class":149,"line":1916},[147,82102,55157],{"class":448},[147,82104,51710],{"class":157},[147,82106,51918],{"class":448},[147,82108,1565],{"class":157},[147,82110,82111],{"class":149,"line":1921},[147,82112,2461],{"class":157},[147,82114,82115,82117,82119],{"class":149,"line":1927},[147,82116,52690],{"class":157},[147,82118,308],{"class":153},[147,82120,51580],{"class":157},[147,82122,82123,82125,82127],{"class":149,"line":1948},[147,82124,52058],{"class":157},[147,82126,51607],{"class":153},[147,82128,51580],{"class":157},[147,82130,82131],{"class":149,"line":1953},[147,82132,2674],{"emptyLinePlaceholder":324},[147,82134,82135,82137,82139],{"class":149,"line":1967},[147,82136,1309],{"class":157},[147,82138,52073],{"class":153},[147,82140,51580],{"class":157},[147,82142,82143,82145,82147,82149,82151],{"class":149,"line":1972},[147,82144,52417],{"class":157},[147,82146,51884],{"class":153},[147,82148,55587],{"class":157},[147,82150,51884],{"class":153},[147,82152,51580],{"class":157},[147,82154,82155,82157,82159],{"class":149,"line":2001},[147,82156,52417],{"class":157},[147,82158,52086],{"class":153},[147,82160,51580],{"class":157},[147,82162,82163,82165,82168,82170,82173,82176,82178,82181],{"class":149,"line":2006},[147,82164,11495],{"class":397},[147,82166,82167],{"class":448}," spec",[147,82169,13838],{"class":397},[147,82171,82172],{"class":157}," { size: ",[147,82174,82175],{"class":504},"'40cm*40cm'",[147,82177,55737],{"class":157},[147,82179,82180],{"class":504},"'黑色'",[147,82182,55877],{"class":157},[147,82184,82185],{"class":149,"line":2023},[147,82186,82187],{"class":458},"    \u002F\u002F const arr = Object.values(spec)\n",[147,82189,82190],{"class":149,"line":2028},[147,82191,82192],{"class":458},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[147,82194,82195,82197,82199,82201,82204,82206,82208,82211,82214,82217,82219,82221,82224],{"class":149,"line":2033},[147,82196,52680],{"class":157},[147,82198,54672],{"class":2237},[147,82200,401],{"class":157},[147,82202,82203],{"class":504},"'div'",[147,82205,74522],{"class":157},[147,82207,445],{"class":397},[147,82209,82210],{"class":157}," Object.",[147,82212,82213],{"class":2237},"values",[147,82215,82216],{"class":157},"(spec).",[147,82218,74496],{"class":2237},[147,82220,401],{"class":157},[147,82222,82223],{"class":504},"'\u002F'",[147,82225,407],{"class":157},[147,82227,82228,82230,82232],{"class":149,"line":2038},[147,82229,52690],{"class":157},[147,82231,52086],{"class":153},[147,82233,51580],{"class":157},[147,82235,82236,82238,82240],{"class":149,"line":2052},[147,82237,52058],{"class":157},[147,82239,52073],{"class":153},[147,82241,51580],{"class":157},[147,82243,82244],{"class":149,"line":2057},[147,82245,2674],{"emptyLinePlaceholder":324},[147,82247,82248,82250,82252],{"class":149,"line":2851},[147,82249,52058],{"class":157},[147,82251,50909],{"class":153},[147,82253,51580],{"class":157},[19,82255,82256],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[23183,82258,82260],{"id":82259},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,82262,82263],{},"静态方法，将伪数组转换为真数组",[19,82265,82266],{},[29,82267],{"alt":143,"src":82268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[138,82270,82272],{"className":53340,"code":82271,"language":53342,"meta":143,"style":143},"\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",[51,82273,82274,82282,82290,82302,82314,82326,82334,82342,82347,82352,82357,82362,82370],{"__ignoreMap":143},[147,82275,82276,82278,82280],{"class":149,"line":150},[147,82277,1309],{"class":157},[147,82279,52073],{"class":153},[147,82281,51580],{"class":157},[147,82283,82284,82286,82288],{"class":149,"line":312},[147,82285,52417],{"class":157},[147,82287,1406],{"class":153},[147,82289,51580],{"class":157},[147,82291,82292,82294,82296,82298,82300],{"class":149,"line":1454},[147,82293,51614],{"class":157},[147,82295,353],{"class":153},[147,82297,55587],{"class":157},[147,82299,353],{"class":153},[147,82301,51580],{"class":157},[147,82303,82304,82306,82308,82310,82312],{"class":149,"line":1469},[147,82305,51614],{"class":157},[147,82307,353],{"class":153},[147,82309,55587],{"class":157},[147,82311,353],{"class":153},[147,82313,51580],{"class":157},[147,82315,82316,82318,82320,82322,82324],{"class":149,"line":1475},[147,82317,51614],{"class":157},[147,82319,353],{"class":153},[147,82321,55587],{"class":157},[147,82323,353],{"class":153},[147,82325,51580],{"class":157},[147,82327,82328,82330,82332],{"class":149,"line":1489},[147,82329,52690],{"class":157},[147,82331,1406],{"class":153},[147,82333,51580],{"class":157},[147,82335,82336,82338,82340],{"class":149,"line":1495},[147,82337,52417],{"class":157},[147,82339,52086],{"class":153},[147,82341,51580],{"class":157},[147,82343,82344],{"class":149,"line":1586},[147,82345,82346],{"class":157},"    const lis = document.querySelectorAll('li')\n",[147,82348,82349],{"class":149,"line":1592},[147,82350,82351],{"class":157},"    const liss = Array.from(lis)\n",[147,82353,82354],{"class":149,"line":1604},[147,82355,82356],{"class":157},"    liss.pop()\n",[147,82358,82359],{"class":149,"line":1886},[147,82360,82361],{"class":157},"    console.log(liss)\n",[147,82363,82364,82366,82368],{"class":149,"line":1891},[147,82365,52690],{"class":157},[147,82367,52086],{"class":153},[147,82369,51580],{"class":157},[147,82371,82372,82374,82376],{"class":149,"line":1897},[147,82373,52058],{"class":157},[147,82375,52073],{"class":153},[147,82377,51580],{"class":157},[19,82379,82380],{},[29,82381],{"alt":143,"src":82382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22271,82384,82386],{"id":82385},"_41053-string","4.10.5.3 String",[19,82388,82389],{},[29,82390],{"alt":143,"src":82391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[23183,82393,82395],{"id":82394},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[138,82397,82399],{"className":53340,"code":82398,"language":53342,"meta":143,"style":143},"\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",[51,82400,82401,82409,82417,82422,82427,82432,82436,82441,82446,82451,82459],{"__ignoreMap":143},[147,82402,82403,82405,82407],{"class":149,"line":150},[147,82404,1309],{"class":157},[147,82406,52073],{"class":153},[147,82408,51580],{"class":157},[147,82410,82411,82413,82415],{"class":149,"line":312},[147,82412,52417],{"class":157},[147,82414,52086],{"class":153},[147,82416,51580],{"class":157},[147,82418,82419],{"class":149,"line":1454},[147,82420,82421],{"class":157},"    \u002F\u002F 把字符串转化为数组\n",[147,82423,82424],{"class":149,"line":1469},[147,82425,82426],{"class":157},"    const str = 'pink,red'\n",[147,82428,82429],{"class":149,"line":1475},[147,82430,82431],{"class":157},"    const arr = str.split(',')\n",[147,82433,82434],{"class":149,"line":1489},[147,82435,80910],{"class":157},[147,82437,82438],{"class":149,"line":1495},[147,82439,82440],{"class":157},"    const str1 = '2025-8-25'\n",[147,82442,82443],{"class":149,"line":1586},[147,82444,82445],{"class":157},"    const arr1 = str1.split('-')\n",[147,82447,82448],{"class":149,"line":1592},[147,82449,82450],{"class":157},"    console.log(arr1)\n",[147,82452,82453,82455,82457],{"class":149,"line":1604},[147,82454,52690],{"class":157},[147,82456,52086],{"class":153},[147,82458,51580],{"class":157},[147,82460,82461,82463,82465],{"class":149,"line":1886},[147,82462,52058],{"class":157},[147,82464,52073],{"class":153},[147,82466,51580],{"class":157},[23183,82468,82470],{"id":82469},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,82472,5455],{},[19,82474,82475],{},"substring(indexStart)",[19,82477,82478],{},"substring(indexStart, indexEnd)",[1406,82480,82481,82492,82504,82514],{},[353,82482,82483,82484,82487,82488,82491],{},"如果省略了 ",[51,82485,82486],{},"indexEnd","，则 ",[51,82489,82490],{},"substring()"," 提取字符直到字符串的末尾",[353,82493,82494,82495,82498,82499,82487,82501,82503],{},"如果 ",[51,82496,82497],{},"indexStart"," 等于 ",[51,82500,82486],{},[51,82502,82490],{}," 返回一个空字符串",[353,82505,82494,82506,82508,82509,82487,82511,82513],{},[51,82507,82497],{}," 大于 ",[51,82510,82486],{},[51,82512,82490],{}," 的效果就像交换了这两个参数一样",[353,82515,82516],{},"结束的索引号不包含想要截取的部分",[138,82518,82520],{"className":81761,"code":82519,"language":81763,"meta":143,"style":143},"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",[51,82521,82522,82534,82538,82572,82602,82606,82637,82641,82668,82698,82728,82732,82763],{"__ignoreMap":143},[147,82523,82524,82527,82529,82532],{"class":149,"line":150},[147,82525,82526],{"class":157},"const anyString ",[147,82528,445],{"class":397},[147,82530,82531],{"class":504}," \"Mozilla\"",[147,82533,1565],{"class":157},[147,82535,82536],{"class":149,"line":312},[147,82537,2674],{"emptyLinePlaceholder":324},[147,82539,82540,82543,82545,82547,82549,82552,82554,82557,82559,82561,82563,82565,82567,82569],{"class":149,"line":1454},[147,82541,82542],{"class":448},"console",[147,82544,957],{"class":157},[147,82546,58520],{"class":448},[147,82548,401],{"class":157},[147,82550,82551],{"class":448},"anyString",[147,82553,957],{"class":157},[147,82555,82556],{"class":448},"substring",[147,82558,401],{"class":157},[147,82560,590],{"class":448},[147,82562,12709],{"class":157},[147,82564,616],{"class":448},[147,82566,75526],{"class":157},[147,82568,33603],{"class":397},[147,82570,82571],{"class":504}," 'M'\n",[147,82573,82574,82576,82578,82580,82582,82584,82586,82588,82590,82592,82594,82596,82598,82600],{"class":149,"line":1469},[147,82575,82542],{"class":448},[147,82577,957],{"class":157},[147,82579,58520],{"class":448},[147,82581,401],{"class":157},[147,82583,82551],{"class":448},[147,82585,957],{"class":157},[147,82587,82556],{"class":448},[147,82589,401],{"class":157},[147,82591,616],{"class":448},[147,82593,12709],{"class":157},[147,82595,590],{"class":448},[147,82597,75526],{"class":157},[147,82599,33603],{"class":397},[147,82601,82571],{"class":504},[147,82603,82604],{"class":149,"line":1475},[147,82605,2674],{"emptyLinePlaceholder":324},[147,82607,82608,82610,82612,82614,82616,82618,82620,82622,82624,82626,82628,82630,82632,82634],{"class":149,"line":1489},[147,82609,82542],{"class":448},[147,82611,957],{"class":157},[147,82613,58520],{"class":448},[147,82615,401],{"class":157},[147,82617,82551],{"class":448},[147,82619,957],{"class":157},[147,82621,82556],{"class":448},[147,82623,401],{"class":157},[147,82625,590],{"class":448},[147,82627,12709],{"class":157},[147,82629,743],{"class":448},[147,82631,75526],{"class":157},[147,82633,33603],{"class":397},[147,82635,82636],{"class":504}," 'Mozill'\n",[147,82638,82639],{"class":149,"line":1495},[147,82640,2674],{"emptyLinePlaceholder":324},[147,82642,82643,82645,82647,82649,82651,82653,82655,82657,82659,82661,82663,82665],{"class":149,"line":1586},[147,82644,82542],{"class":448},[147,82646,957],{"class":157},[147,82648,58520],{"class":448},[147,82650,401],{"class":157},[147,82652,82551],{"class":448},[147,82654,957],{"class":157},[147,82656,82556],{"class":448},[147,82658,401],{"class":157},[147,82660,692],{"class":448},[147,82662,75526],{"class":157},[147,82664,33603],{"class":397},[147,82666,82667],{"class":504}," 'lla'\n",[147,82669,82670,82672,82674,82676,82678,82680,82682,82684,82686,82688,82690,82692,82694,82696],{"class":149,"line":1592},[147,82671,82542],{"class":448},[147,82673,957],{"class":157},[147,82675,58520],{"class":448},[147,82677,401],{"class":157},[147,82679,82551],{"class":448},[147,82681,957],{"class":157},[147,82683,82556],{"class":448},[147,82685,401],{"class":157},[147,82687,692],{"class":448},[147,82689,12709],{"class":157},[147,82691,768],{"class":448},[147,82693,75582],{"class":157},[147,82695,33603],{"class":397},[147,82697,82667],{"class":504},[147,82699,82700,82702,82704,82706,82708,82710,82712,82714,82716,82718,82720,82722,82724,82726],{"class":149,"line":1604},[147,82701,82542],{"class":448},[147,82703,957],{"class":157},[147,82705,58520],{"class":448},[147,82707,401],{"class":157},[147,82709,82551],{"class":448},[147,82711,957],{"class":157},[147,82713,82556],{"class":448},[147,82715,401],{"class":157},[147,82717,768],{"class":448},[147,82719,12709],{"class":157},[147,82721,692],{"class":448},[147,82723,75526],{"class":157},[147,82725,33603],{"class":397},[147,82727,82667],{"class":504},[147,82729,82730],{"class":149,"line":1886},[147,82731,2674],{"emptyLinePlaceholder":324},[147,82733,82734,82736,82738,82740,82742,82744,82746,82748,82750,82752,82754,82756,82758,82760],{"class":149,"line":1891},[147,82735,82542],{"class":448},[147,82737,957],{"class":157},[147,82739,58520],{"class":448},[147,82741,401],{"class":157},[147,82743,82551],{"class":448},[147,82745,957],{"class":157},[147,82747,82556],{"class":448},[147,82749,401],{"class":157},[147,82751,590],{"class":448},[147,82753,12709],{"class":157},[147,82755,768],{"class":448},[147,82757,75526],{"class":157},[147,82759,33603],{"class":397},[147,82761,82762],{"class":504}," 'Mozilla'\n",[147,82764,82765,82767,82769,82771,82773,82775,82777,82779,82781,82783,82785,82787,82789,82791],{"class":149,"line":1897},[147,82766,82542],{"class":448},[147,82768,957],{"class":157},[147,82770,58520],{"class":448},[147,82772,401],{"class":157},[147,82774,82551],{"class":448},[147,82776,957],{"class":157},[147,82778,82556],{"class":448},[147,82780,401],{"class":157},[147,82782,590],{"class":448},[147,82784,12709],{"class":157},[147,82786,845],{"class":448},[147,82788,75526],{"class":157},[147,82790,33603],{"class":397},[147,82792,82762],{"class":504},[23183,82794,82796],{"id":82795},"_410533-startswith","4.10.5.3.3 startsWith",[19,82798,82799,82802,82803,82808,82809,82811,82812],{},[51,82800,82801],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[234,82804,82805],{},[51,82806,82807],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[51,82810,1637],{}," 或 ",[51,82813,66293],{},[138,82815,82817],{"className":77767,"code":82816,"language":77769,"meta":143,"style":143},"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",[51,82818,82819,82831,82850,82855,82875],{"__ignoreMap":143},[147,82820,82821,82823,82826,82828],{"class":149,"line":150},[147,82822,7066],{"class":397},[147,82824,82825],{"class":157}," str1 ",[147,82827,445],{"class":397},[147,82829,82830],{"class":504}," \"Saturday night plans\"\n",[147,82832,82833,82835,82837,82840,82843,82845,82848],{"class":149,"line":312},[147,82834,77804],{"class":157},[147,82836,58520],{"class":2237},[147,82838,82839],{"class":157},"(str1.",[147,82841,82842],{"class":2237},"startsWith",[147,82844,401],{"class":157},[147,82846,82847],{"class":504},"\"Sat\"",[147,82849,30771],{"class":157},[147,82851,82852],{"class":149,"line":1454},[147,82853,82854],{"class":458},"\u002F\u002F Expected output: true\n",[147,82856,82857,82859,82861,82863,82865,82867,82869,82871,82873],{"class":149,"line":1469},[147,82858,77804],{"class":157},[147,82860,58520],{"class":2237},[147,82862,82839],{"class":157},[147,82864,82842],{"class":2237},[147,82866,401],{"class":157},[147,82868,82847],{"class":504},[147,82870,12709],{"class":157},[147,82872,471],{"class":448},[147,82874,30771],{"class":157},[147,82876,82877],{"class":149,"line":1475},[147,82878,82879],{"class":458},"\u002F\u002F Expected output: false\n",[138,82881,82883],{"className":50907,"code":82882,"language":50909,"meta":143,"style":143},"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",[51,82884,82885,82890,82895,82899,82904,82909],{"__ignoreMap":143},[147,82886,82887],{"class":149,"line":150},[147,82888,82889],{"class":157},"startsWith(searchString)\n",[147,82891,82892],{"class":149,"line":312},[147,82893,82894],{"class":157},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[147,82896,82897],{"class":149,"line":1454},[147,82898,2674],{"emptyLinePlaceholder":324},[147,82900,82901],{"class":149,"line":1469},[147,82902,82903],{"class":157},"const str3 = 'pink老师上课中'\n",[147,82905,82906],{"class":149,"line":1475},[147,82907,82908],{"class":157},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[147,82910,82911],{"class":149,"line":1489},[147,82912,82913],{"class":157},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[23183,82915,82917],{"id":82916},"_410534-includes","4.10.5.3.4 includes",[19,82919,82920],{},"includes(searchString) includes(searchString, position)",[350,82922,82923],{},[353,82924,82925],{},"searchString:",[19,82927,82928,82929,82931,82932,82937,82938,82943,82944,21773,82947,82950,82951,82954],{},"一个要在 ",[51,82930,1574],{}," 中查找的字符串。",[637,82933,82936],{"href":82934,"rel":82935},"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",[24138],"不能是正则表达式","。所有非正则表达式的值都会被",[637,82939,82942],{"href":82940,"rel":82941},"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",[24138],"强制转换为字符串","，因此如果该参数被省略或传入 ",[51,82945,82946],{},"undefined",[51,82948,82949],{},"includes()"," 方法会在字符串中搜索 ",[51,82952,82953],{},"\"undefined\"","，这通常不是你想要的",[350,82956,82957],{"start":312},[353,82958,82959,1258],{},[51,82960,82961],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,82963,82964,82965,82968,82969],{},"在字符串中开始搜索 ",[51,82966,82967],{},"searchString"," 的位置。默认值为 ",[51,82970,590],{},[350,82972,82973],{"start":1454},[353,82974,82975],{},"返回值：",[19,82977,82978,82979,82981,82982,82986,82987],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[51,82980,82967],{}," 为空字符串的情况），则返回 ",[234,82983,82984],{},[51,82985,1637],{}," ，否则返回 ",[234,82988,82989],{},[51,82990,66293],{},[350,82992,82993],{"start":1469},[353,82994,82995],{},"异常：",[19,82997,82494,82998,249,83000,83004],{},[51,82999,82967],{},[637,83001,83003],{"href":82934,"rel":83002},[24138],"是一个正则表达式","，则会抛出",[19,83006,83007],{},"只要是有就是true，不需要非得以谁开头结尾",[138,83009,83011],{"className":77767,"code":83010,"language":77769,"meta":143,"style":143},"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",[51,83012,83013,83024,83047,83066,83086,83108,83127],{"__ignoreMap":143},[147,83014,83015,83017,83019,83021],{"class":149,"line":150},[147,83016,7066],{"class":397},[147,83018,80047],{"class":157},[147,83020,445],{"class":397},[147,83022,83023],{"class":504}," \"To be, or not to be, that is the question.\"\n",[147,83025,83026,83028,83030,83033,83036,83038,83041,83044],{"class":149,"line":312},[147,83027,77804],{"class":157},[147,83029,58520],{"class":2237},[147,83031,83032],{"class":157},"(str.",[147,83034,83035],{"class":2237},"includes",[147,83037,401],{"class":157},[147,83039,83040],{"class":504},"\"To be\"",[147,83042,83043],{"class":157},"))",[147,83045,83046],{"class":458},"  \u002F\u002F true\n",[147,83048,83049,83051,83053,83055,83057,83059,83062,83064],{"class":149,"line":1454},[147,83050,77804],{"class":157},[147,83052,58520],{"class":2237},[147,83054,83032],{"class":157},[147,83056,83035],{"class":2237},[147,83058,401],{"class":157},[147,83060,83061],{"class":504},"\"question\"",[147,83063,83043],{"class":157},[147,83065,83046],{"class":458},[147,83067,83068,83070,83072,83074,83076,83078,83081,83083],{"class":149,"line":1469},[147,83069,77804],{"class":157},[147,83071,58520],{"class":2237},[147,83073,83032],{"class":157},[147,83075,83035],{"class":2237},[147,83077,401],{"class":157},[147,83079,83080],{"class":504},"\"nonexistent\"",[147,83082,83043],{"class":157},[147,83084,83085],{"class":458},"  \u002F\u002F false\n",[147,83087,83088,83090,83092,83094,83096,83098,83100,83102,83104,83106],{"class":149,"line":1475},[147,83089,77804],{"class":157},[147,83091,58520],{"class":2237},[147,83093,83032],{"class":157},[147,83095,83035],{"class":2237},[147,83097,401],{"class":157},[147,83099,83040],{"class":504},[147,83101,12709],{"class":157},[147,83103,616],{"class":448},[147,83105,83043],{"class":157},[147,83107,83085],{"class":458},[147,83109,83110,83112,83114,83116,83118,83120,83123,83125],{"class":149,"line":1489},[147,83111,77804],{"class":157},[147,83113,58520],{"class":2237},[147,83115,83032],{"class":157},[147,83117,83035],{"class":2237},[147,83119,401],{"class":157},[147,83121,83122],{"class":504},"\"TO BE\"",[147,83124,83043],{"class":157},[147,83126,83085],{"class":458},[147,83128,83129,83131,83133,83135,83137,83139,83141,83143],{"class":149,"line":1495},[147,83130,77804],{"class":157},[147,83132,58520],{"class":2237},[147,83134,83032],{"class":157},[147,83136,83035],{"class":2237},[147,83138,401],{"class":157},[147,83140,7926],{"class":504},[147,83142,83043],{"class":157},[147,83144,83046],{"class":458},[23183,83146,83148],{"id":83147},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[138,83150,83152],{"className":53340,"code":83151,"language":53342,"meta":143,"style":143},"\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",[51,83153,83154,83162,83170,83175,83180,83185,83190,83195,83203],{"__ignoreMap":143},[147,83155,83156,83158,83160],{"class":149,"line":150},[147,83157,1309],{"class":157},[147,83159,52073],{"class":153},[147,83161,51580],{"class":157},[147,83163,83164,83166,83168],{"class":149,"line":312},[147,83165,52417],{"class":157},[147,83167,52086],{"class":153},[147,83169,51580],{"class":157},[147,83171,83172],{"class":149,"line":1454},[147,83173,83174],{"class":157},"    const num = 10\n",[147,83176,83177],{"class":149,"line":1469},[147,83178,83179],{"class":157},"    \u002F\u002F 强制转换\n",[147,83181,83182],{"class":149,"line":1475},[147,83183,83184],{"class":157},"    console.log(String(num))\n",[147,83186,83187],{"class":149,"line":1489},[147,83188,83189],{"class":157},"    \u002F\u002F toString()方法转换\n",[147,83191,83192],{"class":149,"line":1495},[147,83193,83194],{"class":157},"    console.log(num.toString())\n",[147,83196,83197,83199,83201],{"class":149,"line":1586},[147,83198,52690],{"class":157},[147,83200,52086],{"class":153},[147,83202,51580],{"class":157},[147,83204,83205,83207,83209],{"class":149,"line":1592},[147,83206,52058],{"class":157},[147,83208,52073],{"class":153},[147,83210,51580],{"class":157},[23183,83212,83214],{"id":83213},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,83216,83217],{},[29,83218],{"alt":143,"src":83219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[138,83221,83223],{"className":50907,"code":83222,"language":50909,"meta":143,"style":143},"\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",[51,83224,83225,83235,83249,83253,83261,83275,83295,83307,83315,83319,83327,83339,83347,83359,83364,83369,83374,83421,83437,83445,83453,83457],{"__ignoreMap":143},[147,83226,83227,83229,83231,83233],{"class":149,"line":150},[147,83228,51571],{"class":157},[147,83230,51574],{"class":153},[147,83232,51577],{"class":2237},[147,83234,51580],{"class":157},[147,83236,83237,83239,83241,83243,83245,83247],{"class":149,"line":312},[147,83238,1309],{"class":157},[147,83240,50909],{"class":153},[147,83242,51589],{"class":2237},[147,83244,445],{"class":157},[147,83246,51594],{"class":504},[147,83248,51580],{"class":157},[147,83250,83251],{"class":149,"line":1454},[147,83252,2674],{"emptyLinePlaceholder":324},[147,83254,83255,83257,83259],{"class":149,"line":1469},[147,83256,1309],{"class":157},[147,83258,51607],{"class":153},[147,83260,51580],{"class":157},[147,83262,83263,83265,83267,83269,83271,83273],{"class":149,"line":1475},[147,83264,52417],{"class":157},[147,83266,51617],{"class":153},[147,83268,51620],{"class":2237},[147,83270,445],{"class":157},[147,83272,51625],{"class":504},[147,83274,51580],{"class":157},[147,83276,83277,83279,83281,83283,83285,83287,83289,83291,83293],{"class":149,"line":1489},[147,83278,52417],{"class":157},[147,83280,51617],{"class":153},[147,83282,15193],{"class":2237},[147,83284,445],{"class":157},[147,83286,51664],{"class":504},[147,83288,51644],{"class":2237},[147,83290,445],{"class":157},[147,83292,51671],{"class":504},[147,83294,51580],{"class":157},[147,83296,83297,83299,83301,83303,83305],{"class":149,"line":1495},[147,83298,52417],{"class":157},[147,83300,51680],{"class":153},[147,83302,51683],{"class":157},[147,83304,51680],{"class":153},[147,83306,51580],{"class":157},[147,83308,83309,83311,83313],{"class":149,"line":1586},[147,83310,52058],{"class":157},[147,83312,51607],{"class":153},[147,83314,51580],{"class":157},[147,83316,83317],{"class":149,"line":1592},[147,83318,2674],{"emptyLinePlaceholder":324},[147,83320,83321,83323,83325],{"class":149,"line":1604},[147,83322,1309],{"class":157},[147,83324,52073],{"class":153},[147,83326,51580],{"class":157},[147,83328,83329,83331,83333,83335,83337],{"class":149,"line":1886},[147,83330,52417],{"class":157},[147,83332,51884],{"class":153},[147,83334,55587],{"class":157},[147,83336,51884],{"class":153},[147,83338,51580],{"class":157},[147,83340,83341,83343,83345],{"class":149,"line":1891},[147,83342,52417],{"class":157},[147,83344,52086],{"class":153},[147,83346,51580],{"class":157},[147,83348,83349,83351,83354,83356],{"class":149,"line":1897},[147,83350,11495],{"class":397},[147,83352,83353],{"class":448}," gift",[147,83355,13838],{"class":397},[147,83357,83358],{"class":504}," '50g的茶叶，清洗球'\n",[147,83360,83361],{"class":149,"line":1902},[147,83362,83363],{"class":458},"    \u002F\u002F 1.把字符串拆分为数组\n",[147,83365,83366],{"class":149,"line":1916},[147,83367,83368],{"class":458},"    \u002F\u002F console.log(gift.split(','))\n",[147,83370,83371],{"class":149,"line":1921},[147,83372,83373],{"class":458},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[147,83375,83376,83378,83380,83382,83385,83388,83390,83393,83395,83397,83399,83401,83403,83406,83408,83411,83413,83415,83417,83419],{"class":149,"line":1927},[147,83377,11495],{"class":397},[147,83379,74192],{"class":448},[147,83381,13838],{"class":397},[147,83383,83384],{"class":157}," gift.",[147,83386,83387],{"class":2237},"split",[147,83389,401],{"class":157},[147,83391,83392],{"class":504},"'，'",[147,83394,31100],{"class":157},[147,83396,74317],{"class":2237},[147,83398,401],{"class":157},[147,83400,80067],{"class":5490},[147,83402,80070],{"class":397},[147,83404,83405],{"class":504}," `\u003Cspan>【赠品】${",[147,83407,80067],{"class":157},[147,83409,83410],{"class":504},"}\u003C\u002Fspan>\u003Cbr>`",[147,83412,31100],{"class":157},[147,83414,74496],{"class":2237},[147,83416,401],{"class":157},[147,83418,74501],{"class":504},[147,83420,407],{"class":157},[147,83422,83423,83425,83427,83429,83431,83433,83435],{"class":149,"line":1948},[147,83424,52680],{"class":157},[147,83426,54672],{"class":2237},[147,83428,401],{"class":157},[147,83430,82203],{"class":504},[147,83432,74522],{"class":157},[147,83434,445],{"class":397},[147,83436,74258],{"class":157},[147,83438,83439,83441,83443],{"class":149,"line":1953},[147,83440,52690],{"class":157},[147,83442,52086],{"class":153},[147,83444,51580],{"class":157},[147,83446,83447,83449,83451],{"class":149,"line":1967},[147,83448,52058],{"class":157},[147,83450,52073],{"class":153},[147,83452,51580],{"class":157},[147,83454,83455],{"class":149,"line":1972},[147,83456,2674],{"emptyLinePlaceholder":324},[147,83458,83459,83461,83463],{"class":149,"line":2001},[147,83460,52058],{"class":157},[147,83462,50909],{"class":153},[147,83464,51580],{"class":157},[22271,83466,83468],{"id":83467},"_41054-number","4.10.5.4 Number",[19,83470,83471],{},[29,83472],{"alt":143,"src":83473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,83475,83476],{},"整数也可以进行toFixed来保留小数",[19,83478,83479],{},"比如：",[19,83481,83482],{},"const price=10",[19,83484,83485],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22271,83487,83489],{"id":83488},"_41055-购物车展示","4.10.5.5 购物车展示",[19,83491,83492],{},[29,83493],{"alt":143,"src":83494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[138,83496,83498],{"className":50907,"code":83497,"language":50909,"meta":143,"style":143},"\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",[51,83499,83500,83510,83524,83528,83536,83550,83570,83582,83590,83596,83606,83616,83626,83630,83634,83640,83652,83666,83670,83674,83680,83692,83708,83718,83734,83738,83742,83748,83758,83768,83772,83776,83784,83796,83808,83820,83824,83828,83836,83848,83852,83856,83867,83877,83889,83901,83911,83915,83919,83927,83936,83948,83958,83968,83972,83976,83984,83993,84000,84010,84022,84026,84030,84039,84049,84060,84072,84084,84088,84092,84101,84111,84122,84126,84130,84136,84148,84160,84170,84180,84198,84210,84214,84218,84227,84239,84249,84259,84271,84275,84283,84291,84295,84303,84317,84325,84339,84367,84375,84383,84393,84397,84405,84413,84422,84430,84439,84449,84453,84457,84465,84473,84482,84490,84498,84511,84515,84519,84527,84535,84544,84552,84560,84575,84579,84583,84591,84599,84608,84616,84624,84638,84646,84650,84654,84659,84685,84690,84727,84732,84755,84760,84814,84819,84855,84859,84865,84870,84879,84893,84902,84921,84930,84940,84945,84950,84963,84968,85022,85048,85056,85064,85068],{"__ignoreMap":143},[147,83501,83502,83504,83506,83508],{"class":149,"line":150},[147,83503,51571],{"class":157},[147,83505,51574],{"class":153},[147,83507,51577],{"class":2237},[147,83509,51580],{"class":157},[147,83511,83512,83514,83516,83518,83520,83522],{"class":149,"line":312},[147,83513,1309],{"class":157},[147,83515,50909],{"class":153},[147,83517,51589],{"class":2237},[147,83519,445],{"class":157},[147,83521,51594],{"class":504},[147,83523,51580],{"class":157},[147,83525,83526],{"class":149,"line":1454},[147,83527,2674],{"emptyLinePlaceholder":324},[147,83529,83530,83532,83534],{"class":149,"line":1469},[147,83531,1309],{"class":157},[147,83533,51607],{"class":153},[147,83535,51580],{"class":157},[147,83537,83538,83540,83542,83544,83546,83548],{"class":149,"line":1475},[147,83539,52417],{"class":157},[147,83541,51617],{"class":153},[147,83543,51620],{"class":2237},[147,83545,445],{"class":157},[147,83547,51625],{"class":504},[147,83549,51580],{"class":157},[147,83551,83552,83554,83556,83558,83560,83562,83564,83566,83568],{"class":149,"line":1489},[147,83553,52417],{"class":157},[147,83555,51617],{"class":153},[147,83557,15193],{"class":2237},[147,83559,445],{"class":157},[147,83561,51664],{"class":504},[147,83563,51644],{"class":2237},[147,83565,445],{"class":157},[147,83567,51671],{"class":504},[147,83569,51580],{"class":157},[147,83571,83572,83574,83576,83578,83580],{"class":149,"line":1495},[147,83573,52417],{"class":157},[147,83575,51680],{"class":153},[147,83577,51683],{"class":157},[147,83579,51680],{"class":153},[147,83581,51580],{"class":157},[147,83583,83584,83586,83588],{"class":149,"line":1586},[147,83585,52417],{"class":157},[147,83587,308],{"class":153},[147,83589,51580],{"class":157},[147,83591,83592,83594],{"class":149,"line":1592},[147,83593,6677],{"class":153},[147,83595,15845],{"class":157},[147,83597,83598,83600,83602,83604],{"class":149,"line":1604},[147,83599,54968],{"class":448},[147,83601,51710],{"class":157},[147,83603,590],{"class":448},[147,83605,1565],{"class":157},[147,83607,83608,83610,83612,83614],{"class":149,"line":1886},[147,83609,54979],{"class":448},[147,83611,51710],{"class":157},[147,83613,590],{"class":448},[147,83615,1565],{"class":157},[147,83617,83618,83620,83622,83624],{"class":149,"line":1891},[147,83619,72869],{"class":448},[147,83621,51710],{"class":157},[147,83623,60778],{"class":448},[147,83625,1565],{"class":157},[147,83627,83628],{"class":149,"line":1897},[147,83629,2461],{"class":157},[147,83631,83632],{"class":149,"line":1902},[147,83633,2674],{"emptyLinePlaceholder":324},[147,83635,83636,83638],{"class":149,"line":1916},[147,83637,62396],{"class":2237},[147,83639,15845],{"class":157},[147,83641,83642,83644,83646,83648,83650],{"class":149,"line":1921},[147,83643,55044],{"class":448},[147,83645,51710],{"class":157},[147,83647,78846],{"class":448},[147,83649,51765],{"class":397},[147,83651,1565],{"class":157},[147,83653,83654,83656,83658,83660,83662,83664],{"class":149,"line":1927},[147,83655,54979],{"class":448},[147,83657,51710],{"class":157},[147,83659,710],{"class":448},[147,83661,51765],{"class":397},[147,83663,51829],{"class":448},[147,83665,1565],{"class":157},[147,83667,83668],{"class":149,"line":1948},[147,83669,2461],{"class":157},[147,83671,83672],{"class":149,"line":1953},[147,83673,2674],{"emptyLinePlaceholder":324},[147,83675,83676,83678],{"class":149,"line":1967},[147,83677,78897],{"class":2237},[147,83679,15845],{"class":157},[147,83681,83682,83684,83686,83688,83690],{"class":149,"line":1972},[147,83683,54968],{"class":448},[147,83685,51710],{"class":157},[147,83687,974],{"class":448},[147,83689,51765],{"class":397},[147,83691,1565],{"class":157},[147,83693,83694,83696,83698,83700,83702,83704,83706],{"class":149,"line":2001},[147,83695,62133],{"class":448},[147,83697,51710],{"class":157},[147,83699,28395],{"class":448},[147,83701,78952],{"class":448},[147,83703,78955],{"class":448},[147,83705,1094],{"class":397},[147,83707,1565],{"class":157},[147,83709,83710,83712,83714,83716],{"class":149,"line":2006},[147,83711,55282],{"class":448},[147,83713,51710],{"class":157},[147,83715,51750],{"class":448},[147,83717,1565],{"class":157},[147,83719,83720,83722,83724,83726,83728,83730,83732],{"class":149,"line":2023},[147,83721,62250],{"class":448},[147,83723,51710],{"class":157},[147,83725,616],{"class":448},[147,83727,51765],{"class":397},[147,83729,51794],{"class":448},[147,83731,62517],{"class":448},[147,83733,1565],{"class":157},[147,83735,83736],{"class":149,"line":2028},[147,83737,2461],{"class":157},[147,83739,83740],{"class":149,"line":2033},[147,83741,2674],{"emptyLinePlaceholder":324},[147,83743,83744,83746],{"class":149,"line":2038},[147,83745,79015],{"class":2237},[147,83747,15845],{"class":157},[147,83749,83750,83752,83754,83756],{"class":149,"line":2052},[147,83751,62298],{"class":448},[147,83753,51710],{"class":157},[147,83755,62303],{"class":448},[147,83757,1565],{"class":157},[147,83759,83760,83762,83764,83766],{"class":149,"line":2057},[147,83761,55157],{"class":448},[147,83763,51710],{"class":157},[147,83765,62091],{"class":448},[147,83767,1565],{"class":157},[147,83769,83770],{"class":149,"line":2851},[147,83771,2461],{"class":157},[147,83773,83774],{"class":149,"line":2865},[147,83775,2674],{"emptyLinePlaceholder":324},[147,83777,83778,83780,83782],{"class":149,"line":2873},[147,83779,78897],{"class":2237},[147,83781,55888],{"class":153},[147,83783,15845],{"class":157},[147,83785,83786,83788,83790,83792,83794],{"class":149,"line":2878},[147,83787,55044],{"class":448},[147,83789,51710],{"class":157},[147,83791,1011],{"class":448},[147,83793,51765],{"class":397},[147,83795,1565],{"class":157},[147,83797,83798,83800,83802,83804,83806],{"class":149,"line":2884},[147,83799,55058],{"class":448},[147,83801,51710],{"class":157},[147,83803,1011],{"class":448},[147,83805,51765],{"class":397},[147,83807,1565],{"class":157},[147,83809,83810,83812,83814,83816,83818],{"class":149,"line":2890},[147,83811,62023],{"class":448},[147,83813,51710],{"class":157},[147,83815,718],{"class":448},[147,83817,51765],{"class":397},[147,83819,1565],{"class":157},[147,83821,83822],{"class":149,"line":2895},[147,83823,2461],{"class":157},[147,83825,83826],{"class":149,"line":8222},[147,83827,2674],{"emptyLinePlaceholder":324},[147,83829,83830,83832,83834],{"class":149,"line":8246},[147,83831,78897],{"class":2237},[147,83833,62577],{"class":2237},[147,83835,15845],{"class":157},[147,83837,83838,83840,83842,83844,83846],{"class":149,"line":8251},[147,83839,55044],{"class":448},[147,83841,51710],{"class":157},[147,83843,1996],{"class":448},[147,83845,51765],{"class":397},[147,83847,1565],{"class":157},[147,83849,83850],{"class":149,"line":8257},[147,83851,2461],{"class":157},[147,83853,83854],{"class":149,"line":8284},[147,83855,2674],{"emptyLinePlaceholder":324},[147,83857,83858,83860,83862,83865],{"class":149,"line":8289},[147,83859,78897],{"class":2237},[147,83861,62577],{"class":2237},[147,83863,83864],{"class":2237}," .tag",[147,83866,15845],{"class":157},[147,83868,83869,83871,83873,83875],{"class":149,"line":8295},[147,83870,55282],{"class":448},[147,83872,51710],{"class":157},[147,83874,61142],{"class":448},[147,83876,1565],{"class":157},[147,83878,83879,83881,83883,83885,83887],{"class":149,"line":8307},[147,83880,54968],{"class":448},[147,83882,51710],{"class":157},[147,83884,477],{"class":448},[147,83886,51765],{"class":397},[147,83888,1565],{"class":157},[147,83890,83891,83893,83895,83897,83899],{"class":149,"line":8319},[147,83892,55195],{"class":448},[147,83894,51710],{"class":157},[147,83896,897],{"class":448},[147,83898,51765],{"class":397},[147,83900,1565],{"class":157},[147,83902,83903,83905,83907,83909],{"class":149,"line":8331},[147,83904,57689],{"class":448},[147,83906,51710],{"class":157},[147,83908,62343],{"class":448},[147,83910,1565],{"class":157},[147,83912,83913],{"class":149,"line":9990},[147,83914,2461],{"class":157},[147,83916,83917],{"class":149,"line":10015},[147,83918,2674],{"emptyLinePlaceholder":324},[147,83920,83921,83923,83925],{"class":149,"line":10038},[147,83922,78897],{"class":2237},[147,83924,79189],{"class":2237},[147,83926,31740],{"class":157},[147,83928,83929,83931,83934],{"class":149,"line":10062},[147,83930,78897],{"class":2237},[147,83932,83933],{"class":2237}," .sub-total",[147,83935,15845],{"class":157},[147,83937,83938,83940,83942,83944,83946],{"class":149,"line":10067},[147,83939,55195],{"class":448},[147,83941,51710],{"class":157},[147,83943,1049],{"class":448},[147,83945,51765],{"class":397},[147,83947,1565],{"class":157},[147,83949,83950,83952,83954,83956],{"class":149,"line":10072},[147,83951,57689],{"class":448},[147,83953,51710],{"class":157},[147,83955,79212],{"class":448},[147,83957,1565],{"class":157},[147,83959,83960,83962,83964,83966],{"class":149,"line":10077},[147,83961,62110],{"class":448},[147,83963,51710],{"class":157},[147,83965,616],{"class":448},[147,83967,1565],{"class":157},[147,83969,83970],{"class":149,"line":10086},[147,83971,2461],{"class":157},[147,83973,83974],{"class":149,"line":10091},[147,83975,2674],{"emptyLinePlaceholder":324},[147,83977,83978,83980,83982],{"class":149,"line":10097},[147,83979,78897],{"class":2237},[147,83981,79229],{"class":2237},[147,83983,31740],{"class":157},[147,83985,83986,83988,83991],{"class":149,"line":10118},[147,83987,78897],{"class":2237},[147,83989,83990],{"class":2237}," .sub-total::before",[147,83992,31740],{"class":157},[147,83994,83995,83998],{"class":149,"line":10124},[147,83996,83997],{"class":2237},"    .amount::before",[147,83999,15845],{"class":157},[147,84001,84002,84004,84006,84008],{"class":149,"line":10138},[147,84003,79236],{"class":448},[147,84005,51710],{"class":157},[147,84007,79241],{"class":504},[147,84009,1565],{"class":157},[147,84011,84012,84014,84016,84018,84020],{"class":149,"line":10144},[147,84013,55195],{"class":448},[147,84015,51710],{"class":157},[147,84017,897],{"class":448},[147,84019,51765],{"class":397},[147,84021,1565],{"class":157},[147,84023,84024],{"class":149,"line":10171},[147,84025,2461],{"class":157},[147,84027,84028],{"class":149,"line":10180},[147,84029,2674],{"emptyLinePlaceholder":324},[147,84031,84032,84034,84037],{"class":149,"line":10186},[147,84033,78897],{"class":2237},[147,84035,84036],{"class":2237}," .spec",[147,84038,15845],{"class":157},[147,84040,84041,84043,84045,84047],{"class":149,"line":10194},[147,84042,62110],{"class":448},[147,84044,51710],{"class":157},[147,84046,477],{"class":448},[147,84048,1565],{"class":157},[147,84050,84051,84053,84055,84058],{"class":149,"line":10199},[147,84052,57689],{"class":448},[147,84054,51710],{"class":157},[147,84056,84057],{"class":448},"#888",[147,84059,1565],{"class":157},[147,84061,84062,84064,84066,84068,84070],{"class":149,"line":16877},[147,84063,55195],{"class":448},[147,84065,51710],{"class":157},[147,84067,948],{"class":448},[147,84069,51765],{"class":397},[147,84071,1565],{"class":157},[147,84073,84074,84076,84078,84080,84082],{"class":149,"line":16883},[147,84075,62273],{"class":448},[147,84077,51710],{"class":157},[147,84079,1099],{"class":448},[147,84081,51765],{"class":397},[147,84083,1565],{"class":157},[147,84085,84086],{"class":149,"line":16906},[147,84087,2461],{"class":157},[147,84089,84090],{"class":149,"line":16912},[147,84091,2674],{"emptyLinePlaceholder":324},[147,84093,84094,84096,84099],{"class":149,"line":16935},[147,84095,78897],{"class":2237},[147,84097,84098],{"class":2237}," .count",[147,84100,15845],{"class":157},[147,84102,84103,84105,84107,84109],{"class":149,"line":16949},[147,84104,62110],{"class":448},[147,84106,51710],{"class":157},[147,84108,616],{"class":448},[147,84110,1565],{"class":157},[147,84112,84113,84115,84117,84120],{"class":149,"line":16969},[147,84114,57689],{"class":448},[147,84116,51710],{"class":157},[147,84118,84119],{"class":448},"#aaa",[147,84121,1565],{"class":157},[147,84123,84124],{"class":149,"line":16975},[147,84125,2461],{"class":157},[147,84127,84128],{"class":149,"line":16986},[147,84129,2674],{"emptyLinePlaceholder":324},[147,84131,84132,84134],{"class":149,"line":17009},[147,84133,72748],{"class":2237},[147,84135,15845],{"class":157},[147,84137,84138,84140,84142,84144,84146],{"class":149,"line":17031},[147,84139,55044],{"class":448},[147,84141,51710],{"class":157},[147,84143,78846],{"class":448},[147,84145,51765],{"class":397},[147,84147,1565],{"class":157},[147,84149,84150,84152,84154,84156,84158],{"class":149,"line":17036},[147,84151,54979],{"class":448},[147,84153,51710],{"class":157},[147,84155,590],{"class":448},[147,84157,51829],{"class":448},[147,84159,1565],{"class":157},[147,84161,84162,84164,84166,84168],{"class":149,"line":17042},[147,84163,55282],{"class":448},[147,84165,51710],{"class":157},[147,84167,51750],{"class":448},[147,84169,1565],{"class":157},[147,84171,84172,84174,84176,84178],{"class":149,"line":17056},[147,84173,55293],{"class":448},[147,84175,51710],{"class":157},[147,84177,51853],{"class":448},[147,84179,1565],{"class":157},[147,84181,84182,84185,84187,84189,84191,84193,84196],{"class":149,"line":17069},[147,84183,84184],{"class":448},"      border-top",[147,84186,51710],{"class":157},[147,84188,616],{"class":448},[147,84190,51765],{"class":397},[147,84192,51794],{"class":448},[147,84194,84195],{"class":448}," #4e4e4e",[147,84197,1565],{"class":157},[147,84199,84200,84202,84204,84206,84208],{"class":149,"line":17074},[147,84201,54968],{"class":448},[147,84203,51710],{"class":157},[147,84205,1099],{"class":448},[147,84207,51765],{"class":397},[147,84209,1565],{"class":157},[147,84211,84212],{"class":149,"line":17088},[147,84213,2461],{"class":157},[147,84215,84216],{"class":149,"line":17093},[147,84217,2674],{"emptyLinePlaceholder":324},[147,84219,84220,84222,84225],{"class":149,"line":17099},[147,84221,72748],{"class":2237},[147,84223,84224],{"class":2237}," .amount",[147,84226,15845],{"class":157},[147,84228,84229,84231,84233,84235,84237],{"class":149,"line":17104},[147,84230,55195],{"class":448},[147,84232,51710],{"class":157},[147,84234,1049],{"class":448},[147,84236,51765],{"class":397},[147,84238,1565],{"class":157},[147,84240,84241,84243,84245,84247],{"class":149,"line":17118},[147,84242,57689],{"class":448},[147,84244,51710],{"class":157},[147,84246,79212],{"class":448},[147,84248,1565],{"class":157},[147,84250,84251,84253,84255,84257],{"class":149,"line":17123},[147,84252,62607],{"class":448},[147,84254,51710],{"class":157},[147,84256,51762],{"class":448},[147,84258,1565],{"class":157},[147,84260,84261,84263,84265,84267,84269],{"class":149,"line":17128},[147,84262,62023],{"class":448},[147,84264,51710],{"class":157},[147,84266,1055],{"class":448},[147,84268,51765],{"class":397},[147,84270,1565],{"class":157},[147,84272,84273],{"class":149,"line":17142},[147,84274,2461],{"class":157},[147,84276,84277,84279,84281],{"class":149,"line":17154},[147,84278,52690],{"class":157},[147,84280,308],{"class":153},[147,84282,51580],{"class":157},[147,84284,84285,84287,84289],{"class":149,"line":17159},[147,84286,52058],{"class":157},[147,84288,51607],{"class":153},[147,84290,51580],{"class":157},[147,84292,84293],{"class":149,"line":17172},[147,84294,2674],{"emptyLinePlaceholder":324},[147,84296,84297,84299,84301],{"class":149,"line":17177},[147,84298,1309],{"class":157},[147,84300,52073],{"class":153},[147,84302,51580],{"class":157},[147,84304,84305,84307,84309,84311,84313,84315],{"class":149,"line":17182},[147,84306,52417],{"class":157},[147,84308,51884],{"class":153},[147,84310,53759],{"class":2237},[147,84312,445],{"class":157},[147,84314,62881],{"class":504},[147,84316,51580],{"class":157},[147,84318,84319,84321,84323],{"class":149,"line":17187},[147,84320,52690],{"class":157},[147,84322,51884],{"class":153},[147,84324,51580],{"class":157},[147,84326,84327,84329,84331,84333,84335,84337],{"class":149,"line":17200},[147,84328,52417],{"class":157},[147,84330,51884],{"class":153},[147,84332,53759],{"class":2237},[147,84334,445],{"class":157},[147,84336,62853],{"class":504},[147,84338,51580],{"class":157},[147,84340,84341,84343,84345,84348,84350,84352,84354,84357,84359,84361,84363,84365],{"class":149,"line":17205},[147,84342,51614],{"class":157},[147,84344,51884],{"class":153},[147,84346,84347],{"class":157},">合计：\u003C",[147,84349,147],{"class":153},[147,84351,53759],{"class":2237},[147,84353,445],{"class":157},[147,84355,84356],{"class":504},"\"amount\"",[147,84358,55587],{"class":157},[147,84360,147],{"class":153},[147,84362,55587],{"class":157},[147,84364,51884],{"class":153},[147,84366,51580],{"class":157},[147,84368,84369,84371,84373],{"class":149,"line":32907},[147,84370,52690],{"class":157},[147,84372,51884],{"class":153},[147,84374,51580],{"class":157},[147,84376,84377,84379,84381],{"class":149,"line":32913},[147,84378,52417],{"class":157},[147,84380,52086],{"class":153},[147,84382,51580],{"class":157},[147,84384,84385,84387,84389,84391],{"class":149,"line":32919},[147,84386,11495],{"class":397},[147,84388,79649],{"class":448},[147,84390,13838],{"class":397},[147,84392,55720],{"class":157},[147,84394,84395],{"class":149,"line":32925},[147,84396,79658],{"class":157},[147,84398,84399,84401,84403],{"class":149,"line":32931},[147,84400,79663],{"class":157},[147,84402,79666],{"class":504},[147,84404,31740],{"class":157},[147,84406,84407,84409,84411],{"class":149,"line":32942},[147,84408,79673],{"class":157},[147,84410,79676],{"class":504},[147,84412,31740],{"class":157},[147,84414,84415,84417,84420],{"class":149,"line":32948},[147,84416,79683],{"class":157},[147,84418,84419],{"class":448},"289.9",[147,84421,31740],{"class":157},[147,84423,84424,84426,84428],{"class":149,"line":32968},[147,84425,79693],{"class":157},[147,84427,79696],{"class":504},[147,84429,31740],{"class":157},[147,84431,84432,84435,84437],{"class":149,"line":32974},[147,84433,84434],{"class":157},"        count: ",[147,84436,477],{"class":448},[147,84438,31740],{"class":157},[147,84440,84441,84444,84447],{"class":149,"line":32985},[147,84442,84443],{"class":157},"        spec: { color: ",[147,84445,84446],{"class":504},"'白色'",[147,84448,55877],{"class":157},[147,84450,84451],{"class":149,"line":32991},[147,84452,78164],{"class":157},[147,84454,84455],{"class":149,"line":32997},[147,84456,79658],{"class":157},[147,84458,84459,84461,84463],{"class":149,"line":33003},[147,84460,79663],{"class":157},[147,84462,79757],{"class":504},[147,84464,31740],{"class":157},[147,84466,84467,84469,84471],{"class":149,"line":33009},[147,84468,79673],{"class":157},[147,84470,79766],{"class":504},[147,84472,31740],{"class":157},[147,84474,84475,84477,84480],{"class":149,"line":33015},[147,84476,79683],{"class":157},[147,84478,84479],{"class":448},"109.8",[147,84481,31740],{"class":157},[147,84483,84484,84486,84488],{"class":149,"line":33021},[147,84485,79693],{"class":157},[147,84487,79784],{"class":504},[147,84489,31740],{"class":157},[147,84491,84492,84494,84496],{"class":149,"line":33027},[147,84493,84434],{"class":157},[147,84495,471],{"class":448},[147,84497,31740],{"class":157},[147,84499,84500,84503,84505,84507,84509],{"class":149,"line":33047},[147,84501,84502],{"class":157},"        spec: { size: ",[147,84504,82175],{"class":504},[147,84506,55737],{"class":157},[147,84508,82180],{"class":504},[147,84510,55877],{"class":157},[147,84512,84513],{"class":149,"line":33053},[147,84514,78164],{"class":157},[147,84516,84517],{"class":149,"line":33069},[147,84518,79658],{"class":157},[147,84520,84521,84523,84525],{"class":149,"line":33075},[147,84522,79663],{"class":157},[147,84524,79801],{"class":504},[147,84526,31740],{"class":157},[147,84528,84529,84531,84533],{"class":149,"line":33089},[147,84530,79673],{"class":157},[147,84532,79810],{"class":504},[147,84534,31740],{"class":157},[147,84536,84537,84539,84542],{"class":149,"line":33095},[147,84538,79683],{"class":157},[147,84540,84541],{"class":448},"488",[147,84543,31740],{"class":157},[147,84545,84546,84548,84550],{"class":149,"line":33110},[147,84547,79693],{"class":157},[147,84549,79828],{"class":504},[147,84551,31740],{"class":157},[147,84553,84554,84556,84558],{"class":149,"line":33116},[147,84555,84434],{"class":157},[147,84557,616],{"class":448},[147,84559,31740],{"class":157},[147,84561,84562,84564,84567,84570,84573],{"class":149,"line":33125},[147,84563,84443],{"class":157},[147,84565,84566],{"class":504},"'青色'",[147,84568,84569],{"class":157},", sum: ",[147,84571,84572],{"class":504},"'一大四小'",[147,84574,55877],{"class":157},[147,84576,84577],{"class":149,"line":33131},[147,84578,78164],{"class":157},[147,84580,84581],{"class":149,"line":33140},[147,84582,79658],{"class":157},[147,84584,84585,84587,84589],{"class":149,"line":33146},[147,84586,79663],{"class":157},[147,84588,79845],{"class":504},[147,84590,31740],{"class":157},[147,84592,84593,84595,84597],{"class":149,"line":33152},[147,84594,79673],{"class":157},[147,84596,79854],{"class":504},[147,84598,31740],{"class":157},[147,84600,84601,84603,84606],{"class":149,"line":33161},[147,84602,79683],{"class":157},[147,84604,84605],{"class":448},"139",[147,84607,31740],{"class":157},[147,84609,84610,84612,84614],{"class":149,"line":33167},[147,84611,79693],{"class":157},[147,84613,79872],{"class":504},[147,84615,31740],{"class":157},[147,84617,84618,84620,84622],{"class":149,"line":33178},[147,84619,84434],{"class":157},[147,84621,616],{"class":448},[147,84623,31740],{"class":157},[147,84625,84626,84628,84631,84633,84636],{"class":149,"line":33184},[147,84627,84502],{"class":157},[147,84629,84630],{"class":504},"'小号'",[147,84632,55737],{"class":157},[147,84634,84635],{"class":504},"'紫色'",[147,84637,55743],{"class":157},[147,84639,84640,84643],{"class":149,"line":33203},[147,84641,84642],{"class":157},"        gift: ",[147,84644,84645],{"class":504},"'50g茶叶,清洗球'\n",[147,84647,84648],{"class":149,"line":33209},[147,84649,52671],{"class":157},[147,84651,84652],{"class":149,"line":33220},[147,84653,53382],{"class":157},[147,84655,84656],{"class":149,"line":33226},[147,84657,84658],{"class":458},"    \u002F\u002F  1.根据数据渲染页面\n",[147,84660,84661,84663,84665,84667,84669,84671,84673,84675,84677,84679,84681,84683],{"class":149,"line":33246},[147,84662,52680],{"class":157},[147,84664,54672],{"class":2237},[147,84666,401],{"class":157},[147,84668,80173],{"class":504},[147,84670,74522],{"class":157},[147,84672,445],{"class":397},[147,84674,80320],{"class":157},[147,84676,74317],{"class":2237},[147,84678,401],{"class":157},[147,84680,80067],{"class":5490},[147,84682,80070],{"class":397},[147,84684,15845],{"class":157},[147,84686,84687],{"class":149,"line":33262},[147,84688,84689],{"class":458},"      \u002F\u002F 对象解构\n",[147,84691,84692,84694,84696,84698,84700,84702,84704,84707,84709,84711,84713,84716,84718,84721,84723,84725],{"class":149,"line":33268},[147,84693,58501],{"class":397},[147,84695,80079],{"class":157},[147,84697,80092],{"class":448},[147,84699,12709],{"class":157},[147,84701,80082],{"class":448},[147,84703,12709],{"class":157},[147,84705,84706],{"class":448},"count",[147,84708,12709],{"class":157},[147,84710,80087],{"class":448},[147,84712,12709],{"class":157},[147,84714,84715],{"class":448},"spec",[147,84717,12709],{"class":157},[147,84719,84720],{"class":448},"gift",[147,84722,80095],{"class":157},[147,84724,445],{"class":397},[147,84726,80100],{"class":157},[147,84728,84729],{"class":149,"line":33282},[147,84730,84731],{"class":458},"      \u002F\u002F 规格文字模块处理\n",[147,84733,84734,84736,84739,84741,84743,84745,84747,84749,84751,84753],{"class":149,"line":33288},[147,84735,58501],{"class":397},[147,84737,84738],{"class":448}," text",[147,84740,13838],{"class":397},[147,84742,82210],{"class":157},[147,84744,82213],{"class":2237},[147,84746,82216],{"class":157},[147,84748,74496],{"class":2237},[147,84750,401],{"class":157},[147,84752,82223],{"class":504},[147,84754,407],{"class":157},[147,84756,84757],{"class":149,"line":33294},[147,84758,84759],{"class":458},"      \u002F\u002F 处理赠品模块\n",[147,84761,84762,84764,84766,84768,84771,84773,84775,84777,84779,84782,84784,84786,84788,84790,84792,84795,84797,84800,84802,84804,84806,84808,84810,84812],{"class":149,"line":33305},[147,84763,58501],{"class":397},[147,84765,74192],{"class":448},[147,84767,13838],{"class":397},[147,84769,84770],{"class":157}," gift ",[147,84772,1385],{"class":397},[147,84774,83384],{"class":157},[147,84776,83387],{"class":2237},[147,84778,401],{"class":157},[147,84780,84781],{"class":504},"','",[147,84783,31100],{"class":157},[147,84785,74317],{"class":2237},[147,84787,401],{"class":157},[147,84789,80067],{"class":5490},[147,84791,80070],{"class":397},[147,84793,84794],{"class":504}," `\u003Cspan class=\"tag\">【赠品】${",[147,84796,80067],{"class":157},[147,84798,84799],{"class":504},"}\u003C\u002Fspan>`",[147,84801,31100],{"class":157},[147,84803,74496],{"class":2237},[147,84805,401],{"class":157},[147,84807,74501],{"class":504},[147,84809,13988],{"class":157},[147,84811,1258],{"class":397},[147,84813,70377],{"class":504},[147,84815,84816],{"class":149,"line":33311},[147,84817,84818],{"class":458},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[147,84820,84821,84823,84826,84828,84831,84833,84835,84837,84840,84842,84844,84846,84849,84851,84853],{"class":149,"line":33317},[147,84822,58501],{"class":397},[147,84824,84825],{"class":448}," subtotal",[147,84827,13838],{"class":397},[147,84829,84830],{"class":157}," ((price ",[147,84832,854],{"class":397},[147,84834,6028],{"class":448},[147,84836,6792],{"class":397},[147,84838,84839],{"class":157}," count) ",[147,84841,983],{"class":397},[147,84843,6028],{"class":448},[147,84845,31100],{"class":157},[147,84847,84848],{"class":2237},"toFixed",[147,84850,401],{"class":157},[147,84852,477],{"class":448},[147,84854,407],{"class":157},[147,84856,84857],{"class":149,"line":33327},[147,84858,2674],{"emptyLinePlaceholder":324},[147,84860,84861,84863],{"class":149,"line":33333},[147,84862,74255],{"class":397},[147,84864,70441],{"class":504},[147,84866,84867],{"class":149,"line":33344},[147,84868,84869],{"class":504},"        \u003Cdiv class=\"item\">\n",[147,84871,84872,84875,84877],{"class":149,"line":33350},[147,84873,84874],{"class":504},"          \u003Cimg src=\"${",[147,84876,80092],{"class":157},[147,84878,80124],{"class":504},[147,84880,84881,84884,84886,84889,84891],{"class":149,"line":33360},[147,84882,84883],{"class":504},"          \u003Cp class=\"name\">${",[147,84885,80082],{"class":157},[147,84887,84888],{"class":504},"}${",[147,84890,1574],{"class":157},[147,84892,80134],{"class":504},[147,84894,84895,84898,84900],{"class":149,"line":33365},[147,84896,84897],{"class":504},"          \u003Cp class=\"spec\">${",[147,84899,5461],{"class":157},[147,84901,80134],{"class":504},[147,84903,84904,84907,84909,84911,84913,84915,84917,84919],{"class":149,"line":33371},[147,84905,84906],{"class":504},"          \u003Cp class=\"price\">${",[147,84908,80087],{"class":157},[147,84910,957],{"class":504},[147,84912,84848],{"class":2237},[147,84914,401],{"class":504},[147,84916,477],{"class":448},[147,84918,828],{"class":504},[147,84920,80134],{"class":504},[147,84922,84923,84926,84928],{"class":149,"line":33420},[147,84924,84925],{"class":504},"          \u003Cp class=\"count\">x${",[147,84927,84706],{"class":157},[147,84929,80134],{"class":504},[147,84931,84932,84935,84938],{"class":149,"line":33467},[147,84933,84934],{"class":504},"          \u003Cp class=\"sub-total\">${",[147,84936,84937],{"class":157},"subtotal",[147,84939,80134],{"class":504},[147,84941,84942],{"class":149,"line":33472},[147,84943,84944],{"class":504},"        \u003C\u002Fdiv> \n",[147,84946,84947],{"class":149,"line":33478},[147,84948,84949],{"class":504},"             `\n",[147,84951,84952,84955,84957,84959,84961],{"class":149,"line":33497},[147,84953,84954],{"class":157},"    }).",[147,84956,74496],{"class":2237},[147,84958,401],{"class":157},[147,84960,74501],{"class":504},[147,84962,407],{"class":157},[147,84964,84965],{"class":149,"line":33503},[147,84966,84967],{"class":458},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[147,84969,84970,84972,84974,84976,84978,84981,84983,84986,84988,84990,84992,84995,84998,85000,85003,85005,85007,85009,85012,85014,85016,85018,85020],{"class":149,"line":33523},[147,84971,11495],{"class":397},[147,84973,63058],{"class":448},[147,84975,13838],{"class":397},[147,84977,80320],{"class":157},[147,84979,84980],{"class":2237},"reduce",[147,84982,2650],{"class":157},[147,84984,84985],{"class":5490},"prev",[147,84987,12709],{"class":157},[147,84989,80067],{"class":5490},[147,84991,13988],{"class":157},[147,84993,84994],{"class":397},"=>",[147,84996,84997],{"class":157}," prev ",[147,84999,880],{"class":397},[147,85001,85002],{"class":157}," (item.price ",[147,85004,854],{"class":397},[147,85006,6028],{"class":448},[147,85008,6792],{"class":397},[147,85010,85011],{"class":157}," item.count) ",[147,85013,983],{"class":397},[147,85015,6028],{"class":448},[147,85017,12709],{"class":157},[147,85019,590],{"class":448},[147,85021,407],{"class":157},[147,85023,85024,85026,85028,85030,85033,85035,85037,85040,85042,85044,85046],{"class":149,"line":33529},[147,85025,52680],{"class":157},[147,85027,54672],{"class":2237},[147,85029,401],{"class":157},[147,85031,85032],{"class":504},"'.amount'",[147,85034,74522],{"class":157},[147,85036,445],{"class":397},[147,85038,85039],{"class":157}," total.",[147,85041,84848],{"class":2237},[147,85043,401],{"class":157},[147,85045,477],{"class":448},[147,85047,407],{"class":157},[147,85049,85050,85052,85054],{"class":149,"line":33535},[147,85051,52690],{"class":157},[147,85053,52086],{"class":153},[147,85055,51580],{"class":157},[147,85057,85058,85060,85062],{"class":149,"line":33545},[147,85059,52058],{"class":157},[147,85061,52073],{"class":153},[147,85063,51580],{"class":157},[147,85065,85066],{"class":149,"line":33550},[147,85067,2674],{"emptyLinePlaceholder":324},[147,85069,85070,85072,85074],{"class":149,"line":33556},[147,85071,52058],{"class":157},[147,85073,50909],{"class":153},[147,85075,51580],{"class":157},[14,85077,85079],{"id":85078},"_411-编程思想","4.11 编程思想",[367,85081,85083],{"id":85082},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,85085,85086,85089],{},[234,85087,85088],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,85091,85092],{},"调用就可以了",[19,85094,85095],{},[29,85096],{"alt":143,"src":85097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[367,85099,85101],{"id":85100},"_4112-面向对象","4.11.2 面向对象",[19,85103,85104],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,85106,85107],{},[29,85108],{"alt":143,"src":85109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,85111,85112],{},"面向对象的特性：",[1406,85114,85115,85118,85121],{},[353,85116,85117],{},"封装性",[353,85119,85120],{},"继承性",[353,85122,85123],{},"多态性",[367,85125,85127],{"id":85126},"_4113-两者比较","4.11.3 两者比较",[19,85129,85130],{},[29,85131],{"alt":143,"src":85132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,85134,85136],{"id":85135},"_412-构造函数回顾","4.12 构造函数回顾",[19,85138,85139],{},[29,85140],{"alt":143,"src":85141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,85143,85144],{},[29,85145],{"alt":143,"src":85146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,85148,85149],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,85151,85152],{},[29,85153],{"alt":143,"src":85154},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,85156,85158],{"id":85157},"_413-原型","4.13 原型",[367,85160,85162],{"id":85161},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,85164,85165],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,85167,85168],{},[29,85169],{"alt":143,"src":85170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,85172,85173],{},[29,85174],{"alt":143,"src":85175},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,85177,85178],{},"原型是构造函数的属性，它也是一个对象",[19,85180,85181],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,85183,85184],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[138,85186,85188],{"className":53340,"code":85187,"language":53342,"meta":143,"style":143},"\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",[51,85189,85190,85198,85203,85211,85216,85221,85226,85231,85236,85240,85244,85248,85253,85258,85262,85267,85272,85277,85282,85287,85291,85299],{"__ignoreMap":143},[147,85191,85192,85194,85196],{"class":149,"line":150},[147,85193,1309],{"class":157},[147,85195,52073],{"class":153},[147,85197,51580],{"class":157},[147,85199,85200],{"class":149,"line":312},[147,85201,85202],{"class":458},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[147,85204,85205,85207,85209],{"class":149,"line":1454},[147,85206,52417],{"class":157},[147,85208,52086],{"class":153},[147,85210,51580],{"class":157},[147,85212,85213],{"class":149,"line":1469},[147,85214,85215],{"class":157},"    function Star(uname, age) {\n",[147,85217,85218],{"class":149,"line":1475},[147,85219,85220],{"class":157},"      this.uname = uname,\n",[147,85222,85223],{"class":149,"line":1489},[147,85224,85225],{"class":157},"        this.age = age\n",[147,85227,85228],{"class":149,"line":1495},[147,85229,85230],{"class":157},"      \u002F\u002F this.sing = function () {\n",[147,85232,85233],{"class":149,"line":1586},[147,85234,85235],{"class":157},"      \u002F\u002F   console.log('唱歌')\n",[147,85237,85238],{"class":149,"line":1592},[147,85239,2674],{"emptyLinePlaceholder":324},[147,85241,85242],{"class":149,"line":1604},[147,85243,60310],{"class":157},[147,85245,85246],{"class":149,"line":1886},[147,85247,2461],{"class":157},[147,85249,85250],{"class":149,"line":1891},[147,85251,85252],{"class":157},"    Star.prototype.sing = function () {\n",[147,85254,85255],{"class":149,"line":1897},[147,85256,85257],{"class":157},"      console.log('唱歌')\n",[147,85259,85260],{"class":149,"line":1902},[147,85261,2461],{"class":157},[147,85263,85264],{"class":149,"line":1916},[147,85265,85266],{"class":157},"    \u002F\u002F console.dir(Star.prototype)\n",[147,85268,85269],{"class":149,"line":1921},[147,85270,85271],{"class":157},"    const pink = new Star('pink', 18)\n",[147,85273,85274],{"class":149,"line":1927},[147,85275,85276],{"class":157},"    const red = new Star('red', 20)\n",[147,85278,85279],{"class":149,"line":1948},[147,85280,85281],{"class":157},"    pink.sing()\n",[147,85283,85284],{"class":149,"line":1953},[147,85285,85286],{"class":157},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[147,85288,85289],{"class":149,"line":1967},[147,85290,2674],{"emptyLinePlaceholder":324},[147,85292,85293,85295,85297],{"class":149,"line":1972},[147,85294,52690],{"class":157},[147,85296,52086],{"class":153},[147,85298,51580],{"class":157},[147,85300,85301,85303,85305],{"class":149,"line":2001},[147,85302,52058],{"class":157},[147,85304,52073],{"class":153},[147,85306,51580],{"class":157},[19,85308,85309],{},[29,85310],{"alt":143,"src":85311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[138,85313,85315],{"className":53340,"code":85314,"language":53342,"meta":143,"style":143},"\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",[51,85316,85317,85325,85333,85338,85343,85348,85353,85357,85362,85367,85372,85376,85381,85385,85389,85394,85398,85406],{"__ignoreMap":143},[147,85318,85319,85321,85323],{"class":149,"line":150},[147,85320,1309],{"class":157},[147,85322,52073],{"class":153},[147,85324,51580],{"class":157},[147,85326,85327,85329,85331],{"class":149,"line":312},[147,85328,52417],{"class":157},[147,85330,52086],{"class":153},[147,85332,51580],{"class":157},[147,85334,85335],{"class":149,"line":1454},[147,85336,85337],{"class":157},"    let that\n",[147,85339,85340],{"class":149,"line":1469},[147,85341,85342],{"class":157},"    function Star(uname) {\n",[147,85344,85345],{"class":149,"line":1475},[147,85346,85347],{"class":157},"      this.uname = uname\n",[147,85349,85350],{"class":149,"line":1489},[147,85351,85352],{"class":157},"      that = this\n",[147,85354,85355],{"class":149,"line":1495},[147,85356,2461],{"class":157},[147,85358,85359],{"class":149,"line":1586},[147,85360,85361],{"class":157},"    \u002F\u002F 实例对象是 ldh\n",[147,85363,85364],{"class":149,"line":1592},[147,85365,85366],{"class":157},"    const ldh = new Star('刘德华')\n",[147,85368,85369],{"class":149,"line":1604},[147,85370,85371],{"class":157},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[147,85373,85374],{"class":149,"line":1886},[147,85375,2674],{"emptyLinePlaceholder":324},[147,85377,85378],{"class":149,"line":1891},[147,85379,85380],{"class":157},"    Star.sing = function () {\n",[147,85382,85383],{"class":149,"line":1897},[147,85384,85257],{"class":157},[147,85386,85387],{"class":149,"line":1902},[147,85388,2461],{"class":157},[147,85390,85391],{"class":149,"line":1916},[147,85392,85393],{"class":157},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[147,85395,85396],{"class":149,"line":1921},[147,85397,2674],{"emptyLinePlaceholder":324},[147,85399,85400,85402,85404],{"class":149,"line":1927},[147,85401,52690],{"class":157},[147,85403,52086],{"class":153},[147,85405,51580],{"class":157},[147,85407,85408,85410,85412],{"class":149,"line":1948},[147,85409,52058],{"class":157},[147,85411,52073],{"class":153},[147,85413,51580],{"class":157},[19,85415,85416],{},"构造函数的this指向的是实例对象；",[19,85418,85419],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[367,85421,85423],{"id":85422},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,85425,85426],{},[29,85427],{"alt":143,"src":85428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[138,85430,85432],{"className":53340,"code":85431,"language":53342,"meta":143,"style":143},"\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",[51,85433,85434,85442,85450,85455,85460,85465,85470,85475,85480,85485,85490,85495,85500,85504,85509,85514,85519,85524,85528,85533,85538,85543,85548,85552,85557,85562,85567,85572,85576,85581,85585,85593],{"__ignoreMap":143},[147,85435,85436,85438,85440],{"class":149,"line":150},[147,85437,1309],{"class":157},[147,85439,52073],{"class":153},[147,85441,51580],{"class":157},[147,85443,85444,85446,85448],{"class":149,"line":312},[147,85445,52417],{"class":157},[147,85447,52086],{"class":153},[147,85449,51580],{"class":157},[147,85451,85452],{"class":149,"line":1454},[147,85453,85454],{"class":157},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[147,85456,85457],{"class":149,"line":1469},[147,85458,85459],{"class":157},"    const arr = [1, 2, 3]\n",[147,85461,85462],{"class":149,"line":1475},[147,85463,85464],{"class":157},"    \u002F\u002F 自己定义数组的扩展方法\n",[147,85466,85467],{"class":149,"line":1489},[147,85468,85469],{"class":157},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[147,85471,85472],{"class":149,"line":1495},[147,85473,85474],{"class":157},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[147,85476,85477],{"class":149,"line":1586},[147,85478,85479],{"class":157},"    \u002F\u002F ①.最大值\n",[147,85481,85482],{"class":149,"line":1592},[147,85483,85484],{"class":157},"    Array.prototype.max = function () {\n",[147,85486,85487],{"class":149,"line":1604},[147,85488,85489],{"class":157},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[147,85491,85492],{"class":149,"line":1886},[147,85493,85494],{"class":157},"      return Math.max(...this)\n",[147,85496,85497],{"class":149,"line":1891},[147,85498,85499],{"class":157},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[147,85501,85502],{"class":149,"line":1897},[147,85503,2461],{"class":157},[147,85505,85506],{"class":149,"line":1902},[147,85507,85508],{"class":157},"    console.log(arr.max())\n",[147,85510,85511],{"class":149,"line":1916},[147,85512,85513],{"class":157},"    \u002F\u002F ②最小值\n",[147,85515,85516],{"class":149,"line":1921},[147,85517,85518],{"class":157},"    Array.prototype.min = function () {\n",[147,85520,85521],{"class":149,"line":1927},[147,85522,85523],{"class":157},"      return Math.min(...this)\n",[147,85525,85526],{"class":149,"line":1948},[147,85527,2461],{"class":157},[147,85529,85530],{"class":149,"line":1953},[147,85531,85532],{"class":157},"    console.log(arr.min())\n",[147,85534,85535],{"class":149,"line":1967},[147,85536,85537],{"class":157},"    \u002F\u002F③求和\n",[147,85539,85540],{"class":149,"line":1972},[147,85541,85542],{"class":157},"    Array.prototype.sum = function () {\n",[147,85544,85545],{"class":149,"line":2001},[147,85546,85547],{"class":157},"      return this.reduce((prev, current) => prev + current, 0)\n",[147,85549,85550],{"class":149,"line":2006},[147,85551,2461],{"class":157},[147,85553,85554],{"class":149,"line":2023},[147,85555,85556],{"class":157},"    console.log(arr.sum())\n",[147,85558,85559],{"class":149,"line":2028},[147,85560,85561],{"class":157},"    \u002F\u002F ③排序\n",[147,85563,85564],{"class":149,"line":2033},[147,85565,85566],{"class":157},"    Array.prototype.rever = function () {\n",[147,85568,85569],{"class":149,"line":2038},[147,85570,85571],{"class":157},"      return this.reverse()\n",[147,85573,85574],{"class":149,"line":2052},[147,85575,2461],{"class":157},[147,85577,85578],{"class":149,"line":2057},[147,85579,85580],{"class":157},"    console.log(arr.rever())\n",[147,85582,85583],{"class":149,"line":2851},[147,85584,2674],{"emptyLinePlaceholder":324},[147,85586,85587,85589,85591],{"class":149,"line":2865},[147,85588,52690],{"class":157},[147,85590,52086],{"class":153},[147,85592,51580],{"class":157},[147,85594,85595,85597,85599],{"class":149,"line":2873},[147,85596,52058],{"class":157},[147,85598,52073],{"class":153},[147,85600,51580],{"class":157},[19,85602,85603],{},[29,85604],{"alt":143,"src":85605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[367,85607,85609],{"id":85608},"_4133-constructor-属性","4.13.3 constructor 属性",[19,85611,85612],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,85614,85615],{},[29,85616],{"alt":143,"src":85617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[138,85619,85621],{"className":53340,"code":85620,"language":53342,"meta":143,"style":143},"\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",[51,85622,85623,85631,85639,85644,85649,85653,85658,85663,85668,85676],{"__ignoreMap":143},[147,85624,85625,85627,85629],{"class":149,"line":150},[147,85626,1309],{"class":157},[147,85628,52073],{"class":153},[147,85630,51580],{"class":157},[147,85632,85633,85635,85637],{"class":149,"line":312},[147,85634,52417],{"class":157},[147,85636,52086],{"class":153},[147,85638,51580],{"class":157},[147,85640,85641],{"class":149,"line":1454},[147,85642,85643],{"class":157},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[147,85645,85646],{"class":149,"line":1469},[147,85647,85648],{"class":157},"    function Star() {\n",[147,85650,85651],{"class":149,"line":1475},[147,85652,2461],{"class":157},[147,85654,85655],{"class":149,"line":1489},[147,85656,85657],{"class":157},"    const ldh = new Star()\n",[147,85659,85660],{"class":149,"line":1495},[147,85661,85662],{"class":157},"    console.log(Star.prototype)\n",[147,85664,85665],{"class":149,"line":1586},[147,85666,85667],{"class":157},"    console.log(Star.prototype.constructor === Star)\n",[147,85669,85670,85672,85674],{"class":149,"line":1592},[147,85671,52690],{"class":157},[147,85673,52086],{"class":153},[147,85675,51580],{"class":157},[147,85677,85678,85680,85682],{"class":149,"line":1604},[147,85679,52058],{"class":157},[147,85681,52073],{"class":153},[147,85683,51580],{"class":157},[19,85685,85686],{},[29,85687],{"alt":143,"src":85688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,85690,85691],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[138,85693,85695],{"className":53340,"code":85694,"language":53342,"meta":143,"style":143},"  \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",[51,85696,85697,85705,85709,85713,85717,85722,85727,85732,85736,85741,85746,85751,85756,85761,85766,85770,85774,85779,85784,85789,85793,85798,85803,85807,85811,85815],{"__ignoreMap":143},[147,85698,85699,85701,85703],{"class":149,"line":150},[147,85700,52417],{"class":157},[147,85702,52086],{"class":153},[147,85704,51580],{"class":157},[147,85706,85707],{"class":149,"line":312},[147,85708,85643],{"class":157},[147,85710,85711],{"class":149,"line":1454},[147,85712,85648],{"class":157},[147,85714,85715],{"class":149,"line":1469},[147,85716,2461],{"class":157},[147,85718,85719],{"class":149,"line":1475},[147,85720,85721],{"class":157},"    \u002F\u002F const ldh = new Star()\n",[147,85723,85724],{"class":149,"line":1489},[147,85725,85726],{"class":157},"    \u002F\u002F console.log(Star.prototype)\n",[147,85728,85729],{"class":149,"line":1495},[147,85730,85731],{"class":157},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[147,85733,85734],{"class":149,"line":1586},[147,85735,2674],{"emptyLinePlaceholder":324},[147,85737,85738],{"class":149,"line":1592},[147,85739,85740],{"class":157},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[147,85742,85743],{"class":149,"line":1604},[147,85744,85745],{"class":157},"    \u002F\u002F Star.prototype.sing = function () {\n",[147,85747,85748],{"class":149,"line":1886},[147,85749,85750],{"class":157},"    \u002F\u002F   console.log('唱歌')\n",[147,85752,85753],{"class":149,"line":1891},[147,85754,85755],{"class":157},"    \u002F\u002F }\n",[147,85757,85758],{"class":149,"line":1897},[147,85759,85760],{"class":157},"    \u002F\u002F Star.prototype.dance = function () {\n",[147,85762,85763],{"class":149,"line":1902},[147,85764,85765],{"class":157},"    \u002F\u002F   console.log('跳舞')\n",[147,85767,85768],{"class":149,"line":1916},[147,85769,85755],{"class":157},[147,85771,85772],{"class":149,"line":1921},[147,85773,85662],{"class":157},[147,85775,85776],{"class":149,"line":1927},[147,85777,85778],{"class":157},"    Star.prototype = {\n",[147,85780,85781],{"class":149,"line":1948},[147,85782,85783],{"class":157},"      sing: function () {\n",[147,85785,85786],{"class":149,"line":1953},[147,85787,85788],{"class":157},"        console.log('唱歌')\n",[147,85790,85791],{"class":149,"line":1967},[147,85792,78164],{"class":157},[147,85794,85795],{"class":149,"line":1972},[147,85796,85797],{"class":157},"      dance: function () {\n",[147,85799,85800],{"class":149,"line":2001},[147,85801,85802],{"class":157},"        console.log('跳舞')\n",[147,85804,85805],{"class":149,"line":2006},[147,85806,52671],{"class":157},[147,85808,85809],{"class":149,"line":2023},[147,85810,2461],{"class":157},[147,85812,85813],{"class":149,"line":2028},[147,85814,85662],{"class":157},[147,85816,85817,85819,85821],{"class":149,"line":2033},[147,85818,52690],{"class":157},[147,85820,52086],{"class":153},[147,85822,51580],{"class":157},[19,85824,85825],{},"进行输出结果后会发现：",[19,85827,85828],{},[29,85829],{"alt":143,"src":85830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,85832,85833],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,85835,85836],{},"所以，要重新指回创造这个原型对象的构造函数",[138,85838,85840],{"className":71486,"code":85839,"language":71488,"meta":143,"style":143},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[51,85841,85842,85856,85861,85866,85877,85890,85895,85906,85920,85924],{"__ignoreMap":143},[147,85843,85844,85847,85849,85852,85854],{"class":149,"line":150},[147,85845,85846],{"class":448},"Star",[147,85848,957],{"class":157},[147,85850,85851],{"class":448},"prototype",[147,85853,13838],{"class":397},[147,85855,15845],{"class":157},[147,85857,85858],{"class":149,"line":312},[147,85859,85860],{"class":458},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[147,85862,85863],{"class":149,"line":1454},[147,85864,85865],{"class":157},"  constructor: Star,\n",[147,85867,85868,85871,85873,85875],{"class":149,"line":1469},[147,85869,85870],{"class":2237},"  sing",[147,85872,51710],{"class":157},[147,85874,54722],{"class":397},[147,85876,54725],{"class":157},[147,85878,85879,85881,85883,85885,85888],{"class":149,"line":1475},[147,85880,74026],{"class":157},[147,85882,58520],{"class":2237},[147,85884,401],{"class":157},[147,85886,85887],{"class":504},"'唱歌'",[147,85889,407],{"class":157},[147,85891,85892],{"class":149,"line":1489},[147,85893,85894],{"class":157},"   },\n",[147,85896,85897,85900,85902,85904],{"class":149,"line":1495},[147,85898,85899],{"class":2237},"   dance",[147,85901,51710],{"class":157},[147,85903,54722],{"class":397},[147,85905,54725],{"class":157},[147,85907,85908,85911,85913,85915,85918],{"class":149,"line":1586},[147,85909,85910],{"class":157},"     console.",[147,85912,58520],{"class":2237},[147,85914,401],{"class":157},[147,85916,85917],{"class":504},"'跳舞'",[147,85919,407],{"class":157},[147,85921,85922],{"class":149,"line":1592},[147,85923,4583],{"class":157},[147,85925,85926],{"class":149,"line":1604},[147,85927,1839],{"class":157},[19,85929,85930],{},[29,85931],{"alt":143,"src":85932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,85934,85935],{},"总结1：",[19,85937,85938],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,85940,85941],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,85943,85944],{},"constructor指的是他的来源",[19,85946,85947],{},[29,85948],{"alt":143,"src":85949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,85951,85952],{},[29,85953],{"alt":143,"src":85954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,85956,85957],{},"总结2：",[19,85959,85960],{},[29,85961],{"alt":143,"src":85962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,85964,85965],{},[29,85966],{"alt":143,"src":85967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,85969,85970],{},[29,85971],{"alt":143,"src":85972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[367,85974,85976],{"id":85975},"_4134-对象原型","4.13.4 对象原型",[19,85978,85979],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,85981,85982],{},"对象原型就是__proto__这个属性",[19,85984,85985],{},[29,85986],{"alt":143,"src":85987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,85989,85990],{},[29,85991],{"alt":143,"src":85992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,85994,85995],{},[29,85996],{"alt":143,"src":85997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,85999,86000],{},[29,86001],{"alt":143,"src":86002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[138,86004,86006],{"className":53340,"code":86005,"language":53342,"meta":143,"style":143},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[51,86007,86008,86016,86024,86028,86032,86036,86041,86049],{"__ignoreMap":143},[147,86009,86010,86012,86014],{"class":149,"line":150},[147,86011,1309],{"class":157},[147,86013,52073],{"class":153},[147,86015,51580],{"class":157},[147,86017,86018,86020,86022],{"class":149,"line":312},[147,86019,52417],{"class":157},[147,86021,52086],{"class":153},[147,86023,51580],{"class":157},[147,86025,86026],{"class":149,"line":1454},[147,86027,85648],{"class":157},[147,86029,86030],{"class":149,"line":1469},[147,86031,2461],{"class":157},[147,86033,86034],{"class":149,"line":1475},[147,86035,85657],{"class":157},[147,86037,86038],{"class":149,"line":1489},[147,86039,86040],{"class":157},"    console.log(ldh)\n",[147,86042,86043,86045,86047],{"class":149,"line":1495},[147,86044,52690],{"class":157},[147,86046,52086],{"class":153},[147,86048,51580],{"class":157},[147,86050,86051,86053,86055],{"class":149,"line":1586},[147,86052,52058],{"class":157},[147,86054,52073],{"class":153},[147,86056,51580],{"class":157},[19,86058,86059],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,86061,86062],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,86064,86065],{},[29,86066],{"alt":143,"src":86067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,86069,86070],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,86072,86073],{},"对象原型指向原型对象",[19,86075,86076],{},[29,86077],{"alt":143,"src":86078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,86080,86081],{},[29,86082],{"alt":143,"src":86083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,86085,86086],{},[29,86087],{"alt":143,"src":86088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[367,86090,86092],{"id":86091},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,86094,86095],{},[29,86096],{"alt":143,"src":86097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[350,86099,86100,86103,86106,86109],{},[353,86101,86102],{},"构造函数通过new的形式实例化得到实例对象",[353,86104,86105],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[353,86107,86108],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[353,86110,86111],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,86113,86114],{},[29,86115],{"alt":143,"src":86116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,86118,86119],{},"题目梳理：",[19,86121,86122],{},[29,86123],{"alt":143,"src":86124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[367,86126,86128],{"id":86127},"_4136-原型继承","4.13.6 原型继承",[19,86130,86131],{},[29,86132],{"alt":143,"src":86133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,86135,86136],{},[29,86137],{"alt":143,"src":86138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,86140,86141],{},[29,86142],{"alt":143,"src":86143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,86145,86146],{},[29,86147],{"alt":143,"src":86148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,86150,86151],{},[29,86152],{"alt":143,"src":86153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,86155,86156],{},[29,86157],{"alt":143,"src":86158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,86160,86161],{},[29,86162],{"alt":143,"src":86163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,86165,86166],{},[29,86167],{"alt":143,"src":86168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,86170,86171],{},"回顾：构造函数每次new得到对象都是不同的",[367,86173,86175],{"id":86174},"_4137-原型链","4.13.7 原型链",[19,86177,86178],{},[29,86179],{"alt":143,"src":86180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,86182,86183],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,86185,86186],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,86188,86189],{},"大哥是Object",[19,86191,86192],{},[29,86193],{"alt":143,"src":86194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,86196,86197],{},[29,86198],{"alt":143,"src":86199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,86201,86202],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,86204,86205],{},"万物皆对象",[367,86207,86209],{"id":86208},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,86211,86212],{},"模态框",[19,86214,86215],{},"以后遇见这个效果直接使用这个就行",[19,86217,86218],{},[29,86219],{"alt":143,"src":86220},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,86222,86223],{},[29,86224],{"alt":143,"src":86225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,86227,86228],{},[29,86229],{"alt":143,"src":86230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,86232,86233],{},[29,86234],{"alt":143,"src":86235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,86237,86238],{},"补充知识点：",[350,86240,86241],{},[353,86242,86243],{},"append()",[19,86245,86246],{},[29,86247],{"alt":143,"src":86248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[138,86250,86252],{"className":50907,"code":86251,"language":50909,"meta":143,"style":143},"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",[51,86253,86254,86259,86264,86269,86273,86277,86281,86286,86291,86296,86300],{"__ignoreMap":143},[147,86255,86256],{"class":149,"line":150},[147,86257,86258],{"class":157},"append(param1)\n",[147,86260,86261],{"class":149,"line":312},[147,86262,86263],{"class":157},"append(param1, param2)\n",[147,86265,86266],{"class":149,"line":1454},[147,86267,86268],{"class":157},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[147,86270,86271],{"class":149,"line":1469},[147,86272,2674],{"emptyLinePlaceholder":324},[147,86274,86275],{"class":149,"line":1475},[147,86276,2674],{"emptyLinePlaceholder":324},[147,86278,86279],{"class":149,"line":1489},[147,86280,2674],{"emptyLinePlaceholder":324},[147,86282,86283],{"class":149,"line":1495},[147,86284,86285],{"class":157},"let div = document.createElement(\"div\");\n",[147,86287,86288],{"class":149,"line":1586},[147,86289,86290],{"class":157},"let p = document.createElement(\"p\");\n",[147,86292,86293],{"class":149,"line":1592},[147,86294,86295],{"class":157},"div.append(p);\n",[147,86297,86298],{"class":149,"line":1604},[147,86299,2674],{"emptyLinePlaceholder":324},[147,86301,86302,86305,86307],{"class":149,"line":1886},[147,86303,86304],{"class":157},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[147,86306,19],{"class":153},[147,86308,86309],{"class":157},"> ]\n",[350,86311,86312],{"start":312},[353,86313,86314],{},"remove()",[19,86316,86317],{},"自己删自己",[19,86319,86320],{},[29,86321],{"alt":143,"src":86322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[138,86324,86326],{"className":50907,"code":86325,"language":50909,"meta":143,"style":143},"\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",[51,86327,86328,86338,86352,86356,86364,86378,86398,86410,86418,86425,86437,86450,86485,86497,86508,86520,86532,86544,86571,86581,86585,86589,86598,86610,86624,86634,86646,86650,86654,86664,86675,86685,86695,86708,86721,86731,86735,86739,86748,86758,86770,86774,86778,86787,86797,86807,86819,86823,86827,86837,86853,86864,86874,86884,86896,86908,86920,86924,86928,86941,86952,86956,86964,86972,86976,86984,87004,87024,87032,87037,87063,87068,87073,87092,87097,87109,87114,87125,87135,87145,87150,87155,87159,87164,87169,87174,87194,87199,87219,87224,87238,87243,87248,87253,87269,87273,87278,87307,87312,87317,87322,87333,87337,87341,87345,87350,87375,87380,87405,87410,87419,87423,87428,87453,87457,87482,87486,87495,87499,87504,87522,87532,87536,87544,87552,87556],{"__ignoreMap":143},[147,86329,86330,86332,86334,86336],{"class":149,"line":150},[147,86331,51571],{"class":157},[147,86333,51574],{"class":153},[147,86335,51577],{"class":2237},[147,86337,51580],{"class":157},[147,86339,86340,86342,86344,86346,86348,86350],{"class":149,"line":312},[147,86341,1309],{"class":157},[147,86343,50909],{"class":153},[147,86345,51589],{"class":2237},[147,86347,445],{"class":157},[147,86349,51594],{"class":504},[147,86351,51580],{"class":157},[147,86353,86354],{"class":149,"line":1454},[147,86355,2674],{"emptyLinePlaceholder":324},[147,86357,86358,86360,86362],{"class":149,"line":1469},[147,86359,1309],{"class":157},[147,86361,51607],{"class":153},[147,86363,51580],{"class":157},[147,86365,86366,86368,86370,86372,86374,86376],{"class":149,"line":1475},[147,86367,52417],{"class":157},[147,86369,51617],{"class":153},[147,86371,51620],{"class":2237},[147,86373,445],{"class":157},[147,86375,51625],{"class":504},[147,86377,51580],{"class":157},[147,86379,86380,86382,86384,86386,86388,86390,86392,86394,86396],{"class":149,"line":1489},[147,86381,52417],{"class":157},[147,86383,51617],{"class":153},[147,86385,15193],{"class":2237},[147,86387,445],{"class":157},[147,86389,51664],{"class":504},[147,86391,51644],{"class":2237},[147,86393,445],{"class":157},[147,86395,51671],{"class":504},[147,86397,51580],{"class":157},[147,86399,86400,86402,86404,86406,86408],{"class":149,"line":1495},[147,86401,52417],{"class":157},[147,86403,51680],{"class":153},[147,86405,51683],{"class":157},[147,86407,51680],{"class":153},[147,86409,51580],{"class":157},[147,86411,86412,86414,86416],{"class":149,"line":1586},[147,86413,52417],{"class":157},[147,86415,308],{"class":153},[147,86417,51580],{"class":157},[147,86419,86420,86423],{"class":149,"line":1592},[147,86421,86422],{"class":2237},"    .modal",[147,86424,15845],{"class":157},[147,86426,86427,86429,86431,86433,86435],{"class":149,"line":1604},[147,86428,55044],{"class":448},[147,86430,51710],{"class":157},[147,86432,4247],{"class":448},[147,86434,51765],{"class":397},[147,86436,1565],{"class":157},[147,86438,86439,86442,86444,86446,86448],{"class":149,"line":1886},[147,86440,86441],{"class":448},"      min-height",[147,86443,51710],{"class":157},[147,86445,710],{"class":448},[147,86447,51765],{"class":397},[147,86449,1565],{"class":157},[147,86451,86452,86454,86456,86458,86460,86462,86464,86466,86468,86470,86472,86474,86476,86478,86480,86483],{"class":149,"line":1891},[147,86453,79022],{"class":448},[147,86455,51710],{"class":157},[147,86457,590],{"class":448},[147,86459,4367],{"class":448},[147,86461,2312],{"class":448},[147,86463,51765],{"class":397},[147,86465,79039],{"class":448},[147,86467,401],{"class":157},[147,86469,590],{"class":448},[147,86471,12709],{"class":157},[147,86473,590],{"class":448},[147,86475,12709],{"class":157},[147,86477,590],{"class":448},[147,86479,12709],{"class":157},[147,86481,86482],{"class":448},"0.1",[147,86484,2993],{"class":157},[147,86486,86487,86489,86491,86493,86495],{"class":149,"line":1897},[147,86488,55407],{"class":448},[147,86490,51710],{"class":157},[147,86492,692],{"class":448},[147,86494,51765],{"class":397},[147,86496,1565],{"class":157},[147,86498,86499,86501,86503,86506],{"class":149,"line":1902},[147,86500,55032],{"class":448},[147,86502,51710],{"class":157},[147,86504,86505],{"class":448},"fixed",[147,86507,1565],{"class":157},[147,86509,86510,86513,86515,86518],{"class":149,"line":1916},[147,86511,86512],{"class":448},"      z-index",[147,86514,51710],{"class":157},[147,86516,86517],{"class":448},"999",[147,86519,1565],{"class":157},[147,86521,86522,86524,86526,86528,86530],{"class":149,"line":1921},[147,86523,55111],{"class":448},[147,86525,51710],{"class":157},[147,86527,1055],{"class":448},[147,86529,727],{"class":397},[147,86531,1565],{"class":157},[147,86533,86534,86536,86538,86540,86542],{"class":149,"line":1927},[147,86535,55220],{"class":448},[147,86537,51710],{"class":157},[147,86539,1055],{"class":448},[147,86541,727],{"class":397},[147,86543,1565],{"class":157},[147,86545,86546,86548,86550,86552,86554,86557,86559,86561,86563,86565,86567,86569],{"class":149,"line":1948},[147,86547,79063],{"class":448},[147,86549,51710],{"class":157},[147,86551,79068],{"class":448},[147,86553,401],{"class":157},[147,86555,86556],{"class":448},"-50",[147,86558,727],{"class":397},[147,86560,12709],{"class":157},[147,86562,86556],{"class":448},[147,86564,727],{"class":397},[147,86566,12709],{"class":157},[147,86568,590],{"class":448},[147,86570,2993],{"class":157},[147,86572,86573,86575,86577,86579],{"class":149,"line":1953},[147,86574,55157],{"class":448},[147,86576,51710],{"class":157},[147,86578,61115],{"class":448},[147,86580,1565],{"class":157},[147,86582,86583],{"class":149,"line":1967},[147,86584,2461],{"class":157},[147,86586,86587],{"class":149,"line":1972},[147,86588,2674],{"emptyLinePlaceholder":324},[147,86590,86591,86593,86596],{"class":149,"line":2001},[147,86592,86422],{"class":2237},[147,86594,86595],{"class":2237}," .header",[147,86597,15845],{"class":157},[147,86599,86600,86602,86604,86606,86608],{"class":149,"line":2006},[147,86601,57632],{"class":448},[147,86603,51710],{"class":157},[147,86605,800],{"class":448},[147,86607,51765],{"class":397},[147,86609,1565],{"class":157},[147,86611,86612,86614,86616,86618,86620,86622],{"class":149,"line":2023},[147,86613,54968],{"class":448},[147,86615,51710],{"class":157},[147,86617,590],{"class":448},[147,86619,2312],{"class":448},[147,86621,51765],{"class":397},[147,86623,1565],{"class":157},[147,86625,86626,86628,86630,86632],{"class":149,"line":2028},[147,86627,55032],{"class":448},[147,86629,51710],{"class":157},[147,86631,55037],{"class":448},[147,86633,1565],{"class":157},[147,86635,86636,86638,86640,86642,86644],{"class":149,"line":2033},[147,86637,55195],{"class":448},[147,86639,51710],{"class":157},[147,86641,1099],{"class":448},[147,86643,51765],{"class":397},[147,86645,1565],{"class":157},[147,86647,86648],{"class":149,"line":2038},[147,86649,2461],{"class":157},[147,86651,86652],{"class":149,"line":2052},[147,86653,2674],{"emptyLinePlaceholder":324},[147,86655,86656,86658,86660,86662],{"class":149,"line":2057},[147,86657,86422],{"class":2237},[147,86659,86595],{"class":2237},[147,86661,3306],{"class":153},[147,86663,15845],{"class":157},[147,86665,86666,86669,86671,86673],{"class":149,"line":2851},[147,86667,86668],{"class":448},"      font-style",[147,86670,51710],{"class":157},[147,86672,64114],{"class":448},[147,86674,1565],{"class":157},[147,86676,86677,86679,86681,86683],{"class":149,"line":2865},[147,86678,57689],{"class":448},[147,86680,51710],{"class":157},[147,86682,62343],{"class":448},[147,86684,1565],{"class":157},[147,86686,86687,86689,86691,86693],{"class":149,"line":2873},[147,86688,55032],{"class":448},[147,86690,51710],{"class":157},[147,86692,55104],{"class":448},[147,86694,1565],{"class":157},[147,86696,86697,86700,86702,86704,86706],{"class":149,"line":2878},[147,86698,86699],{"class":448},"      right",[147,86701,51710],{"class":157},[147,86703,974],{"class":448},[147,86705,51765],{"class":397},[147,86707,1565],{"class":157},[147,86709,86710,86712,86714,86717,86719],{"class":149,"line":2884},[147,86711,55220],{"class":448},[147,86713,51710],{"class":157},[147,86715,86716],{"class":448},"-2",[147,86718,51765],{"class":397},[147,86720,1565],{"class":157},[147,86722,86723,86725,86727,86729],{"class":149,"line":2890},[147,86724,62298],{"class":448},[147,86726,51710],{"class":157},[147,86728,62303],{"class":448},[147,86730,1565],{"class":157},[147,86732,86733],{"class":149,"line":2895},[147,86734,2461],{"class":157},[147,86736,86737],{"class":149,"line":8222},[147,86738,2674],{"emptyLinePlaceholder":324},[147,86740,86741,86743,86746],{"class":149,"line":8246},[147,86742,86422],{"class":2237},[147,86744,86745],{"class":2237}," .body",[147,86747,15845],{"class":157},[147,86749,86750,86752,86754,86756],{"class":149,"line":8251},[147,86751,57559],{"class":448},[147,86753,51710],{"class":157},[147,86755,51865],{"class":448},[147,86757,1565],{"class":157},[147,86759,86760,86762,86764,86766,86768],{"class":149,"line":8257},[147,86761,54968],{"class":448},[147,86763,51710],{"class":157},[147,86765,845],{"class":448},[147,86767,51765],{"class":397},[147,86769,1565],{"class":157},[147,86771,86772],{"class":149,"line":8284},[147,86773,2461],{"class":157},[147,86775,86776],{"class":149,"line":8289},[147,86777,2674],{"emptyLinePlaceholder":324},[147,86779,86780,86782,86785],{"class":149,"line":8295},[147,86781,86422],{"class":2237},[147,86783,86784],{"class":2237}," .footer",[147,86786,15845],{"class":157},[147,86788,86789,86791,86793,86795],{"class":149,"line":8307},[147,86790,55282],{"class":448},[147,86792,51710],{"class":157},[147,86794,51750],{"class":448},[147,86796,1565],{"class":157},[147,86798,86799,86801,86803,86805],{"class":149,"line":8319},[147,86800,55293],{"class":448},[147,86802,51710],{"class":157},[147,86804,51853],{"class":448},[147,86806,1565],{"class":157},[147,86808,86809,86811,86813,86815,86817],{"class":149,"line":8331},[147,86810,54968],{"class":448},[147,86812,51710],{"class":157},[147,86814,845],{"class":448},[147,86816,51765],{"class":397},[147,86818,1565],{"class":157},[147,86820,86821],{"class":149,"line":9990},[147,86822,2461],{"class":157},[147,86824,86825],{"class":149,"line":10015},[147,86826,2674],{"emptyLinePlaceholder":324},[147,86828,86829,86831,86833,86835],{"class":149,"line":10038},[147,86830,86422],{"class":2237},[147,86832,86784],{"class":2237},[147,86834,1673],{"class":153},[147,86836,15845],{"class":157},[147,86838,86839,86841,86843,86845,86847,86849,86851],{"class":149,"line":10062},[147,86840,54968],{"class":448},[147,86842,51710],{"class":157},[147,86844,471],{"class":448},[147,86846,51765],{"class":397},[147,86848,2357],{"class":448},[147,86850,51765],{"class":397},[147,86852,1565],{"class":157},[147,86854,86855,86857,86859,86862],{"class":149,"line":10067},[147,86856,61994],{"class":448},[147,86858,51710],{"class":157},[147,86860,86861],{"class":448},"#ccc",[147,86863,1565],{"class":157},[147,86865,86866,86868,86870,86872],{"class":149,"line":10072},[147,86867,64243],{"class":448},[147,86869,51710],{"class":157},[147,86871,55010],{"class":448},[147,86873,1565],{"class":157},[147,86875,86876,86878,86880,86882],{"class":149,"line":10077},[147,86877,57689],{"class":448},[147,86879,51710],{"class":157},[147,86881,61115],{"class":448},[147,86883,1565],{"class":157},[147,86885,86886,86888,86890,86892,86894],{"class":149,"line":10086},[147,86887,55407],{"class":448},[147,86889,51710],{"class":157},[147,86891,477],{"class":448},[147,86893,51765],{"class":397},[147,86895,1565],{"class":157},[147,86897,86898,86900,86902,86904,86906],{"class":149,"line":10091},[147,86899,62023],{"class":448},[147,86901,51710],{"class":157},[147,86903,845],{"class":448},[147,86905,51765],{"class":397},[147,86907,1565],{"class":157},[147,86909,86910,86912,86914,86916,86918],{"class":149,"line":10097},[147,86911,55195],{"class":448},[147,86913,51710],{"class":157},[147,86915,948],{"class":448},[147,86917,51765],{"class":397},[147,86919,1565],{"class":157},[147,86921,86922],{"class":149,"line":10118},[147,86923,2461],{"class":157},[147,86925,86926],{"class":149,"line":10124},[147,86927,2674],{"emptyLinePlaceholder":324},[147,86929,86930,86932,86934,86936,86939],{"class":149,"line":10138},[147,86931,86422],{"class":2237},[147,86933,86784],{"class":2237},[147,86935,1673],{"class":153},[147,86937,86938],{"class":2237},".submit",[147,86940,15845],{"class":157},[147,86942,86943,86945,86947,86950],{"class":149,"line":10144},[147,86944,55157],{"class":448},[147,86946,51710],{"class":157},[147,86948,86949],{"class":448},"#369",[147,86951,1565],{"class":157},[147,86953,86954],{"class":149,"line":10171},[147,86955,2461],{"class":157},[147,86957,86958,86960,86962],{"class":149,"line":10180},[147,86959,52690],{"class":157},[147,86961,308],{"class":153},[147,86963,51580],{"class":157},[147,86965,86966,86968,86970],{"class":149,"line":10186},[147,86967,52058],{"class":157},[147,86969,51607],{"class":153},[147,86971,51580],{"class":157},[147,86973,86974],{"class":149,"line":10194},[147,86975,2674],{"emptyLinePlaceholder":324},[147,86977,86978,86980,86982],{"class":149,"line":10199},[147,86979,1309],{"class":157},[147,86981,52073],{"class":153},[147,86983,51580],{"class":157},[147,86985,86986,86988,86990,86992,86994,86997,87000,87002],{"class":149,"line":16877},[147,86987,52417],{"class":157},[147,86989,54160],{"class":153},[147,86991,15232],{"class":2237},[147,86993,445],{"class":157},[147,86995,86996],{"class":504},"\"delete\"",[147,86998,86999],{"class":157},">删除\u003C\u002F",[147,87001,54160],{"class":153},[147,87003,51580],{"class":157},[147,87005,87006,87008,87010,87012,87014,87017,87020,87022],{"class":149,"line":16883},[147,87007,52417],{"class":157},[147,87009,54160],{"class":153},[147,87011,15232],{"class":2237},[147,87013,445],{"class":157},[147,87015,87016],{"class":504},"\"login\"",[147,87018,87019],{"class":157},">登录\u003C\u002F",[147,87021,54160],{"class":153},[147,87023,51580],{"class":157},[147,87025,87026,87028,87030],{"class":149,"line":16906},[147,87027,52417],{"class":157},[147,87029,52086],{"class":153},[147,87031,51580],{"class":157},[147,87033,87034],{"class":149,"line":16912},[147,87035,87036],{"class":458},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[147,87038,87039,87041,87044,87046,87048,87050,87052,87054,87057,87059,87061],{"class":149,"line":16935},[147,87040,70357],{"class":397},[147,87042,87043],{"class":2237}," Modal",[147,87045,401],{"class":157},[147,87047,51680],{"class":5490},[147,87049,13838],{"class":397},[147,87051,70203],{"class":504},[147,87053,12709],{"class":157},[147,87055,87056],{"class":5490},"message",[147,87058,13838],{"class":397},[147,87060,70203],{"class":504},[147,87062,12716],{"class":157},[147,87064,87065],{"class":149,"line":16949},[147,87066,87067],{"class":458},"      \u002F\u002F 创建Model 模态框盒子\n",[147,87069,87070],{"class":149,"line":16969},[147,87071,87072],{"class":458},"      \u002F\u002F 1.1 创建div标签\n",[147,87074,87075,87077,87080,87082,87084,87086,87088,87090],{"class":149,"line":16975},[147,87076,70324],{"class":448},[147,87078,87079],{"class":157},".modalBox ",[147,87081,445],{"class":397},[147,87083,54669],{"class":157},[147,87085,70424],{"class":2237},[147,87087,401],{"class":157},[147,87089,82203],{"class":504},[147,87091,407],{"class":157},[147,87093,87094],{"class":149,"line":16986},[147,87095,87096],{"class":458},"      \u002F\u002F 1.2 给div 添加类名为model\n",[147,87098,87099,87101,87104,87106],{"class":149,"line":17009},[147,87100,70324],{"class":448},[147,87102,87103],{"class":157},".modalBox.className ",[147,87105,445],{"class":397},[147,87107,87108],{"class":504}," 'modal'\n",[147,87110,87111],{"class":149,"line":17031},[147,87112,87113],{"class":458},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[147,87115,87116,87118,87121,87123],{"class":149,"line":17036},[147,87117,70324],{"class":448},[147,87119,87120],{"class":157},".modalBox.innerHTML ",[147,87122,445],{"class":397},[147,87124,70441],{"class":504},[147,87126,87127,87130,87132],{"class":149,"line":17042},[147,87128,87129],{"class":504},"        \u003Cdiv class=\"header\">${",[147,87131,51680],{"class":157},[147,87133,87134],{"class":504},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[147,87136,87137,87140,87142],{"class":149,"line":17056},[147,87138,87139],{"class":504},"        \u003Cdiv class=\"body\">${",[147,87141,87056],{"class":157},[147,87143,87144],{"class":504},"}\u003C\u002Fdiv>\n",[147,87146,87147],{"class":149,"line":17069},[147,87148,87149],{"class":504},"      `\n",[147,87151,87152],{"class":149,"line":17074},[147,87153,87154],{"class":458},"      \u002F\u002F console.log(this.modalBox)\n",[147,87156,87157],{"class":149,"line":17088},[147,87158,2461],{"class":157},[147,87160,87161],{"class":149,"line":17093},[147,87162,87163],{"class":458},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[147,87165,87166],{"class":149,"line":17099},[147,87167,87168],{"class":458},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[147,87170,87171],{"class":149,"line":17104},[147,87172,87173],{"class":458},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[147,87175,87176,87179,87181,87183,87185,87188,87190,87192],{"class":149,"line":17118},[147,87177,87178],{"class":448},"    Modal",[147,87180,957],{"class":157},[147,87182,85851],{"class":448},[147,87184,957],{"class":157},[147,87186,87187],{"class":2237},"open",[147,87189,13838],{"class":397},[147,87191,59191],{"class":397},[147,87193,54725],{"class":157},[147,87195,87196],{"class":149,"line":17123},[147,87197,87198],{"class":458},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[147,87200,87201,87203,87206,87208,87210,87212,87214,87217],{"class":149,"line":17128},[147,87202,58501],{"class":397},[147,87204,87205],{"class":448}," box",[147,87207,13838],{"class":397},[147,87209,54669],{"class":157},[147,87211,54672],{"class":2237},[147,87213,401],{"class":157},[147,87215,87216],{"class":504},"'.modal'",[147,87218,407],{"class":157},[147,87220,87221],{"class":149,"line":17142},[147,87222,87223],{"class":458},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[147,87225,87226,87229,87231,87234,87236],{"class":149,"line":17154},[147,87227,87228],{"class":157},"      box ",[147,87230,1989],{"class":397},[147,87232,87233],{"class":157}," box.",[147,87235,57279],{"class":2237},[147,87237,2250],{"class":157},[147,87239,87240],{"class":149,"line":17159},[147,87241,87242],{"class":458},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[147,87244,87245],{"class":149,"line":17172},[147,87246,87247],{"class":458},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[147,87249,87250],{"class":149,"line":17177},[147,87251,87252],{"class":458},"      \u002F\u002F append可以增加对象\n",[147,87254,87255,87258,87261,87263,87266],{"class":149,"line":17182},[147,87256,87257],{"class":157},"      document.body.",[147,87259,87260],{"class":2237},"append",[147,87262,401],{"class":157},[147,87264,87265],{"class":448},"this",[147,87267,87268],{"class":157},".modalBox)\n",[147,87270,87271],{"class":149,"line":17187},[147,87272,2674],{"emptyLinePlaceholder":324},[147,87274,87275],{"class":149,"line":17200},[147,87276,87277],{"class":458},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[147,87279,87280,87282,87285,87287,87289,87292,87294,87296,87298,87300,87303,87305],{"class":149,"line":17205},[147,87281,70324],{"class":448},[147,87283,87284],{"class":157},".modalBox.",[147,87286,54672],{"class":2237},[147,87288,401],{"class":157},[147,87290,87291],{"class":504},"'i'",[147,87293,31100],{"class":157},[147,87295,58086],{"class":2237},[147,87297,401],{"class":157},[147,87299,58091],{"class":504},[147,87301,87302],{"class":157},", () ",[147,87304,84994],{"class":397},[147,87306,15845],{"class":157},[147,87308,87309],{"class":149,"line":32907},[147,87310,87311],{"class":458},"        \u002F\u002F 这个地方需要用到箭头函数\n",[147,87313,87314],{"class":149,"line":32913},[147,87315,87316],{"class":458},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[147,87318,87319],{"class":149,"line":32919},[147,87320,87321],{"class":458},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[147,87323,87324,87326,87328,87331],{"class":149,"line":32925},[147,87325,64999],{"class":448},[147,87327,957],{"class":157},[147,87329,87330],{"class":2237},"close",[147,87332,2250],{"class":157},[147,87334,87335],{"class":149,"line":32931},[147,87336,65088],{"class":157},[147,87338,87339],{"class":149,"line":32942},[147,87340,2461],{"class":157},[147,87342,87343],{"class":149,"line":32948},[147,87344,2674],{"emptyLinePlaceholder":324},[147,87346,87347],{"class":149,"line":32968},[147,87348,87349],{"class":458},"    \u002F\u002F 测试一下 点击 删除按钮\n",[147,87351,87352,87354,87356,87358,87361,87363,87365,87367,87369,87371,87373],{"class":149,"line":32974},[147,87353,52680],{"class":157},[147,87355,54672],{"class":2237},[147,87357,401],{"class":157},[147,87359,87360],{"class":504},"'#delete'",[147,87362,31100],{"class":157},[147,87364,58086],{"class":2237},[147,87366,401],{"class":157},[147,87368,58091],{"class":504},[147,87370,87302],{"class":157},[147,87372,84994],{"class":397},[147,87374,15845],{"class":157},[147,87376,87377],{"class":149,"line":32985},[147,87378,87379],{"class":458},"      \u002F\u002F 先调用Model构造函数\n",[147,87381,87382,87384,87387,87389,87391,87393,87395,87398,87400,87403],{"class":149,"line":32991},[147,87383,58501],{"class":397},[147,87385,87386],{"class":448}," del",[147,87388,13838],{"class":397},[147,87390,11852],{"class":397},[147,87392,87043],{"class":2237},[147,87394,401],{"class":157},[147,87396,87397],{"class":504},"'温馨的提示'",[147,87399,12709],{"class":157},[147,87401,87402],{"class":504},"'您没有删除权限操作'",[147,87404,407],{"class":157},[147,87406,87407],{"class":149,"line":32997},[147,87408,87409],{"class":458},"      \u002F\u002F 实例对象调用open方法\n",[147,87411,87412,87415,87417],{"class":149,"line":33003},[147,87413,87414],{"class":157},"      del.",[147,87416,87187],{"class":2237},[147,87418,2250],{"class":157},[147,87420,87421],{"class":149,"line":33009},[147,87422,33735],{"class":157},[147,87424,87425],{"class":149,"line":33015},[147,87426,87427],{"class":458},"    \u002F\u002F 测试一下 点击 登录按钮\n",[147,87429,87430,87432,87434,87436,87439,87441,87443,87445,87447,87449,87451],{"class":149,"line":33021},[147,87431,52680],{"class":157},[147,87433,54672],{"class":2237},[147,87435,401],{"class":157},[147,87437,87438],{"class":504},"'#login'",[147,87440,31100],{"class":157},[147,87442,58086],{"class":2237},[147,87444,401],{"class":157},[147,87446,58091],{"class":504},[147,87448,87302],{"class":157},[147,87450,84994],{"class":397},[147,87452,15845],{"class":157},[147,87454,87455],{"class":149,"line":33027},[147,87456,87379],{"class":458},[147,87458,87459,87461,87464,87466,87468,87470,87472,87475,87477,87480],{"class":149,"line":33047},[147,87460,58501],{"class":397},[147,87462,87463],{"class":448}," log",[147,87465,13838],{"class":397},[147,87467,11852],{"class":397},[147,87469,87043],{"class":2237},[147,87471,401],{"class":157},[147,87473,87474],{"class":504},"'友情提示'",[147,87476,12709],{"class":157},[147,87478,87479],{"class":504},"'您还没有登录呢'",[147,87481,407],{"class":157},[147,87483,87484],{"class":149,"line":33053},[147,87485,87409],{"class":458},[147,87487,87488,87491,87493],{"class":149,"line":33069},[147,87489,87490],{"class":157},"      log.",[147,87492,87187],{"class":2237},[147,87494,2250],{"class":157},[147,87496,87497],{"class":149,"line":33075},[147,87498,33735],{"class":157},[147,87500,87501],{"class":149,"line":33089},[147,87502,87503],{"class":458},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[147,87505,87506,87508,87510,87512,87514,87516,87518,87520],{"class":149,"line":33095},[147,87507,87178],{"class":448},[147,87509,957],{"class":157},[147,87511,85851],{"class":448},[147,87513,957],{"class":157},[147,87515,87330],{"class":2237},[147,87517,13838],{"class":397},[147,87519,59191],{"class":397},[147,87521,54725],{"class":157},[147,87523,87524,87526,87528,87530],{"class":149,"line":33110},[147,87525,70324],{"class":448},[147,87527,87284],{"class":157},[147,87529,57279],{"class":2237},[147,87531,2250],{"class":157},[147,87533,87534],{"class":149,"line":33116},[147,87535,2461],{"class":157},[147,87537,87538,87540,87542],{"class":149,"line":33125},[147,87539,52690],{"class":157},[147,87541,52086],{"class":153},[147,87543,51580],{"class":157},[147,87545,87546,87548,87550],{"class":149,"line":33131},[147,87547,52058],{"class":157},[147,87549,52073],{"class":153},[147,87551,51580],{"class":157},[147,87553,87554],{"class":149,"line":33140},[147,87555,2674],{"emptyLinePlaceholder":324},[147,87557,87558,87560,87562],{"class":149,"line":33146},[147,87559,52058],{"class":157},[147,87561,50909],{"class":153},[147,87563,51580],{"class":157},[19,87565,87566],{},[29,87567],{"alt":143,"src":87568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,87570,87572],{"id":87571},"_414-深浅拷贝","4.14 深浅拷贝",[367,87574,87576],{"id":87575},"_4141-浅拷贝","4.14.1 浅拷贝",[19,87578,87579],{},[29,87580],{"alt":143,"src":87581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,87583,87584],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,87586,87587],{},[29,87588],{"alt":143,"src":87589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,87591,87592],{},[29,87593],{"alt":143,"src":87594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,87596,87597],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,87599,87600],{},[29,87601],{"alt":143,"src":87602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,87604,11606],{},[19,87606,87607],{},[29,87608],{"alt":143,"src":87609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[367,87611,87613],{"id":87612},"_4142-深拷贝","4.14.2 深拷贝",[19,87615,87616],{},"深拷贝：拷贝的是对象，不是地址",[19,87618,87619],{},"常用的三种方法：",[350,87621,87622,87625,87628],{},[353,87623,87624],{},"通过递归实现深拷贝",[353,87626,87627],{},"lodash\u002FcloneDeep",[353,87629,87630],{},"通过JSON.stringify()实现",[22271,87632,87634],{"id":87633},"_41421-递归函数","4.14.2.1 递归函数",[19,87636,87637],{},[29,87638],{"alt":143,"src":87639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[350,87641,87642],{},[353,87643,87644],{},"死递归占溢出：",[138,87646,87648],{"className":53340,"code":87647,"language":53342,"meta":143,"style":143},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[51,87649,87650,87658,87666,87670,87675,87679,87684,87692],{"__ignoreMap":143},[147,87651,87652,87654,87656],{"class":149,"line":150},[147,87653,1309],{"class":157},[147,87655,52073],{"class":153},[147,87657,51580],{"class":157},[147,87659,87660,87662,87664],{"class":149,"line":312},[147,87661,52417],{"class":157},[147,87663,52086],{"class":153},[147,87665,51580],{"class":157},[147,87667,87668],{"class":149,"line":1454},[147,87669,77416],{"class":157},[147,87671,87672],{"class":149,"line":1469},[147,87673,87674],{"class":157},"      fn()\n",[147,87676,87677],{"class":149,"line":1475},[147,87678,2461],{"class":157},[147,87680,87681],{"class":149,"line":1489},[147,87682,87683],{"class":157},"    fn()\n",[147,87685,87686,87688,87690],{"class":149,"line":1495},[147,87687,52690],{"class":157},[147,87689,52086],{"class":153},[147,87691,51580],{"class":157},[147,87693,87694,87696,87698],{"class":149,"line":1586},[147,87695,52058],{"class":157},[147,87697,52073],{"class":153},[147,87699,51580],{"class":157},[350,87701,87702],{"start":312},[353,87703,87704],{},"递归函数要加判断条件：",[19,87706,87707],{},[29,87708],{"alt":143,"src":87709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[350,87711,87712],{"start":1454},[353,87713,87714],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[138,87716,87718],{"className":50907,"code":87717,"language":50909,"meta":143,"style":143},"\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",[51,87719,87720,87730,87744,87748,87756,87770,87790,87802,87810,87814,87822,87834,87842,87850,87875,87887,87891,87898,87906,87914,87918],{"__ignoreMap":143},[147,87721,87722,87724,87726,87728],{"class":149,"line":150},[147,87723,51571],{"class":157},[147,87725,51574],{"class":153},[147,87727,51577],{"class":2237},[147,87729,51580],{"class":157},[147,87731,87732,87734,87736,87738,87740,87742],{"class":149,"line":312},[147,87733,1309],{"class":157},[147,87735,50909],{"class":153},[147,87737,51589],{"class":2237},[147,87739,445],{"class":157},[147,87741,51594],{"class":504},[147,87743,51580],{"class":157},[147,87745,87746],{"class":149,"line":1454},[147,87747,2674],{"emptyLinePlaceholder":324},[147,87749,87750,87752,87754],{"class":149,"line":1469},[147,87751,1309],{"class":157},[147,87753,51607],{"class":153},[147,87755,51580],{"class":157},[147,87757,87758,87760,87762,87764,87766,87768],{"class":149,"line":1475},[147,87759,52417],{"class":157},[147,87761,51617],{"class":153},[147,87763,51620],{"class":2237},[147,87765,445],{"class":157},[147,87767,51625],{"class":504},[147,87769,51580],{"class":157},[147,87771,87772,87774,87776,87778,87780,87782,87784,87786,87788],{"class":149,"line":1489},[147,87773,52417],{"class":157},[147,87775,51617],{"class":153},[147,87777,15193],{"class":2237},[147,87779,445],{"class":157},[147,87781,51664],{"class":504},[147,87783,51644],{"class":2237},[147,87785,445],{"class":157},[147,87787,51671],{"class":504},[147,87789,51580],{"class":157},[147,87791,87792,87794,87796,87798,87800],{"class":149,"line":1495},[147,87793,52417],{"class":157},[147,87795,51680],{"class":153},[147,87797,51683],{"class":157},[147,87799,51680],{"class":153},[147,87801,51580],{"class":157},[147,87803,87804,87806,87808],{"class":149,"line":1586},[147,87805,52058],{"class":157},[147,87807,51607],{"class":153},[147,87809,51580],{"class":157},[147,87811,87812],{"class":149,"line":1592},[147,87813,2674],{"emptyLinePlaceholder":324},[147,87815,87816,87818,87820],{"class":149,"line":1604},[147,87817,1309],{"class":157},[147,87819,52073],{"class":153},[147,87821,51580],{"class":157},[147,87823,87824,87826,87828,87830,87832],{"class":149,"line":1886},[147,87825,52417],{"class":157},[147,87827,51884],{"class":153},[147,87829,55587],{"class":157},[147,87831,51884],{"class":153},[147,87833,51580],{"class":157},[147,87835,87836,87838,87840],{"class":149,"line":1891},[147,87837,52417],{"class":157},[147,87839,52086],{"class":153},[147,87841,51580],{"class":157},[147,87843,87844,87846,87848],{"class":149,"line":1897},[147,87845,70357],{"class":397},[147,87847,74046],{"class":2237},[147,87849,11127],{"class":157},[147,87851,87852,87854,87856,87858,87860,87862,87864,87866,87868,87870,87873],{"class":149,"line":1902},[147,87853,56044],{"class":157},[147,87855,54672],{"class":2237},[147,87857,401],{"class":157},[147,87859,82203],{"class":504},[147,87861,74522],{"class":157},[147,87863,445],{"class":397},[147,87865,11852],{"class":397},[147,87867,74062],{"class":2237},[147,87869,17534],{"class":157},[147,87871,87872],{"class":2237},"toLocaleString",[147,87874,2250],{"class":157},[147,87876,87877,87880,87883,87885],{"class":149,"line":1916},[147,87878,87879],{"class":2237},"      setTimeout",[147,87881,87882],{"class":157},"(getTime, ",[147,87884,6684],{"class":448},[147,87886,407],{"class":157},[147,87888,87889],{"class":149,"line":1921},[147,87890,2461],{"class":157},[147,87892,87893,87896],{"class":149,"line":1927},[147,87894,87895],{"class":2237},"    getTime",[147,87897,2250],{"class":157},[147,87899,87900,87902,87904],{"class":149,"line":1948},[147,87901,52690],{"class":157},[147,87903,52086],{"class":153},[147,87905,51580],{"class":157},[147,87907,87908,87910,87912],{"class":149,"line":1953},[147,87909,52058],{"class":157},[147,87911,52073],{"class":153},[147,87913,51580],{"class":157},[147,87915,87916],{"class":149,"line":1967},[147,87917,2674],{"emptyLinePlaceholder":324},[147,87919,87920,87922,87924],{"class":149,"line":1972},[147,87921,52058],{"class":157},[147,87923,50909],{"class":153},[147,87925,51580],{"class":157},[19,87927,87928],{},[29,87929],{"alt":143,"src":87930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[350,87932,87933],{"start":1469},[353,87934,87624],{},[19,87936,87937],{},[29,87938],{"alt":143,"src":87939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,87941,87942],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,87944,39463],{},[19,87946,87947],{},"这个是简易版的递归函数深拷贝",[19,87949,87950],{},"一定要注意先数组再对象，因为万物皆可对象",[138,87952,87954],{"className":50907,"code":87953,"language":50909,"meta":143,"style":143},"\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",[51,87955,87956,87966,87980,87984,87992,88006,88026,88038,88046,88050,88058,88066,88076,88085,88093,88109,88113,88121,88125,88129,88141,88146,88165,88181,88186,88191,88196,88211,88216,88221,88230,88238,88255,88263,88269,88277,88282,88287,88296,88300,88304,88308,88319,88328,88338,88352,88362,88370,88378,88386,88390],{"__ignoreMap":143},[147,87957,87958,87960,87962,87964],{"class":149,"line":150},[147,87959,51571],{"class":157},[147,87961,51574],{"class":153},[147,87963,51577],{"class":2237},[147,87965,51580],{"class":157},[147,87967,87968,87970,87972,87974,87976,87978],{"class":149,"line":312},[147,87969,1309],{"class":157},[147,87971,50909],{"class":153},[147,87973,51589],{"class":2237},[147,87975,445],{"class":157},[147,87977,51594],{"class":504},[147,87979,51580],{"class":157},[147,87981,87982],{"class":149,"line":1454},[147,87983,2674],{"emptyLinePlaceholder":324},[147,87985,87986,87988,87990],{"class":149,"line":1469},[147,87987,1309],{"class":157},[147,87989,51607],{"class":153},[147,87991,51580],{"class":157},[147,87993,87994,87996,87998,88000,88002,88004],{"class":149,"line":1475},[147,87995,52417],{"class":157},[147,87997,51617],{"class":153},[147,87999,51620],{"class":2237},[147,88001,445],{"class":157},[147,88003,51625],{"class":504},[147,88005,51580],{"class":157},[147,88007,88008,88010,88012,88014,88016,88018,88020,88022,88024],{"class":149,"line":1489},[147,88009,52417],{"class":157},[147,88011,51617],{"class":153},[147,88013,15193],{"class":2237},[147,88015,445],{"class":157},[147,88017,51664],{"class":504},[147,88019,51644],{"class":2237},[147,88021,445],{"class":157},[147,88023,51671],{"class":504},[147,88025,51580],{"class":157},[147,88027,88028,88030,88032,88034,88036],{"class":149,"line":1495},[147,88029,52417],{"class":157},[147,88031,51680],{"class":153},[147,88033,51683],{"class":157},[147,88035,51680],{"class":153},[147,88037,51580],{"class":157},[147,88039,88040,88042,88044],{"class":149,"line":1586},[147,88041,52058],{"class":157},[147,88043,51607],{"class":153},[147,88045,51580],{"class":157},[147,88047,88048],{"class":149,"line":1592},[147,88049,2674],{"emptyLinePlaceholder":324},[147,88051,88052,88054,88056],{"class":149,"line":1604},[147,88053,1309],{"class":157},[147,88055,52073],{"class":153},[147,88057,51580],{"class":157},[147,88059,88060,88062,88064],{"class":149,"line":1886},[147,88061,52417],{"class":157},[147,88063,52086],{"class":153},[147,88065,51580],{"class":157},[147,88067,88068,88070,88072,88074],{"class":149,"line":1891},[147,88069,11495],{"class":397},[147,88071,70244],{"class":448},[147,88073,13838],{"class":397},[147,88075,15845],{"class":157},[147,88077,88078,88080,88083],{"class":149,"line":1897},[147,88079,71889],{"class":157},[147,88081,88082],{"class":504},"'pink'",[147,88084,31740],{"class":157},[147,88086,88087,88089,88091],{"class":149,"line":1902},[147,88088,71899],{"class":157},[147,88090,1049],{"class":448},[147,88092,31740],{"class":157},[147,88094,88095,88098,88101,88103,88106],{"class":149,"line":1916},[147,88096,88097],{"class":157},"      hobby: [",[147,88099,88100],{"class":504},"'乒乓球'",[147,88102,12709],{"class":157},[147,88104,88105],{"class":504},"'足球'",[147,88107,88108],{"class":157},"],\n",[147,88110,88111],{"class":149,"line":1921},[147,88112,78144],{"class":157},[147,88114,88115,88118],{"class":149,"line":1927},[147,88116,88117],{"class":157},"        baby: ",[147,88119,88120],{"class":504},"'小pink'\n",[147,88122,88123],{"class":149,"line":1948},[147,88124,52671],{"class":157},[147,88126,88127],{"class":149,"line":1953},[147,88128,2461],{"class":157},[147,88130,88131,88133,88136,88138],{"class":149,"line":1967},[147,88132,11495],{"class":397},[147,88134,88135],{"class":448}," o",[147,88137,13838],{"class":397},[147,88139,88140],{"class":157}," {}\n",[147,88142,88143],{"class":149,"line":1972},[147,88144,88145],{"class":458},"    \u002F\u002F 拷贝函数\n",[147,88147,88148,88150,88153,88155,88158,88160,88163],{"class":149,"line":2001},[147,88149,70357],{"class":397},[147,88151,88152],{"class":2237}," deepCopy",[147,88154,401],{"class":157},[147,88156,88157],{"class":5490},"newObj",[147,88159,12709],{"class":157},[147,88161,88162],{"class":5490},"oldObj",[147,88164,12716],{"class":157},[147,88166,88167,88169,88171,88173,88176,88178],{"class":149,"line":2006},[147,88168,52557],{"class":397},[147,88170,1932],{"class":157},[147,88172,52120],{"class":397},[147,88174,88175],{"class":157}," k ",[147,88177,26317],{"class":397},[147,88179,88180],{"class":157}," oldObj) {\n",[147,88182,88183],{"class":149,"line":2023},[147,88184,88185],{"class":458},"        \u002F\u002F 处理数组的问题\n",[147,88187,88188],{"class":149,"line":2028},[147,88189,88190],{"class":458},"        \u002F\u002F 判断是否属于数组\n",[147,88192,88193],{"class":149,"line":2033},[147,88194,88195],{"class":458},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[147,88197,88198,88200,88203,88206,88209],{"class":149,"line":2038},[147,88199,2771],{"class":397},[147,88201,88202],{"class":157}," (oldObj[k] ",[147,88204,88205],{"class":397},"instanceof",[147,88207,88208],{"class":2237}," Array",[147,88210,12716],{"class":157},[147,88212,88213],{"class":149,"line":2052},[147,88214,88215],{"class":458},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[147,88217,88218],{"class":149,"line":2057},[147,88219,88220],{"class":458},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[147,88222,88223,88226,88228],{"class":149,"line":2851},[147,88224,88225],{"class":157},"          newObj[k] ",[147,88227,445],{"class":397},[147,88229,52111],{"class":157},[147,88231,88232,88235],{"class":149,"line":2865},[147,88233,88234],{"class":2237},"          deepCopy",[147,88236,88237],{"class":157},"(newObj[k], oldObj[k])\n",[147,88239,88240,88242,88244,88246,88248,88250,88253],{"class":149,"line":2873},[147,88241,80352],{"class":157},[147,88243,1975],{"class":397},[147,88245,1978],{"class":397},[147,88247,88202],{"class":157},[147,88249,88205],{"class":397},[147,88251,88252],{"class":2237}," Object",[147,88254,12716],{"class":157},[147,88256,88257,88259,88261],{"class":149,"line":2878},[147,88258,88225],{"class":157},[147,88260,445],{"class":397},[147,88262,88140],{"class":157},[147,88264,88265,88267],{"class":149,"line":2884},[147,88266,88234],{"class":2237},[147,88268,88237],{"class":157},[147,88270,88271,88273,88275],{"class":149,"line":2890},[147,88272,80352],{"class":157},[147,88274,1975],{"class":397},[147,88276,15845],{"class":157},[147,88278,88279],{"class":149,"line":2895},[147,88280,88281],{"class":458},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[147,88283,88284],{"class":149,"line":8222},[147,88285,88286],{"class":458},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[147,88288,88289,88291,88293],{"class":149,"line":8246},[147,88290,88225],{"class":157},[147,88292,445],{"class":397},[147,88294,88295],{"class":157}," oldObj[k]\n",[147,88297,88298],{"class":149,"line":8251},[147,88299,2803],{"class":157},[147,88301,88302],{"class":149,"line":8257},[147,88303,52671],{"class":157},[147,88305,88306],{"class":149,"line":8284},[147,88307,2461],{"class":157},[147,88309,88310,88313,88316],{"class":149,"line":8289},[147,88311,88312],{"class":2237},"    deepCopy",[147,88314,88315],{"class":157},"(o, obj) ",[147,88317,88318],{"class":458},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[147,88320,88321,88323,88325],{"class":149,"line":8295},[147,88322,74026],{"class":157},[147,88324,58520],{"class":2237},[147,88326,88327],{"class":157},"(o)\n",[147,88329,88330,88333,88335],{"class":149,"line":8307},[147,88331,88332],{"class":157},"    o.age ",[147,88334,445],{"class":397},[147,88336,88337],{"class":448}," 20\n",[147,88339,88340,88343,88345,88347,88349],{"class":149,"line":8319},[147,88341,88342],{"class":157},"    o.hobby[",[147,88344,590],{"class":448},[147,88346,4717],{"class":157},[147,88348,445],{"class":397},[147,88350,88351],{"class":504}," '篮球'\n",[147,88353,88354,88357,88359],{"class":149,"line":8331},[147,88355,88356],{"class":157},"    o.family ",[147,88358,445],{"class":397},[147,88360,88361],{"class":504}," '老pink'\n",[147,88363,88364,88366,88368],{"class":149,"line":9990},[147,88365,74026],{"class":157},[147,88367,58520],{"class":2237},[147,88369,70309],{"class":157},[147,88371,88372,88374,88376],{"class":149,"line":10015},[147,88373,52690],{"class":157},[147,88375,52086],{"class":153},[147,88377,51580],{"class":157},[147,88379,88380,88382,88384],{"class":149,"line":10038},[147,88381,52058],{"class":157},[147,88383,52073],{"class":153},[147,88385,51580],{"class":157},[147,88387,88388],{"class":149,"line":10062},[147,88389,2674],{"emptyLinePlaceholder":324},[147,88391,88392,88394,88396],{"class":149,"line":10067},[147,88393,52058],{"class":157},[147,88395,50909],{"class":153},[147,88397,51580],{"class":157},[19,88399,88400],{},[29,88401],{"alt":143,"src":88402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22271,88404,88406,88407],{"id":88405},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[234,88408,88409],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,88411,88412],{},[637,88413,88414],{"href":88414,"rel":88415},"https:\u002F\u002Fwww.lodashjs.com\u002F",[24138],[19,88417,88418],{},"lodash里边的方法都要加上一个下划线_",[19,88420,88421],{},"_.cloneDeep()",[138,88423,88425],{"className":50907,"code":88424,"language":50909,"meta":143,"style":143},"\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",[51,88426,88427,88437,88451,88455,88463,88477,88497,88509,88517,88521,88529,88534,88553,88561,88571,88579,88587,88599,88603,88609,88613,88617,88633,88641,88650,88658,88666,88674,88678],{"__ignoreMap":143},[147,88428,88429,88431,88433,88435],{"class":149,"line":150},[147,88430,51571],{"class":157},[147,88432,51574],{"class":153},[147,88434,51577],{"class":2237},[147,88436,51580],{"class":157},[147,88438,88439,88441,88443,88445,88447,88449],{"class":149,"line":312},[147,88440,1309],{"class":157},[147,88442,50909],{"class":153},[147,88444,51589],{"class":2237},[147,88446,445],{"class":157},[147,88448,51594],{"class":504},[147,88450,51580],{"class":157},[147,88452,88453],{"class":149,"line":1454},[147,88454,2674],{"emptyLinePlaceholder":324},[147,88456,88457,88459,88461],{"class":149,"line":1469},[147,88458,1309],{"class":157},[147,88460,51607],{"class":153},[147,88462,51580],{"class":157},[147,88464,88465,88467,88469,88471,88473,88475],{"class":149,"line":1475},[147,88466,52417],{"class":157},[147,88468,51617],{"class":153},[147,88470,51620],{"class":2237},[147,88472,445],{"class":157},[147,88474,51625],{"class":504},[147,88476,51580],{"class":157},[147,88478,88479,88481,88483,88485,88487,88489,88491,88493,88495],{"class":149,"line":1489},[147,88480,52417],{"class":157},[147,88482,51617],{"class":153},[147,88484,15193],{"class":2237},[147,88486,445],{"class":157},[147,88488,51664],{"class":504},[147,88490,51644],{"class":2237},[147,88492,445],{"class":157},[147,88494,51671],{"class":504},[147,88496,51580],{"class":157},[147,88498,88499,88501,88503,88505,88507],{"class":149,"line":1495},[147,88500,52417],{"class":157},[147,88502,51680],{"class":153},[147,88504,51683],{"class":157},[147,88506,51680],{"class":153},[147,88508,51580],{"class":157},[147,88510,88511,88513,88515],{"class":149,"line":1586},[147,88512,52058],{"class":157},[147,88514,51607],{"class":153},[147,88516,51580],{"class":157},[147,88518,88519],{"class":149,"line":1592},[147,88520,2674],{"emptyLinePlaceholder":324},[147,88522,88523,88525,88527],{"class":149,"line":1604},[147,88524,1309],{"class":157},[147,88526,52073],{"class":153},[147,88528,51580],{"class":157},[147,88530,88531],{"class":149,"line":1886},[147,88532,88533],{"class":458},"  \u003C!-- 先引用这个库 -->\n",[147,88535,88536,88538,88540,88542,88544,88547,88549,88551],{"class":149,"line":1891},[147,88537,52417],{"class":157},[147,88539,52086],{"class":153},[147,88541,55512],{"class":2237},[147,88543,445],{"class":157},[147,88545,88546],{"class":504},"\"lodash.min.js\"",[147,88548,55587],{"class":157},[147,88550,52086],{"class":153},[147,88552,51580],{"class":157},[147,88554,88555,88557,88559],{"class":149,"line":1897},[147,88556,52417],{"class":157},[147,88558,52086],{"class":153},[147,88560,51580],{"class":157},[147,88562,88563,88565,88567,88569],{"class":149,"line":1902},[147,88564,11495],{"class":397},[147,88566,70244],{"class":448},[147,88568,13838],{"class":397},[147,88570,15845],{"class":157},[147,88572,88573,88575,88577],{"class":149,"line":1916},[147,88574,71889],{"class":157},[147,88576,88082],{"class":504},[147,88578,31740],{"class":157},[147,88580,88581,88583,88585],{"class":149,"line":1921},[147,88582,71899],{"class":157},[147,88584,1049],{"class":448},[147,88586,31740],{"class":157},[147,88588,88589,88591,88593,88595,88597],{"class":149,"line":1927},[147,88590,88097],{"class":157},[147,88592,88100],{"class":504},[147,88594,12709],{"class":157},[147,88596,88105],{"class":504},[147,88598,88108],{"class":157},[147,88600,88601],{"class":149,"line":1948},[147,88602,78144],{"class":157},[147,88604,88605,88607],{"class":149,"line":1953},[147,88606,88117],{"class":157},[147,88608,88120],{"class":504},[147,88610,88611],{"class":149,"line":1967},[147,88612,52671],{"class":157},[147,88614,88615],{"class":149,"line":1972},[147,88616,2461],{"class":157},[147,88618,88619,88621,88623,88625,88628,88631],{"class":149,"line":2001},[147,88620,11495],{"class":397},[147,88622,88135],{"class":448},[147,88624,13838],{"class":397},[147,88626,88627],{"class":157}," _.",[147,88629,88630],{"class":2237},"cloneDeep",[147,88632,70309],{"class":157},[147,88634,88635,88637,88639],{"class":149,"line":2006},[147,88636,74026],{"class":157},[147,88638,58520],{"class":2237},[147,88640,88327],{"class":157},[147,88642,88643,88646,88648],{"class":149,"line":2023},[147,88644,88645],{"class":157},"    o.family.baby ",[147,88647,445],{"class":397},[147,88649,88361],{"class":504},[147,88651,88652,88654,88656],{"class":149,"line":2028},[147,88653,74026],{"class":157},[147,88655,58520],{"class":2237},[147,88657,70309],{"class":157},[147,88659,88660,88662,88664],{"class":149,"line":2033},[147,88661,52690],{"class":157},[147,88663,52086],{"class":153},[147,88665,51580],{"class":157},[147,88667,88668,88670,88672],{"class":149,"line":2038},[147,88669,52058],{"class":157},[147,88671,52073],{"class":153},[147,88673,51580],{"class":157},[147,88675,88676],{"class":149,"line":2052},[147,88677,2674],{"emptyLinePlaceholder":324},[147,88679,88680,88682,88684],{"class":149,"line":2057},[147,88681,52058],{"class":157},[147,88683,50909],{"class":153},[147,88685,51580],{"class":157},[19,88687,88688],{},[29,88689],{"alt":143,"src":88690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22271,88692,88694],{"id":88693},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[138,88696,88698],{"className":50907,"code":88697,"language":50909,"meta":143,"style":143},"\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",[51,88699,88700,88710,88724,88728,88736,88750,88770,88782,88790,88794,88802,88810,88820,88828,88836,88848,88852,88858,88862,88866,88871,88876,88881,88907,88915,88924,88932,88940,88948,88952],{"__ignoreMap":143},[147,88701,88702,88704,88706,88708],{"class":149,"line":150},[147,88703,51571],{"class":157},[147,88705,51574],{"class":153},[147,88707,51577],{"class":2237},[147,88709,51580],{"class":157},[147,88711,88712,88714,88716,88718,88720,88722],{"class":149,"line":312},[147,88713,1309],{"class":157},[147,88715,50909],{"class":153},[147,88717,51589],{"class":2237},[147,88719,445],{"class":157},[147,88721,51594],{"class":504},[147,88723,51580],{"class":157},[147,88725,88726],{"class":149,"line":1454},[147,88727,2674],{"emptyLinePlaceholder":324},[147,88729,88730,88732,88734],{"class":149,"line":1469},[147,88731,1309],{"class":157},[147,88733,51607],{"class":153},[147,88735,51580],{"class":157},[147,88737,88738,88740,88742,88744,88746,88748],{"class":149,"line":1475},[147,88739,52417],{"class":157},[147,88741,51617],{"class":153},[147,88743,51620],{"class":2237},[147,88745,445],{"class":157},[147,88747,51625],{"class":504},[147,88749,51580],{"class":157},[147,88751,88752,88754,88756,88758,88760,88762,88764,88766,88768],{"class":149,"line":1489},[147,88753,52417],{"class":157},[147,88755,51617],{"class":153},[147,88757,15193],{"class":2237},[147,88759,445],{"class":157},[147,88761,51664],{"class":504},[147,88763,51644],{"class":2237},[147,88765,445],{"class":157},[147,88767,51671],{"class":504},[147,88769,51580],{"class":157},[147,88771,88772,88774,88776,88778,88780],{"class":149,"line":1495},[147,88773,52417],{"class":157},[147,88775,51680],{"class":153},[147,88777,51683],{"class":157},[147,88779,51680],{"class":153},[147,88781,51580],{"class":157},[147,88783,88784,88786,88788],{"class":149,"line":1586},[147,88785,52058],{"class":157},[147,88787,51607],{"class":153},[147,88789,51580],{"class":157},[147,88791,88792],{"class":149,"line":1592},[147,88793,2674],{"emptyLinePlaceholder":324},[147,88795,88796,88798,88800],{"class":149,"line":1604},[147,88797,1309],{"class":157},[147,88799,52073],{"class":153},[147,88801,51580],{"class":157},[147,88803,88804,88806,88808],{"class":149,"line":1886},[147,88805,52417],{"class":157},[147,88807,52086],{"class":153},[147,88809,51580],{"class":157},[147,88811,88812,88814,88816,88818],{"class":149,"line":1891},[147,88813,11495],{"class":397},[147,88815,70244],{"class":448},[147,88817,13838],{"class":397},[147,88819,15845],{"class":157},[147,88821,88822,88824,88826],{"class":149,"line":1897},[147,88823,71889],{"class":157},[147,88825,88082],{"class":504},[147,88827,31740],{"class":157},[147,88829,88830,88832,88834],{"class":149,"line":1902},[147,88831,71899],{"class":157},[147,88833,1049],{"class":448},[147,88835,31740],{"class":157},[147,88837,88838,88840,88842,88844,88846],{"class":149,"line":1916},[147,88839,88097],{"class":157},[147,88841,88100],{"class":504},[147,88843,12709],{"class":157},[147,88845,88105],{"class":504},[147,88847,88108],{"class":157},[147,88849,88850],{"class":149,"line":1921},[147,88851,78144],{"class":157},[147,88853,88854,88856],{"class":149,"line":1927},[147,88855,88117],{"class":157},[147,88857,88120],{"class":504},[147,88859,88860],{"class":149,"line":1948},[147,88861,52671],{"class":157},[147,88863,88864],{"class":149,"line":1953},[147,88865,2461],{"class":157},[147,88867,88868],{"class":149,"line":1967},[147,88869,88870],{"class":458},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[147,88872,88873],{"class":149,"line":1972},[147,88874,88875],{"class":458},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[147,88877,88878],{"class":149,"line":2001},[147,88879,88880],{"class":458},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[147,88882,88883,88885,88887,88889,88892,88894,88897,88899,88901,88903,88905],{"class":149,"line":2006},[147,88884,11495],{"class":397},[147,88886,88135],{"class":448},[147,88888,13838],{"class":397},[147,88890,88891],{"class":448}," JSON",[147,88893,957],{"class":157},[147,88895,88896],{"class":2237},"parse",[147,88898,401],{"class":157},[147,88900,71937],{"class":448},[147,88902,957],{"class":157},[147,88904,71942],{"class":2237},[147,88906,71945],{"class":157},[147,88908,88909,88911,88913],{"class":149,"line":2023},[147,88910,74026],{"class":157},[147,88912,58520],{"class":2237},[147,88914,88327],{"class":157},[147,88916,88917,88919,88921],{"class":149,"line":2028},[147,88918,88645],{"class":157},[147,88920,445],{"class":397},[147,88922,88923],{"class":504}," '123'\n",[147,88925,88926,88928,88930],{"class":149,"line":2033},[147,88927,74026],{"class":157},[147,88929,58520],{"class":2237},[147,88931,70309],{"class":157},[147,88933,88934,88936,88938],{"class":149,"line":2038},[147,88935,52690],{"class":157},[147,88937,52086],{"class":153},[147,88939,51580],{"class":157},[147,88941,88942,88944,88946],{"class":149,"line":2052},[147,88943,52058],{"class":157},[147,88945,52073],{"class":153},[147,88947,51580],{"class":157},[147,88949,88950],{"class":149,"line":2057},[147,88951,2674],{"emptyLinePlaceholder":324},[147,88953,88954,88956,88958],{"class":149,"line":2851},[147,88955,52058],{"class":157},[147,88957,50909],{"class":153},[147,88959,51580],{"class":157},[19,88961,88962],{},[29,88963],{"alt":143,"src":88964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,88966,88968],{"id":88967},"_415-异常处理","4.15 异常处理",[350,88970,88971],{},[353,88972,88973],{},"throw抛异常",[19,88975,88976],{},[29,88977],{"alt":143,"src":88978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[350,88980,88981],{"start":312},[353,88982,88983],{},"try\u002Fcatch 捕获错误信息",[19,88985,88986],{},[29,88987],{"alt":143,"src":88988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[138,88990,88992],{"className":50907,"code":88991,"language":50909,"meta":143,"style":143},"\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",[51,88993,88994,89004,89018,89022,89030,89044,89064,89076,89084,89088,89096,89108,89116,89125,89132,89137,89156,89165,89176,89181,89191,89196,89201,89206,89223,89227,89232,89239,89251,89255,89267,89271,89275,89280,89285,89292,89300,89308,89312],{"__ignoreMap":143},[147,88995,88996,88998,89000,89002],{"class":149,"line":150},[147,88997,51571],{"class":157},[147,88999,51574],{"class":153},[147,89001,51577],{"class":2237},[147,89003,51580],{"class":157},[147,89005,89006,89008,89010,89012,89014,89016],{"class":149,"line":312},[147,89007,1309],{"class":157},[147,89009,50909],{"class":153},[147,89011,51589],{"class":2237},[147,89013,445],{"class":157},[147,89015,51594],{"class":504},[147,89017,51580],{"class":157},[147,89019,89020],{"class":149,"line":1454},[147,89021,2674],{"emptyLinePlaceholder":324},[147,89023,89024,89026,89028],{"class":149,"line":1469},[147,89025,1309],{"class":157},[147,89027,51607],{"class":153},[147,89029,51580],{"class":157},[147,89031,89032,89034,89036,89038,89040,89042],{"class":149,"line":1475},[147,89033,52417],{"class":157},[147,89035,51617],{"class":153},[147,89037,51620],{"class":2237},[147,89039,445],{"class":157},[147,89041,51625],{"class":504},[147,89043,51580],{"class":157},[147,89045,89046,89048,89050,89052,89054,89056,89058,89060,89062],{"class":149,"line":1489},[147,89047,52417],{"class":157},[147,89049,51617],{"class":153},[147,89051,15193],{"class":2237},[147,89053,445],{"class":157},[147,89055,51664],{"class":504},[147,89057,51644],{"class":2237},[147,89059,445],{"class":157},[147,89061,51671],{"class":504},[147,89063,51580],{"class":157},[147,89065,89066,89068,89070,89072,89074],{"class":149,"line":1495},[147,89067,52417],{"class":157},[147,89069,51680],{"class":153},[147,89071,51683],{"class":157},[147,89073,51680],{"class":153},[147,89075,51580],{"class":157},[147,89077,89078,89080,89082],{"class":149,"line":1586},[147,89079,52058],{"class":157},[147,89081,51607],{"class":153},[147,89083,51580],{"class":157},[147,89085,89086],{"class":149,"line":1592},[147,89087,2674],{"emptyLinePlaceholder":324},[147,89089,89090,89092,89094],{"class":149,"line":1604},[147,89091,1309],{"class":157},[147,89093,52073],{"class":153},[147,89095,51580],{"class":157},[147,89097,89098,89100,89102,89104,89106],{"class":149,"line":1886},[147,89099,52417],{"class":157},[147,89101,19],{"class":153},[147,89103,53767],{"class":157},[147,89105,19],{"class":153},[147,89107,51580],{"class":157},[147,89109,89110,89112,89114],{"class":149,"line":1891},[147,89111,52417],{"class":157},[147,89113,52086],{"class":153},[147,89115,51580],{"class":157},[147,89117,89118,89120,89123],{"class":149,"line":1897},[147,89119,70357],{"class":397},[147,89121,89122],{"class":2237}," fn",[147,89124,11127],{"class":157},[147,89126,89127,89130],{"class":149,"line":1902},[147,89128,89129],{"class":397},"      try",[147,89131,15845],{"class":157},[147,89133,89134],{"class":149,"line":1916},[147,89135,89136],{"class":458},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[147,89138,89139,89141,89143,89145,89147,89149,89151,89154],{"class":149,"line":1921},[147,89140,61543],{"class":397},[147,89142,7099],{"class":448},[147,89144,13838],{"class":397},[147,89146,54669],{"class":157},[147,89148,54672],{"class":2237},[147,89150,401],{"class":157},[147,89152,89153],{"class":504},"'.p'",[147,89155,407],{"class":157},[147,89157,89158,89161,89163],{"class":149,"line":1927},[147,89159,89160],{"class":157},"        p.style.color ",[147,89162,445],{"class":397},[147,89164,67324],{"class":504},[147,89166,89167,89170,89173],{"class":149,"line":1948},[147,89168,89169],{"class":157},"      } ",[147,89171,89172],{"class":397},"catch",[147,89174,89175],{"class":157}," (err) {\n",[147,89177,89178],{"class":149,"line":1953},[147,89179,89180],{"class":458},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[147,89182,89183,89186,89188],{"class":149,"line":1967},[147,89184,89185],{"class":157},"        console.",[147,89187,58520],{"class":2237},[147,89189,89190],{"class":157},"(err.message)\n",[147,89192,89193],{"class":149,"line":1972},[147,89194,89195],{"class":458},"        \u002F\u002F 想要中断程序，需要加return\n",[147,89197,89198],{"class":149,"line":2001},[147,89199,89200],{"class":458},"        \u002F\u002F return\n",[147,89202,89203],{"class":149,"line":2006},[147,89204,89205],{"class":458},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[147,89207,89208,89211,89213,89216,89218,89221],{"class":149,"line":2023},[147,89209,89210],{"class":397},"        throw",[147,89212,11852],{"class":397},[147,89214,89215],{"class":2237}," Error",[147,89217,401],{"class":157},[147,89219,89220],{"class":504},"'你看看，选择器错误了吧'",[147,89222,407],{"class":157},[147,89224,89225],{"class":149,"line":2028},[147,89226,52671],{"class":157},[147,89228,89229],{"class":149,"line":2033},[147,89230,89231],{"class":458},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[147,89233,89234,89237],{"class":149,"line":2038},[147,89235,89236],{"class":397},"      finally",[147,89238,15845],{"class":157},[147,89240,89241,89244,89246,89249],{"class":149,"line":2052},[147,89242,89243],{"class":2237},"        alert",[147,89245,401],{"class":157},[147,89247,89248],{"class":504},"'弹出对话框'",[147,89250,407],{"class":157},[147,89252,89253],{"class":149,"line":2057},[147,89254,52671],{"class":157},[147,89256,89257,89259,89261,89263,89265],{"class":149,"line":2851},[147,89258,58517],{"class":157},[147,89260,58520],{"class":2237},[147,89262,401],{"class":157},[147,89264,871],{"class":448},[147,89266,407],{"class":157},[147,89268,89269],{"class":149,"line":2865},[147,89270,2674],{"emptyLinePlaceholder":324},[147,89272,89273],{"class":149,"line":2873},[147,89274,2461],{"class":157},[147,89276,89277],{"class":149,"line":2878},[147,89278,89279],{"class":458},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[147,89281,89282],{"class":149,"line":2884},[147,89283,89284],{"class":458},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[147,89286,89287,89290],{"class":149,"line":2890},[147,89288,89289],{"class":2237},"    fn",[147,89291,2250],{"class":157},[147,89293,89294,89296,89298],{"class":149,"line":2895},[147,89295,52690],{"class":157},[147,89297,52086],{"class":153},[147,89299,51580],{"class":157},[147,89301,89302,89304,89306],{"class":149,"line":8222},[147,89303,52058],{"class":157},[147,89305,52073],{"class":153},[147,89307,51580],{"class":157},[147,89309,89310],{"class":149,"line":8246},[147,89311,2674],{"emptyLinePlaceholder":324},[147,89313,89314,89316,89318],{"class":149,"line":8251},[147,89315,52058],{"class":157},[147,89317,50909],{"class":153},[147,89319,51580],{"class":157},[19,89321,89322],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[350,89324,89325],{"start":1454},[353,89326,89327],{},"debugger",[19,89329,89330],{},[29,89331],{"alt":143,"src":89332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,89334,89335],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,89337,89339],{"id":89338},"_416-处理this","4.16 处理this",[367,89341,89343],{"id":89342},"_4161-this的指向","4.16.1 this的指向",[350,89345,89346],{},[353,89347,89348],{},"普通函数的this",[19,89350,89351],{},[29,89352],{"alt":143,"src":89353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[350,89355,89356],{"start":312},[353,89357,89358],{},"箭头函数的this",[19,89360,89361],{},[29,89362],{"alt":143,"src":89363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,89365,89366],{},[29,89367],{"alt":143,"src":89368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,89370,89371],{},[29,89372],{"alt":143,"src":89373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[367,89375,89377],{"id":89376},"_4162-this的改变","4.16.2 this的改变",[19,89379,89380],{},"call() apply() bind()",[350,89382,89383],{},[353,89384,89385],{},"call()",[19,89387,89388],{},[29,89389],{"alt":143,"src":89390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,89392,89393],{},"两个作用：①调用函数；②改变this指向",[138,89395,89397],{"className":53340,"code":89396,"language":53342,"meta":143,"style":143},"\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",[51,89398,89399,89407,89415,89419,89424,89428,89433,89438,89443,89447,89452,89460],{"__ignoreMap":143},[147,89400,89401,89403,89405],{"class":149,"line":150},[147,89402,1309],{"class":157},[147,89404,52073],{"class":153},[147,89406,51580],{"class":157},[147,89408,89409,89411,89413],{"class":149,"line":312},[147,89410,52417],{"class":157},[147,89412,52086],{"class":153},[147,89414,51580],{"class":157},[147,89416,89417],{"class":149,"line":1454},[147,89418,71796],{"class":157},[147,89420,89421],{"class":149,"line":1469},[147,89422,89423],{"class":157},"      uname: 'pink'\n",[147,89425,89426],{"class":149,"line":1475},[147,89427,2461],{"class":157},[147,89429,89430],{"class":149,"line":1489},[147,89431,89432],{"class":157},"    function fn(x, y) {\n",[147,89434,89435],{"class":149,"line":1495},[147,89436,89437],{"class":157},"      console.log(this)  \u002F\u002Fwindow\n",[147,89439,89440],{"class":149,"line":1586},[147,89441,89442],{"class":157},"      console.log(x + y)\n",[147,89444,89445],{"class":149,"line":1592},[147,89446,2461],{"class":157},[147,89448,89449],{"class":149,"line":1604},[147,89450,89451],{"class":157},"    fn.call(obj, 1, 2)\n",[147,89453,89454,89456,89458],{"class":149,"line":1886},[147,89455,52690],{"class":157},[147,89457,52086],{"class":153},[147,89459,51580],{"class":157},[147,89461,89462,89464,89466],{"class":149,"line":1891},[147,89463,52058],{"class":157},[147,89465,52073],{"class":153},[147,89467,51580],{"class":157},[19,89469,89470],{},[29,89471],{"alt":143,"src":89472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[350,89474,89475],{"start":312},[353,89476,89477],{},"apply()",[19,89479,89480],{},[29,89481],{"alt":143,"src":89482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,89484,89393],{},[19,89486,89487],{},"call传递的是普通参数，而apply必须传递的是数组",[138,89489,89491],{"className":50907,"code":89490,"language":50909,"meta":143,"style":143},"\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",[51,89492,89493,89503,89517,89521,89529,89543,89563,89575,89583,89587,89595,89603,89613,89620,89624,89629,89645,89657,89671,89675,89680,89699,89704,89708,89713,89718,89726,89731,89753,89758,89774,89790,89802,89806,89811,89830,89838,89846,89850],{"__ignoreMap":143},[147,89494,89495,89497,89499,89501],{"class":149,"line":150},[147,89496,51571],{"class":157},[147,89498,51574],{"class":153},[147,89500,51577],{"class":2237},[147,89502,51580],{"class":157},[147,89504,89505,89507,89509,89511,89513,89515],{"class":149,"line":312},[147,89506,1309],{"class":157},[147,89508,50909],{"class":153},[147,89510,51589],{"class":2237},[147,89512,445],{"class":157},[147,89514,51594],{"class":504},[147,89516,51580],{"class":157},[147,89518,89519],{"class":149,"line":1454},[147,89520,2674],{"emptyLinePlaceholder":324},[147,89522,89523,89525,89527],{"class":149,"line":1469},[147,89524,1309],{"class":157},[147,89526,51607],{"class":153},[147,89528,51580],{"class":157},[147,89530,89531,89533,89535,89537,89539,89541],{"class":149,"line":1475},[147,89532,52417],{"class":157},[147,89534,51617],{"class":153},[147,89536,51620],{"class":2237},[147,89538,445],{"class":157},[147,89540,51625],{"class":504},[147,89542,51580],{"class":157},[147,89544,89545,89547,89549,89551,89553,89555,89557,89559,89561],{"class":149,"line":1489},[147,89546,52417],{"class":157},[147,89548,51617],{"class":153},[147,89550,15193],{"class":2237},[147,89552,445],{"class":157},[147,89554,51664],{"class":504},[147,89556,51644],{"class":2237},[147,89558,445],{"class":157},[147,89560,51671],{"class":504},[147,89562,51580],{"class":157},[147,89564,89565,89567,89569,89571,89573],{"class":149,"line":1495},[147,89566,52417],{"class":157},[147,89568,51680],{"class":153},[147,89570,51683],{"class":157},[147,89572,51680],{"class":153},[147,89574,51580],{"class":157},[147,89576,89577,89579,89581],{"class":149,"line":1586},[147,89578,52058],{"class":157},[147,89580,51607],{"class":153},[147,89582,51580],{"class":157},[147,89584,89585],{"class":149,"line":1592},[147,89586,2674],{"emptyLinePlaceholder":324},[147,89588,89589,89591,89593],{"class":149,"line":1604},[147,89590,1309],{"class":157},[147,89592,52073],{"class":153},[147,89594,51580],{"class":157},[147,89596,89597,89599,89601],{"class":149,"line":1886},[147,89598,52417],{"class":157},[147,89600,52086],{"class":153},[147,89602,51580],{"class":157},[147,89604,89605,89607,89609,89611],{"class":149,"line":1891},[147,89606,11495],{"class":397},[147,89608,70244],{"class":448},[147,89610,13838],{"class":397},[147,89612,15845],{"class":157},[147,89614,89615,89617],{"class":149,"line":1897},[147,89616,71899],{"class":157},[147,89618,89619],{"class":448},"18\n",[147,89621,89622],{"class":149,"line":1902},[147,89623,2461],{"class":157},[147,89625,89626],{"class":149,"line":1916},[147,89627,89628],{"class":458},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[147,89630,89631,89633,89635,89637,89639,89641,89643],{"class":149,"line":1921},[147,89632,70357],{"class":397},[147,89634,89122],{"class":2237},[147,89636,401],{"class":157},[147,89638,1219],{"class":5490},[147,89640,12709],{"class":157},[147,89642,1244],{"class":5490},[147,89644,12716],{"class":157},[147,89646,89647,89649,89651,89653,89655],{"class":149,"line":1927},[147,89648,58517],{"class":157},[147,89650,58520],{"class":2237},[147,89652,401],{"class":157},[147,89654,87265],{"class":448},[147,89656,407],{"class":157},[147,89658,89659,89661,89663,89666,89668],{"class":149,"line":1948},[147,89660,58517],{"class":157},[147,89662,58520],{"class":2237},[147,89664,89665],{"class":157},"(x ",[147,89667,880],{"class":397},[147,89669,89670],{"class":157}," y)\n",[147,89672,89673],{"class":149,"line":1953},[147,89674,2461],{"class":157},[147,89676,89677],{"class":149,"line":1967},[147,89678,89679],{"class":458},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[147,89681,89682,89685,89688,89691,89693,89695,89697],{"class":149,"line":1972},[147,89683,89684],{"class":157},"    fn.",[147,89686,89687],{"class":2237},"apply",[147,89689,89690],{"class":157},"(obj, [",[147,89692,616],{"class":448},[147,89694,12709],{"class":157},[147,89696,477],{"class":448},[147,89698,4931],{"class":157},[147,89700,89701],{"class":149,"line":2001},[147,89702,89703],{"class":458},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[147,89705,89706],{"class":149,"line":2006},[147,89707,2674],{"emptyLinePlaceholder":324},[147,89709,89710],{"class":149,"line":2023},[147,89711,89712],{"class":458},"    \u002F\u002F 使用场景：求数组最大值\n",[147,89714,89715],{"class":149,"line":2028},[147,89716,89717],{"class":458},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[147,89719,89720,89723],{"class":149,"line":2033},[147,89721,89722],{"class":458},"    \u002F\u002F console.log(max)",[147,89724,89725],{"class":458},"   \u002F\u002F3\n",[147,89727,89728],{"class":149,"line":2038},[147,89729,89730],{"class":458},"    \u002F\u002F 指向空或者Math都是可以的\n",[147,89732,89733,89735,89737,89739,89741,89743,89745,89747,89749,89751],{"class":149,"line":2052},[147,89734,11495],{"class":397},[147,89736,57968],{"class":448},[147,89738,13838],{"class":397},[147,89740,52499],{"class":157},[147,89742,710],{"class":448},[147,89744,12709],{"class":157},[147,89746,903],{"class":448},[147,89748,12709],{"class":157},[147,89750,934],{"class":448},[147,89752,33520],{"class":157},[147,89754,89755],{"class":149,"line":2057},[147,89756,89757],{"class":458},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[147,89759,89760,89762,89764,89766,89769,89771],{"class":149,"line":2851},[147,89761,11495],{"class":397},[147,89763,6225],{"class":448},[147,89765,13838],{"class":397},[147,89767,89768],{"class":157}," Math.max.",[147,89770,89687],{"class":2237},[147,89772,89773],{"class":157},"(Math, arr)\n",[147,89775,89776,89778,89781,89783,89786,89788],{"class":149,"line":2865},[147,89777,11495],{"class":397},[147,89779,89780],{"class":448}," min",[147,89782,13838],{"class":397},[147,89784,89785],{"class":157}," Math.min.",[147,89787,89687],{"class":2237},[147,89789,89773],{"class":157},[147,89791,89792,89794,89796,89799],{"class":149,"line":2873},[147,89793,74026],{"class":157},[147,89795,58520],{"class":2237},[147,89797,89798],{"class":157},"(max, min)     ",[147,89800,89801],{"class":458},"\u002F\u002F100,4\n",[147,89803,89804],{"class":149,"line":2878},[147,89805,2674],{"emptyLinePlaceholder":324},[147,89807,89808],{"class":149,"line":2884},[147,89809,89810],{"class":458},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[147,89812,89813,89815,89817,89820,89822,89824,89827],{"class":149,"line":2890},[147,89814,74026],{"class":157},[147,89816,58520],{"class":2237},[147,89818,89819],{"class":157},"(Max.",[147,89821,6289],{"class":2237},[147,89823,401],{"class":157},[147,89825,89826],{"class":397},"...",[147,89828,89829],{"class":157},"arr))\n",[147,89831,89832,89834,89836],{"class":149,"line":2895},[147,89833,52690],{"class":157},[147,89835,52086],{"class":153},[147,89837,51580],{"class":157},[147,89839,89840,89842,89844],{"class":149,"line":8222},[147,89841,52058],{"class":157},[147,89843,52073],{"class":153},[147,89845,51580],{"class":157},[147,89847,89848],{"class":149,"line":8246},[147,89849,2674],{"emptyLinePlaceholder":324},[147,89851,89852,89854,89856],{"class":149,"line":8251},[147,89853,52058],{"class":157},[147,89855,50909],{"class":153},[147,89857,51580],{"class":157},[19,89859,89860],{},[29,89861],{"alt":143,"src":89862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[350,89864,89865],{"start":1454},[353,89866,89867],{},"bind()",[19,89869,89870],{},[29,89871],{"alt":143,"src":89872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,89874,89875],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,89877,89878],{},"bind的语法跟call很相似",[138,89880,89882],{"className":53340,"code":89881,"language":53342,"meta":143,"style":143},"\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",[51,89883,89884,89892,89900,89904,89909,89913,89917,89922,89926,89931,89936,89941,89946,89951,89956,89961,89965,89973],{"__ignoreMap":143},[147,89885,89886,89888,89890],{"class":149,"line":150},[147,89887,1309],{"class":157},[147,89889,52073],{"class":153},[147,89891,51580],{"class":157},[147,89893,89894,89896,89898],{"class":149,"line":312},[147,89895,52417],{"class":157},[147,89897,52086],{"class":153},[147,89899,51580],{"class":157},[147,89901,89902],{"class":149,"line":1454},[147,89903,71796],{"class":157},[147,89905,89906],{"class":149,"line":1469},[147,89907,89908],{"class":157},"      age: 18\n",[147,89910,89911],{"class":149,"line":1475},[147,89912,2461],{"class":157},[147,89914,89915],{"class":149,"line":1489},[147,89916,77416],{"class":157},[147,89918,89919],{"class":149,"line":1495},[147,89920,89921],{"class":157},"      console.log(this)\n",[147,89923,89924],{"class":149,"line":1586},[147,89925,2461],{"class":157},[147,89927,89928],{"class":149,"line":1592},[147,89929,89930],{"class":157},"    \u002F\u002F 1.bind 不会调用函数\n",[147,89932,89933],{"class":149,"line":1604},[147,89934,89935],{"class":157},"    \u002F\u002F 2.bind能改变this的指向\n",[147,89937,89938],{"class":149,"line":1886},[147,89939,89940],{"class":157},"    fn.bind()\n",[147,89942,89943],{"class":149,"line":1891},[147,89944,89945],{"class":157},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[147,89947,89948],{"class":149,"line":1897},[147,89949,89950],{"class":157},"    const fun = fn.bind(obj)\n",[147,89952,89953],{"class":149,"line":1902},[147,89954,89955],{"class":157},"    \u002F\u002F console.log(fun)\n",[147,89957,89958],{"class":149,"line":1916},[147,89959,89960],{"class":157},"    \u002F\u002F 调用,查看this的指向\n",[147,89962,89963],{"class":149,"line":1921},[147,89964,52924],{"class":157},[147,89966,89967,89969,89971],{"class":149,"line":1927},[147,89968,52690],{"class":157},[147,89970,52086],{"class":153},[147,89972,51580],{"class":157},[147,89974,89975,89977,89979],{"class":149,"line":1948},[147,89976,52058],{"class":157},[147,89978,52073],{"class":153},[147,89980,51580],{"class":157},[19,89982,89983],{},[29,89984],{"alt":143,"src":89985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[350,89987,89988],{"start":1469},[353,89989,89990],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[138,89992,89994],{"className":53340,"code":89993,"language":53342,"meta":143,"style":143},"\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",[51,89995,89996,90004,90017,90025,90030,90034,90039,90044,90049,90054,90059,90064,90069,90074,90078,90086],{"__ignoreMap":143},[147,89997,89998,90000,90002],{"class":149,"line":150},[147,89999,1309],{"class":157},[147,90001,52073],{"class":153},[147,90003,51580],{"class":157},[147,90005,90006,90008,90010,90013,90015],{"class":149,"line":312},[147,90007,52417],{"class":157},[147,90009,54160],{"class":153},[147,90011,90012],{"class":157},">禁用\u003C\u002F",[147,90014,54160],{"class":153},[147,90016,51580],{"class":157},[147,90018,90019,90021,90023],{"class":149,"line":1454},[147,90020,52417],{"class":157},[147,90022,52086],{"class":153},[147,90024,51580],{"class":157},[147,90026,90027],{"class":149,"line":1469},[147,90028,90029],{"class":157},"    const btn = document.querySelector('button')\n",[147,90031,90032],{"class":149,"line":1475},[147,90033,59289],{"class":157},[147,90035,90036],{"class":149,"line":1489},[147,90037,90038],{"class":157},"      this.disabled = true\n",[147,90040,90041],{"class":149,"line":1495},[147,90042,90043],{"class":157},"      \u002F\u002F 定时器是window进行调用的\n",[147,90045,90046],{"class":149,"line":1586},[147,90047,90048],{"class":157},"      setTimeout(function () {\n",[147,90050,90051],{"class":149,"line":1592},[147,90052,90053],{"class":157},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[147,90055,90056],{"class":149,"line":1604},[147,90057,90058],{"class":157},"        this.disabled = false\n",[147,90060,90061],{"class":149,"line":1886},[147,90062,90063],{"class":157},"      }.bind(this), 2000)\n",[147,90065,90066],{"class":149,"line":1891},[147,90067,90068],{"class":157},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[147,90070,90071],{"class":149,"line":1897},[147,90072,90073],{"class":157},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[147,90075,90076],{"class":149,"line":1902},[147,90077,33735],{"class":157},[147,90079,90080,90082,90084],{"class":149,"line":1916},[147,90081,52690],{"class":157},[147,90083,52086],{"class":153},[147,90085,51580],{"class":157},[147,90087,90088,90090,90092],{"class":149,"line":1921},[147,90089,52058],{"class":157},[147,90091,52073],{"class":153},[147,90093,51580],{"class":157},[350,90095,90096],{"start":1475},[353,90097,22226],{},[19,90099,90100],{},[29,90101],{"alt":143,"src":90102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,90104,90106],{"id":90105},"_417-性能优化","4.17 性能优化",[367,90108,90110],{"id":90109},"_4171-防抖","4.17.1 防抖",[19,90112,90113],{},[29,90114],{"alt":143,"src":90115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,90117,90118],{},[234,90119,90120],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,90122,90123],{},"防抖实现方式：",[1406,90125,90126],{},[353,90127,90128],{},"lodash 提供了防抖处理",[19,90130,90131],{},"_.debounce(func,[wait=0],[options={}])",[19,90133,90134],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[138,90136,90138],{"className":50907,"code":90137,"language":50909,"meta":143,"style":143},"\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",[51,90139,90140,90150,90164,90168,90176,90190,90210,90222,90230,90236,90246,90258,90270,90281,90293,90303,90313,90326,90330,90338,90346,90350,90358,90376,90394,90402,90421,90431,90440,90451,90456,90460,90465,90470,90475,90500,90508,90516,90520],{"__ignoreMap":143},[147,90141,90142,90144,90146,90148],{"class":149,"line":150},[147,90143,51571],{"class":157},[147,90145,51574],{"class":153},[147,90147,51577],{"class":2237},[147,90149,51580],{"class":157},[147,90151,90152,90154,90156,90158,90160,90162],{"class":149,"line":312},[147,90153,1309],{"class":157},[147,90155,50909],{"class":153},[147,90157,51589],{"class":2237},[147,90159,445],{"class":157},[147,90161,51594],{"class":504},[147,90163,51580],{"class":157},[147,90165,90166],{"class":149,"line":1454},[147,90167,2674],{"emptyLinePlaceholder":324},[147,90169,90170,90172,90174],{"class":149,"line":1469},[147,90171,1309],{"class":157},[147,90173,51607],{"class":153},[147,90175,51580],{"class":157},[147,90177,90178,90180,90182,90184,90186,90188],{"class":149,"line":1475},[147,90179,52417],{"class":157},[147,90181,51617],{"class":153},[147,90183,51620],{"class":2237},[147,90185,445],{"class":157},[147,90187,51625],{"class":504},[147,90189,51580],{"class":157},[147,90191,90192,90194,90196,90198,90200,90202,90204,90206,90208],{"class":149,"line":1489},[147,90193,52417],{"class":157},[147,90195,51617],{"class":153},[147,90197,15193],{"class":2237},[147,90199,445],{"class":157},[147,90201,51664],{"class":504},[147,90203,51644],{"class":2237},[147,90205,445],{"class":157},[147,90207,51671],{"class":504},[147,90209,51580],{"class":157},[147,90211,90212,90214,90216,90218,90220],{"class":149,"line":1495},[147,90213,52417],{"class":157},[147,90215,51680],{"class":153},[147,90217,51683],{"class":157},[147,90219,51680],{"class":153},[147,90221,51580],{"class":157},[147,90223,90224,90226,90228],{"class":149,"line":1586},[147,90225,52417],{"class":157},[147,90227,308],{"class":153},[147,90229,51580],{"class":157},[147,90231,90232,90234],{"class":149,"line":1592},[147,90233,55025],{"class":2237},[147,90235,15845],{"class":157},[147,90237,90238,90240,90242,90244],{"class":149,"line":1604},[147,90239,72869],{"class":448},[147,90241,51710],{"class":157},[147,90243,60778],{"class":448},[147,90245,1565],{"class":157},[147,90247,90248,90250,90252,90254,90256],{"class":149,"line":1886},[147,90249,55044],{"class":448},[147,90251,51710],{"class":157},[147,90253,1996],{"class":448},[147,90255,51765],{"class":397},[147,90257,1565],{"class":157},[147,90259,90260,90262,90264,90266,90268],{"class":149,"line":1891},[147,90261,55058],{"class":448},[147,90263,51710],{"class":157},[147,90265,1996],{"class":448},[147,90267,51765],{"class":397},[147,90269,1565],{"class":157},[147,90271,90272,90274,90276,90279],{"class":149,"line":1897},[147,90273,55157],{"class":448},[147,90275,51710],{"class":157},[147,90277,90278],{"class":448},"gray",[147,90280,1565],{"class":157},[147,90282,90283,90285,90287,90289,90291],{"class":149,"line":1902},[147,90284,55195],{"class":448},[147,90286,51710],{"class":157},[147,90288,1224],{"class":448},[147,90290,51765],{"class":397},[147,90292,1565],{"class":157},[147,90294,90295,90297,90299,90301],{"class":149,"line":1916},[147,90296,57689],{"class":448},[147,90298,51710],{"class":157},[147,90300,61115],{"class":448},[147,90302,1565],{"class":157},[147,90304,90305,90307,90309,90311],{"class":149,"line":1921},[147,90306,57559],{"class":448},[147,90308,51710],{"class":157},[147,90310,51865],{"class":448},[147,90312,1565],{"class":157},[147,90314,90315,90318,90320,90322,90324],{"class":149,"line":1927},[147,90316,90317],{"class":448},"      padding-top",[147,90319,51710],{"class":157},[147,90321,718],{"class":448},[147,90323,51765],{"class":397},[147,90325,1565],{"class":157},[147,90327,90328],{"class":149,"line":1948},[147,90329,2461],{"class":157},[147,90331,90332,90334,90336],{"class":149,"line":1953},[147,90333,52690],{"class":157},[147,90335,308],{"class":153},[147,90337,51580],{"class":157},[147,90339,90340,90342,90344],{"class":149,"line":1967},[147,90341,52058],{"class":157},[147,90343,51607],{"class":153},[147,90345,51580],{"class":157},[147,90347,90348],{"class":149,"line":1972},[147,90349,2674],{"emptyLinePlaceholder":324},[147,90351,90352,90354,90356],{"class":149,"line":2001},[147,90353,1309],{"class":157},[147,90355,52073],{"class":153},[147,90357,51580],{"class":157},[147,90359,90360,90362,90364,90366,90368,90370,90372,90374],{"class":149,"line":2006},[147,90361,52417],{"class":157},[147,90363,51884],{"class":153},[147,90365,53759],{"class":2237},[147,90367,445],{"class":157},[147,90369,53764],{"class":504},[147,90371,55587],{"class":157},[147,90373,51884],{"class":153},[147,90375,51580],{"class":157},[147,90377,90378,90380,90382,90384,90386,90388,90390,90392],{"class":149,"line":2023},[147,90379,52417],{"class":157},[147,90381,52086],{"class":153},[147,90383,55512],{"class":2237},[147,90385,445],{"class":157},[147,90387,88546],{"class":504},[147,90389,55587],{"class":157},[147,90391,52086],{"class":153},[147,90393,51580],{"class":157},[147,90395,90396,90398,90400],{"class":149,"line":2028},[147,90397,52417],{"class":157},[147,90399,52086],{"class":153},[147,90401,51580],{"class":157},[147,90403,90404,90406,90408,90410,90412,90414,90416,90419],{"class":149,"line":2033},[147,90405,11495],{"class":397},[147,90407,87205],{"class":448},[147,90409,13838],{"class":397},[147,90411,54669],{"class":157},[147,90413,54672],{"class":2237},[147,90415,401],{"class":157},[147,90417,90418],{"class":504},"'.box'",[147,90420,407],{"class":157},[147,90422,90423,90425,90427,90429],{"class":149,"line":2038},[147,90424,52492],{"class":397},[147,90426,9712],{"class":157},[147,90428,445],{"class":397},[147,90430,47607],{"class":448},[147,90432,90433,90435,90438],{"class":149,"line":2052},[147,90434,70357],{"class":397},[147,90436,90437],{"class":2237}," mouseMove",[147,90439,11127],{"class":157},[147,90441,90442,90445,90447,90449],{"class":149,"line":2057},[147,90443,90444],{"class":157},"      box.innerHTML ",[147,90446,445],{"class":397},[147,90448,3306],{"class":157},[147,90450,2976],{"class":397},[147,90452,90453],{"class":149,"line":2851},[147,90454,90455],{"class":458},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[147,90457,90458],{"class":149,"line":2865},[147,90459,2461],{"class":157},[147,90461,90462],{"class":149,"line":2873},[147,90463,90464],{"class":458},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[147,90466,90467],{"class":149,"line":2878},[147,90468,90469],{"class":458},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[147,90471,90472],{"class":149,"line":2884},[147,90473,90474],{"class":458},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[147,90476,90477,90480,90482,90484,90487,90490,90493,90496,90498],{"class":149,"line":2890},[147,90478,90479],{"class":157},"    box.",[147,90481,58086],{"class":2237},[147,90483,401],{"class":157},[147,90485,90486],{"class":504},"'mousemove'",[147,90488,90489],{"class":157},", _.",[147,90491,90492],{"class":2237},"debounce",[147,90494,90495],{"class":157},"(mouseMove, ",[147,90497,65347],{"class":448},[147,90499,30771],{"class":157},[147,90501,90502,90504,90506],{"class":149,"line":2895},[147,90503,52690],{"class":157},[147,90505,52086],{"class":153},[147,90507,51580],{"class":157},[147,90509,90510,90512,90514],{"class":149,"line":8222},[147,90511,52058],{"class":157},[147,90513,52073],{"class":153},[147,90515,51580],{"class":157},[147,90517,90518],{"class":149,"line":8246},[147,90519,2674],{"emptyLinePlaceholder":324},[147,90521,90522,90524,90526],{"class":149,"line":8251},[147,90523,52058],{"class":157},[147,90525,50909],{"class":153},[147,90527,51580],{"class":157},[1406,90529,90530],{},[353,90531,90532],{},"手写一个防抖函数来处理",[19,90534,90535],{},"防抖的核心就是利用定时器来实现的：",[19,90537,90538],{},"①声明一个定时器变量",[19,90540,90541],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,90543,90544],{},"③如果没有定时器则开启定时器，记得存到变量里面",[138,90546,90548],{"className":50907,"code":90547,"language":50909,"meta":143,"style":143},"\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",[51,90549,90550,90560,90574,90578,90586,90600,90620,90632,90640,90646,90656,90668,90680,90690,90702,90712,90722,90734,90738,90746,90754,90758,90766,90784,90802,90810,90828,90838,90846,90856,90860,90864,90868,90873,90878,90883,90888,90893,90898,90916,90923,90928,90936,90941,90954,90970,90980,90985,90989,90993,91013,91017,91022,91027,91032,91037,91045,91053,91057],{"__ignoreMap":143},[147,90551,90552,90554,90556,90558],{"class":149,"line":150},[147,90553,51571],{"class":157},[147,90555,51574],{"class":153},[147,90557,51577],{"class":2237},[147,90559,51580],{"class":157},[147,90561,90562,90564,90566,90568,90570,90572],{"class":149,"line":312},[147,90563,1309],{"class":157},[147,90565,50909],{"class":153},[147,90567,51589],{"class":2237},[147,90569,445],{"class":157},[147,90571,51594],{"class":504},[147,90573,51580],{"class":157},[147,90575,90576],{"class":149,"line":1454},[147,90577,2674],{"emptyLinePlaceholder":324},[147,90579,90580,90582,90584],{"class":149,"line":1469},[147,90581,1309],{"class":157},[147,90583,51607],{"class":153},[147,90585,51580],{"class":157},[147,90587,90588,90590,90592,90594,90596,90598],{"class":149,"line":1475},[147,90589,52417],{"class":157},[147,90591,51617],{"class":153},[147,90593,51620],{"class":2237},[147,90595,445],{"class":157},[147,90597,51625],{"class":504},[147,90599,51580],{"class":157},[147,90601,90602,90604,90606,90608,90610,90612,90614,90616,90618],{"class":149,"line":1489},[147,90603,52417],{"class":157},[147,90605,51617],{"class":153},[147,90607,15193],{"class":2237},[147,90609,445],{"class":157},[147,90611,51664],{"class":504},[147,90613,51644],{"class":2237},[147,90615,445],{"class":157},[147,90617,51671],{"class":504},[147,90619,51580],{"class":157},[147,90621,90622,90624,90626,90628,90630],{"class":149,"line":1495},[147,90623,52417],{"class":157},[147,90625,51680],{"class":153},[147,90627,51683],{"class":157},[147,90629,51680],{"class":153},[147,90631,51580],{"class":157},[147,90633,90634,90636,90638],{"class":149,"line":1586},[147,90635,52417],{"class":157},[147,90637,308],{"class":153},[147,90639,51580],{"class":157},[147,90641,90642,90644],{"class":149,"line":1592},[147,90643,55025],{"class":2237},[147,90645,15845],{"class":157},[147,90647,90648,90650,90652,90654],{"class":149,"line":1604},[147,90649,72869],{"class":448},[147,90651,51710],{"class":157},[147,90653,60778],{"class":448},[147,90655,1565],{"class":157},[147,90657,90658,90660,90662,90664,90666],{"class":149,"line":1886},[147,90659,55044],{"class":448},[147,90661,51710],{"class":157},[147,90663,1996],{"class":448},[147,90665,51765],{"class":397},[147,90667,1565],{"class":157},[147,90669,90670,90672,90674,90676,90678],{"class":149,"line":1891},[147,90671,55058],{"class":448},[147,90673,51710],{"class":157},[147,90675,1996],{"class":448},[147,90677,51765],{"class":397},[147,90679,1565],{"class":157},[147,90681,90682,90684,90686,90688],{"class":149,"line":1897},[147,90683,55157],{"class":448},[147,90685,51710],{"class":157},[147,90687,90278],{"class":448},[147,90689,1565],{"class":157},[147,90691,90692,90694,90696,90698,90700],{"class":149,"line":1902},[147,90693,55195],{"class":448},[147,90695,51710],{"class":157},[147,90697,1224],{"class":448},[147,90699,51765],{"class":397},[147,90701,1565],{"class":157},[147,90703,90704,90706,90708,90710],{"class":149,"line":1916},[147,90705,57689],{"class":448},[147,90707,51710],{"class":157},[147,90709,61115],{"class":448},[147,90711,1565],{"class":157},[147,90713,90714,90716,90718,90720],{"class":149,"line":1921},[147,90715,57559],{"class":448},[147,90717,51710],{"class":157},[147,90719,51865],{"class":448},[147,90721,1565],{"class":157},[147,90723,90724,90726,90728,90730,90732],{"class":149,"line":1927},[147,90725,90317],{"class":448},[147,90727,51710],{"class":157},[147,90729,718],{"class":448},[147,90731,51765],{"class":397},[147,90733,1565],{"class":157},[147,90735,90736],{"class":149,"line":1948},[147,90737,2461],{"class":157},[147,90739,90740,90742,90744],{"class":149,"line":1953},[147,90741,52690],{"class":157},[147,90743,308],{"class":153},[147,90745,51580],{"class":157},[147,90747,90748,90750,90752],{"class":149,"line":1967},[147,90749,52058],{"class":157},[147,90751,51607],{"class":153},[147,90753,51580],{"class":157},[147,90755,90756],{"class":149,"line":1972},[147,90757,2674],{"emptyLinePlaceholder":324},[147,90759,90760,90762,90764],{"class":149,"line":2001},[147,90761,1309],{"class":157},[147,90763,52073],{"class":153},[147,90765,51580],{"class":157},[147,90767,90768,90770,90772,90774,90776,90778,90780,90782],{"class":149,"line":2006},[147,90769,52417],{"class":157},[147,90771,51884],{"class":153},[147,90773,53759],{"class":2237},[147,90775,445],{"class":157},[147,90777,53764],{"class":504},[147,90779,55587],{"class":157},[147,90781,51884],{"class":153},[147,90783,51580],{"class":157},[147,90785,90786,90788,90790,90792,90794,90796,90798,90800],{"class":149,"line":2023},[147,90787,52417],{"class":157},[147,90789,52086],{"class":153},[147,90791,55512],{"class":2237},[147,90793,445],{"class":157},[147,90795,88546],{"class":504},[147,90797,55587],{"class":157},[147,90799,52086],{"class":153},[147,90801,51580],{"class":157},[147,90803,90804,90806,90808],{"class":149,"line":2028},[147,90805,52417],{"class":157},[147,90807,52086],{"class":153},[147,90809,51580],{"class":157},[147,90811,90812,90814,90816,90818,90820,90822,90824,90826],{"class":149,"line":2033},[147,90813,11495],{"class":397},[147,90815,87205],{"class":448},[147,90817,13838],{"class":397},[147,90819,54669],{"class":157},[147,90821,54672],{"class":2237},[147,90823,401],{"class":157},[147,90825,90418],{"class":504},[147,90827,407],{"class":157},[147,90829,90830,90832,90834,90836],{"class":149,"line":2038},[147,90831,52492],{"class":397},[147,90833,9712],{"class":157},[147,90835,445],{"class":397},[147,90837,47607],{"class":448},[147,90839,90840,90842,90844],{"class":149,"line":2052},[147,90841,70357],{"class":397},[147,90843,90437],{"class":2237},[147,90845,11127],{"class":157},[147,90847,90848,90850,90852,90854],{"class":149,"line":2057},[147,90849,90444],{"class":157},[147,90851,445],{"class":397},[147,90853,3306],{"class":157},[147,90855,2976],{"class":397},[147,90857,90858],{"class":149,"line":2851},[147,90859,90455],{"class":458},[147,90861,90862],{"class":149,"line":2865},[147,90863,2461],{"class":157},[147,90865,90866],{"class":149,"line":2873},[147,90867,90464],{"class":458},[147,90869,90870],{"class":149,"line":2878},[147,90871,90872],{"class":458},"    \u002F\u002F 手写防抖函数\n",[147,90874,90875],{"class":149,"line":2884},[147,90876,90877],{"class":458},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[147,90879,90880],{"class":149,"line":2890},[147,90881,90882],{"class":458},"    \u002F\u002F 1.声明定时器变量\n",[147,90884,90885],{"class":149,"line":2895},[147,90886,90887],{"class":458},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[147,90889,90890],{"class":149,"line":8222},[147,90891,90892],{"class":458},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[147,90894,90895],{"class":149,"line":8246},[147,90896,90897],{"class":458},"    \u002F\u002F 4.定时器里面写函数调用\n",[147,90899,90900,90902,90905,90907,90910,90912,90914],{"class":149,"line":8251},[147,90901,70357],{"class":397},[147,90903,90904],{"class":2237}," debounce",[147,90906,401],{"class":157},[147,90908,90909],{"class":5490},"fn",[147,90911,12709],{"class":157},[147,90913,1119],{"class":5490},[147,90915,12716],{"class":157},[147,90917,90918,90920],{"class":149,"line":8257},[147,90919,80044],{"class":397},[147,90921,90922],{"class":157}," timer\n",[147,90924,90925],{"class":149,"line":8284},[147,90926,90927],{"class":458},"      \u002F\u002F return 返回一个匿名函数\n",[147,90929,90930,90932,90934],{"class":149,"line":8289},[147,90931,74255],{"class":397},[147,90933,59191],{"class":397},[147,90935,54725],{"class":157},[147,90937,90938],{"class":149,"line":8295},[147,90939,90940],{"class":458},"        \u002F\u002F 这里边写第二三四步\n",[147,90942,90943,90945,90948,90951],{"class":149,"line":8307},[147,90944,2771],{"class":397},[147,90946,90947],{"class":157}," (timer) ",[147,90949,90950],{"class":2237},"clearTimeout",[147,90952,90953],{"class":157},"(timer)\n",[147,90955,90956,90959,90961,90964,90966,90968],{"class":149,"line":8319},[147,90957,90958],{"class":157},"        timer ",[147,90960,445],{"class":397},[147,90962,90963],{"class":2237}," setTimeout",[147,90965,401],{"class":157},[147,90967,54722],{"class":397},[147,90969,54725],{"class":157},[147,90971,90972,90975,90977],{"class":149,"line":8331},[147,90973,90974],{"class":2237},"          fn",[147,90976,13324],{"class":157},[147,90978,90979],{"class":458},"\u002F\u002F加小括号调用fn }, t)\n",[147,90981,90982],{"class":149,"line":9990},[147,90983,90984],{"class":157},"        }, t)\n",[147,90986,90987],{"class":149,"line":10015},[147,90988,52671],{"class":157},[147,90990,90991],{"class":149,"line":10038},[147,90992,2461],{"class":157},[147,90994,90995,90997,90999,91001,91003,91005,91007,91009,91011],{"class":149,"line":10062},[147,90996,90479],{"class":157},[147,90998,58086],{"class":2237},[147,91000,401],{"class":157},[147,91002,90486],{"class":504},[147,91004,12709],{"class":157},[147,91006,90492],{"class":2237},[147,91008,90495],{"class":157},[147,91010,65347],{"class":448},[147,91012,30771],{"class":157},[147,91014,91015],{"class":149,"line":10067},[147,91016,2674],{"emptyLinePlaceholder":324},[147,91018,91019],{"class":149,"line":10072},[147,91020,91021],{"class":458},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[147,91023,91024],{"class":149,"line":10077},[147,91025,91026],{"class":458},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[147,91028,91029],{"class":149,"line":10086},[147,91030,91031],{"class":458},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[147,91033,91034],{"class":149,"line":10091},[147,91035,91036],{"class":458},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[147,91038,91039,91041,91043],{"class":149,"line":10097},[147,91040,52690],{"class":157},[147,91042,52086],{"class":153},[147,91044,51580],{"class":157},[147,91046,91047,91049,91051],{"class":149,"line":10118},[147,91048,52058],{"class":157},[147,91050,52073],{"class":153},[147,91052,51580],{"class":157},[147,91054,91055],{"class":149,"line":10124},[147,91056,2674],{"emptyLinePlaceholder":324},[147,91058,91059,91061,91063],{"class":149,"line":10138},[147,91060,52058],{"class":157},[147,91062,50909],{"class":153},[147,91064,51580],{"class":157},[367,91066,91068],{"id":91067},"_4172-节流","4.17.2 节流",[19,91070,91071],{},[29,91072],{"alt":143,"src":91073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,91075,91076],{},[29,91077],{"alt":143,"src":91078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,91080,91081],{},[234,91082,91083],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,91085,91086],{},"实现方式：",[1406,91088,91089],{},[353,91090,91091],{},"lodash 提供的节流函数来处理",[19,91093,91094],{},"_.throttle(func,[wait=0],[options=])",[19,91096,91097],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[138,91099,91101],{"className":50907,"code":91100,"language":50909,"meta":143,"style":143},"\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",[51,91102,91103,91113,91127,91131,91139,91153,91173,91185,91193,91199,91209,91221,91233,91243,91255,91265,91275,91287,91291,91299,91307,91311,91319,91337,91355,91363,91381,91391,91399,91409,91413,91417,91421,91426,91431,91452,91460,91468,91472],{"__ignoreMap":143},[147,91104,91105,91107,91109,91111],{"class":149,"line":150},[147,91106,51571],{"class":157},[147,91108,51574],{"class":153},[147,91110,51577],{"class":2237},[147,91112,51580],{"class":157},[147,91114,91115,91117,91119,91121,91123,91125],{"class":149,"line":312},[147,91116,1309],{"class":157},[147,91118,50909],{"class":153},[147,91120,51589],{"class":2237},[147,91122,445],{"class":157},[147,91124,51594],{"class":504},[147,91126,51580],{"class":157},[147,91128,91129],{"class":149,"line":1454},[147,91130,2674],{"emptyLinePlaceholder":324},[147,91132,91133,91135,91137],{"class":149,"line":1469},[147,91134,1309],{"class":157},[147,91136,51607],{"class":153},[147,91138,51580],{"class":157},[147,91140,91141,91143,91145,91147,91149,91151],{"class":149,"line":1475},[147,91142,52417],{"class":157},[147,91144,51617],{"class":153},[147,91146,51620],{"class":2237},[147,91148,445],{"class":157},[147,91150,51625],{"class":504},[147,91152,51580],{"class":157},[147,91154,91155,91157,91159,91161,91163,91165,91167,91169,91171],{"class":149,"line":1489},[147,91156,52417],{"class":157},[147,91158,51617],{"class":153},[147,91160,15193],{"class":2237},[147,91162,445],{"class":157},[147,91164,51664],{"class":504},[147,91166,51644],{"class":2237},[147,91168,445],{"class":157},[147,91170,51671],{"class":504},[147,91172,51580],{"class":157},[147,91174,91175,91177,91179,91181,91183],{"class":149,"line":1495},[147,91176,52417],{"class":157},[147,91178,51680],{"class":153},[147,91180,51683],{"class":157},[147,91182,51680],{"class":153},[147,91184,51580],{"class":157},[147,91186,91187,91189,91191],{"class":149,"line":1586},[147,91188,52417],{"class":157},[147,91190,308],{"class":153},[147,91192,51580],{"class":157},[147,91194,91195,91197],{"class":149,"line":1592},[147,91196,55025],{"class":2237},[147,91198,15845],{"class":157},[147,91200,91201,91203,91205,91207],{"class":149,"line":1604},[147,91202,72869],{"class":448},[147,91204,51710],{"class":157},[147,91206,60778],{"class":448},[147,91208,1565],{"class":157},[147,91210,91211,91213,91215,91217,91219],{"class":149,"line":1886},[147,91212,55044],{"class":448},[147,91214,51710],{"class":157},[147,91216,1996],{"class":448},[147,91218,51765],{"class":397},[147,91220,1565],{"class":157},[147,91222,91223,91225,91227,91229,91231],{"class":149,"line":1891},[147,91224,55058],{"class":448},[147,91226,51710],{"class":157},[147,91228,1996],{"class":448},[147,91230,51765],{"class":397},[147,91232,1565],{"class":157},[147,91234,91235,91237,91239,91241],{"class":149,"line":1897},[147,91236,55157],{"class":448},[147,91238,51710],{"class":157},[147,91240,90278],{"class":448},[147,91242,1565],{"class":157},[147,91244,91245,91247,91249,91251,91253],{"class":149,"line":1902},[147,91246,55195],{"class":448},[147,91248,51710],{"class":157},[147,91250,1224],{"class":448},[147,91252,51765],{"class":397},[147,91254,1565],{"class":157},[147,91256,91257,91259,91261,91263],{"class":149,"line":1916},[147,91258,57689],{"class":448},[147,91260,51710],{"class":157},[147,91262,61115],{"class":448},[147,91264,1565],{"class":157},[147,91266,91267,91269,91271,91273],{"class":149,"line":1921},[147,91268,57559],{"class":448},[147,91270,51710],{"class":157},[147,91272,51865],{"class":448},[147,91274,1565],{"class":157},[147,91276,91277,91279,91281,91283,91285],{"class":149,"line":1927},[147,91278,90317],{"class":448},[147,91280,51710],{"class":157},[147,91282,718],{"class":448},[147,91284,51765],{"class":397},[147,91286,1565],{"class":157},[147,91288,91289],{"class":149,"line":1948},[147,91290,2461],{"class":157},[147,91292,91293,91295,91297],{"class":149,"line":1953},[147,91294,52690],{"class":157},[147,91296,308],{"class":153},[147,91298,51580],{"class":157},[147,91300,91301,91303,91305],{"class":149,"line":1967},[147,91302,52058],{"class":157},[147,91304,51607],{"class":153},[147,91306,51580],{"class":157},[147,91308,91309],{"class":149,"line":1972},[147,91310,2674],{"emptyLinePlaceholder":324},[147,91312,91313,91315,91317],{"class":149,"line":2001},[147,91314,1309],{"class":157},[147,91316,52073],{"class":153},[147,91318,51580],{"class":157},[147,91320,91321,91323,91325,91327,91329,91331,91333,91335],{"class":149,"line":2006},[147,91322,52417],{"class":157},[147,91324,51884],{"class":153},[147,91326,53759],{"class":2237},[147,91328,445],{"class":157},[147,91330,53764],{"class":504},[147,91332,55587],{"class":157},[147,91334,51884],{"class":153},[147,91336,51580],{"class":157},[147,91338,91339,91341,91343,91345,91347,91349,91351,91353],{"class":149,"line":2023},[147,91340,52417],{"class":157},[147,91342,52086],{"class":153},[147,91344,55512],{"class":2237},[147,91346,445],{"class":157},[147,91348,88546],{"class":504},[147,91350,55587],{"class":157},[147,91352,52086],{"class":153},[147,91354,51580],{"class":157},[147,91356,91357,91359,91361],{"class":149,"line":2028},[147,91358,52417],{"class":157},[147,91360,52086],{"class":153},[147,91362,51580],{"class":157},[147,91364,91365,91367,91369,91371,91373,91375,91377,91379],{"class":149,"line":2033},[147,91366,11495],{"class":397},[147,91368,87205],{"class":448},[147,91370,13838],{"class":397},[147,91372,54669],{"class":157},[147,91374,54672],{"class":2237},[147,91376,401],{"class":157},[147,91378,90418],{"class":504},[147,91380,407],{"class":157},[147,91382,91383,91385,91387,91389],{"class":149,"line":2038},[147,91384,52492],{"class":397},[147,91386,9712],{"class":157},[147,91388,445],{"class":397},[147,91390,47607],{"class":448},[147,91392,91393,91395,91397],{"class":149,"line":2052},[147,91394,70357],{"class":397},[147,91396,90437],{"class":2237},[147,91398,11127],{"class":157},[147,91400,91401,91403,91405,91407],{"class":149,"line":2057},[147,91402,90444],{"class":157},[147,91404,445],{"class":397},[147,91406,3306],{"class":157},[147,91408,2976],{"class":397},[147,91410,91411],{"class":149,"line":2851},[147,91412,90455],{"class":458},[147,91414,91415],{"class":149,"line":2865},[147,91416,2461],{"class":157},[147,91418,91419],{"class":149,"line":2873},[147,91420,90464],{"class":458},[147,91422,91423],{"class":149,"line":2878},[147,91424,91425],{"class":458},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[147,91427,91428],{"class":149,"line":2884},[147,91429,91430],{"class":458},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[147,91432,91433,91435,91437,91439,91441,91443,91446,91448,91450],{"class":149,"line":2890},[147,91434,90479],{"class":157},[147,91436,58086],{"class":2237},[147,91438,401],{"class":157},[147,91440,90486],{"class":504},[147,91442,90489],{"class":157},[147,91444,91445],{"class":2237},"throttle",[147,91447,90495],{"class":157},[147,91449,65347],{"class":448},[147,91451,30771],{"class":157},[147,91453,91454,91456,91458],{"class":149,"line":2895},[147,91455,52690],{"class":157},[147,91457,52086],{"class":153},[147,91459,51580],{"class":157},[147,91461,91462,91464,91466],{"class":149,"line":8222},[147,91463,52058],{"class":157},[147,91465,52073],{"class":153},[147,91467,51580],{"class":157},[147,91469,91470],{"class":149,"line":8246},[147,91471,2674],{"emptyLinePlaceholder":324},[147,91473,91474,91476,91478],{"class":149,"line":8251},[147,91475,52058],{"class":157},[147,91477,50909],{"class":153},[147,91479,51580],{"class":157},[1406,91481,91482],{},[353,91483,91484],{},"手写一个节流函数来处理",[19,91486,71225],{},[19,91488,90538],{},[19,91490,91491],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,91493,91494],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[138,91496,91498],{"className":50907,"code":91497,"language":50909,"meta":143,"style":143},"\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",[51,91499,91500,91510,91524,91528,91536,91550,91570,91582,91590,91596,91606,91618,91630,91640,91652,91662,91672,91684,91688,91696,91704,91708,91716,91734,91752,91760,91778,91788,91796,91806,91810,91814,91818,91823,91828,91833,91838,91843,91848,91865,91871,91879,91890,91905,91912,91917,91922,91932,91937,91942,91947,91951,91955,91959,91979,91987,91995,91999],{"__ignoreMap":143},[147,91501,91502,91504,91506,91508],{"class":149,"line":150},[147,91503,51571],{"class":157},[147,91505,51574],{"class":153},[147,91507,51577],{"class":2237},[147,91509,51580],{"class":157},[147,91511,91512,91514,91516,91518,91520,91522],{"class":149,"line":312},[147,91513,1309],{"class":157},[147,91515,50909],{"class":153},[147,91517,51589],{"class":2237},[147,91519,445],{"class":157},[147,91521,51594],{"class":504},[147,91523,51580],{"class":157},[147,91525,91526],{"class":149,"line":1454},[147,91527,2674],{"emptyLinePlaceholder":324},[147,91529,91530,91532,91534],{"class":149,"line":1469},[147,91531,1309],{"class":157},[147,91533,51607],{"class":153},[147,91535,51580],{"class":157},[147,91537,91538,91540,91542,91544,91546,91548],{"class":149,"line":1475},[147,91539,52417],{"class":157},[147,91541,51617],{"class":153},[147,91543,51620],{"class":2237},[147,91545,445],{"class":157},[147,91547,51625],{"class":504},[147,91549,51580],{"class":157},[147,91551,91552,91554,91556,91558,91560,91562,91564,91566,91568],{"class":149,"line":1489},[147,91553,52417],{"class":157},[147,91555,51617],{"class":153},[147,91557,15193],{"class":2237},[147,91559,445],{"class":157},[147,91561,51664],{"class":504},[147,91563,51644],{"class":2237},[147,91565,445],{"class":157},[147,91567,51671],{"class":504},[147,91569,51580],{"class":157},[147,91571,91572,91574,91576,91578,91580],{"class":149,"line":1495},[147,91573,52417],{"class":157},[147,91575,51680],{"class":153},[147,91577,51683],{"class":157},[147,91579,51680],{"class":153},[147,91581,51580],{"class":157},[147,91583,91584,91586,91588],{"class":149,"line":1586},[147,91585,52417],{"class":157},[147,91587,308],{"class":153},[147,91589,51580],{"class":157},[147,91591,91592,91594],{"class":149,"line":1592},[147,91593,55025],{"class":2237},[147,91595,15845],{"class":157},[147,91597,91598,91600,91602,91604],{"class":149,"line":1604},[147,91599,72869],{"class":448},[147,91601,51710],{"class":157},[147,91603,60778],{"class":448},[147,91605,1565],{"class":157},[147,91607,91608,91610,91612,91614,91616],{"class":149,"line":1886},[147,91609,55044],{"class":448},[147,91611,51710],{"class":157},[147,91613,1996],{"class":448},[147,91615,51765],{"class":397},[147,91617,1565],{"class":157},[147,91619,91620,91622,91624,91626,91628],{"class":149,"line":1891},[147,91621,55058],{"class":448},[147,91623,51710],{"class":157},[147,91625,1996],{"class":448},[147,91627,51765],{"class":397},[147,91629,1565],{"class":157},[147,91631,91632,91634,91636,91638],{"class":149,"line":1897},[147,91633,55157],{"class":448},[147,91635,51710],{"class":157},[147,91637,90278],{"class":448},[147,91639,1565],{"class":157},[147,91641,91642,91644,91646,91648,91650],{"class":149,"line":1902},[147,91643,55195],{"class":448},[147,91645,51710],{"class":157},[147,91647,1224],{"class":448},[147,91649,51765],{"class":397},[147,91651,1565],{"class":157},[147,91653,91654,91656,91658,91660],{"class":149,"line":1916},[147,91655,57689],{"class":448},[147,91657,51710],{"class":157},[147,91659,61115],{"class":448},[147,91661,1565],{"class":157},[147,91663,91664,91666,91668,91670],{"class":149,"line":1921},[147,91665,57559],{"class":448},[147,91667,51710],{"class":157},[147,91669,51865],{"class":448},[147,91671,1565],{"class":157},[147,91673,91674,91676,91678,91680,91682],{"class":149,"line":1927},[147,91675,90317],{"class":448},[147,91677,51710],{"class":157},[147,91679,718],{"class":448},[147,91681,51765],{"class":397},[147,91683,1565],{"class":157},[147,91685,91686],{"class":149,"line":1948},[147,91687,2461],{"class":157},[147,91689,91690,91692,91694],{"class":149,"line":1953},[147,91691,52690],{"class":157},[147,91693,308],{"class":153},[147,91695,51580],{"class":157},[147,91697,91698,91700,91702],{"class":149,"line":1967},[147,91699,52058],{"class":157},[147,91701,51607],{"class":153},[147,91703,51580],{"class":157},[147,91705,91706],{"class":149,"line":1972},[147,91707,2674],{"emptyLinePlaceholder":324},[147,91709,91710,91712,91714],{"class":149,"line":2001},[147,91711,1309],{"class":157},[147,91713,52073],{"class":153},[147,91715,51580],{"class":157},[147,91717,91718,91720,91722,91724,91726,91728,91730,91732],{"class":149,"line":2006},[147,91719,52417],{"class":157},[147,91721,51884],{"class":153},[147,91723,53759],{"class":2237},[147,91725,445],{"class":157},[147,91727,53764],{"class":504},[147,91729,55587],{"class":157},[147,91731,51884],{"class":153},[147,91733,51580],{"class":157},[147,91735,91736,91738,91740,91742,91744,91746,91748,91750],{"class":149,"line":2023},[147,91737,52417],{"class":157},[147,91739,52086],{"class":153},[147,91741,55512],{"class":2237},[147,91743,445],{"class":157},[147,91745,88546],{"class":504},[147,91747,55587],{"class":157},[147,91749,52086],{"class":153},[147,91751,51580],{"class":157},[147,91753,91754,91756,91758],{"class":149,"line":2028},[147,91755,52417],{"class":157},[147,91757,52086],{"class":153},[147,91759,51580],{"class":157},[147,91761,91762,91764,91766,91768,91770,91772,91774,91776],{"class":149,"line":2033},[147,91763,11495],{"class":397},[147,91765,87205],{"class":448},[147,91767,13838],{"class":397},[147,91769,54669],{"class":157},[147,91771,54672],{"class":2237},[147,91773,401],{"class":157},[147,91775,90418],{"class":504},[147,91777,407],{"class":157},[147,91779,91780,91782,91784,91786],{"class":149,"line":2038},[147,91781,52492],{"class":397},[147,91783,9712],{"class":157},[147,91785,445],{"class":397},[147,91787,47607],{"class":448},[147,91789,91790,91792,91794],{"class":149,"line":2052},[147,91791,70357],{"class":397},[147,91793,90437],{"class":2237},[147,91795,11127],{"class":157},[147,91797,91798,91800,91802,91804],{"class":149,"line":2057},[147,91799,90444],{"class":157},[147,91801,445],{"class":397},[147,91803,3306],{"class":157},[147,91805,2976],{"class":397},[147,91807,91808],{"class":149,"line":2851},[147,91809,90455],{"class":458},[147,91811,91812],{"class":149,"line":2865},[147,91813,2461],{"class":157},[147,91815,91816],{"class":149,"line":2873},[147,91817,90464],{"class":458},[147,91819,91820],{"class":149,"line":2878},[147,91821,91822],{"class":458},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[147,91824,91825],{"class":149,"line":2884},[147,91826,91827],{"class":458},"    \u002F\u002F 1.声明一个定时器变量\n",[147,91829,91830],{"class":149,"line":2890},[147,91831,91832],{"class":458},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[147,91834,91835],{"class":149,"line":2895},[147,91836,91837],{"class":458},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[147,91839,91840],{"class":149,"line":8222},[147,91841,91842],{"class":458},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[147,91844,91845],{"class":149,"line":8246},[147,91846,91847],{"class":458},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[147,91849,91850,91852,91855,91857,91859,91861,91863],{"class":149,"line":8251},[147,91851,70357],{"class":397},[147,91853,91854],{"class":2237}," throttle",[147,91856,401],{"class":157},[147,91858,90909],{"class":5490},[147,91860,12709],{"class":157},[147,91862,1119],{"class":5490},[147,91864,12716],{"class":157},[147,91866,91867,91869],{"class":149,"line":8257},[147,91868,80044],{"class":397},[147,91870,90922],{"class":157},[147,91872,91873,91875,91877],{"class":149,"line":8284},[147,91874,74255],{"class":397},[147,91876,59191],{"class":397},[147,91878,54725],{"class":157},[147,91880,91881,91883,91885,91887],{"class":149,"line":8289},[147,91882,2771],{"class":397},[147,91884,1932],{"class":157},[147,91886,625],{"class":397},[147,91888,91889],{"class":157},"timer) {\n",[147,91891,91892,91895,91897,91899,91901,91903],{"class":149,"line":8295},[147,91893,91894],{"class":157},"          timer ",[147,91896,445],{"class":397},[147,91898,90963],{"class":2237},[147,91900,401],{"class":157},[147,91902,54722],{"class":397},[147,91904,54725],{"class":157},[147,91906,91907,91910],{"class":149,"line":8307},[147,91908,91909],{"class":2237},"            fn",[147,91911,2250],{"class":157},[147,91913,91914],{"class":149,"line":8319},[147,91915,91916],{"class":458},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[147,91918,91919],{"class":149,"line":8331},[147,91920,91921],{"class":458},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[147,91923,91924,91927,91929],{"class":149,"line":9990},[147,91925,91926],{"class":157},"            timer ",[147,91928,445],{"class":397},[147,91930,91931],{"class":448}," null\n",[147,91933,91934],{"class":149,"line":10015},[147,91935,91936],{"class":458},"            \u002F\u002F 不能用clearTimeout(timer)\n",[147,91938,91939],{"class":149,"line":10038},[147,91940,91941],{"class":458},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[147,91943,91944],{"class":149,"line":10062},[147,91945,91946],{"class":157},"          }, t)\n",[147,91948,91949],{"class":149,"line":10067},[147,91950,2803],{"class":157},[147,91952,91953],{"class":149,"line":10072},[147,91954,52671],{"class":157},[147,91956,91957],{"class":149,"line":10077},[147,91958,2461],{"class":157},[147,91960,91961,91963,91965,91967,91969,91971,91973,91975,91977],{"class":149,"line":10086},[147,91962,90479],{"class":157},[147,91964,58086],{"class":2237},[147,91966,401],{"class":157},[147,91968,90486],{"class":504},[147,91970,12709],{"class":157},[147,91972,91445],{"class":2237},[147,91974,90495],{"class":157},[147,91976,65347],{"class":448},[147,91978,30771],{"class":157},[147,91980,91981,91983,91985],{"class":149,"line":10091},[147,91982,52690],{"class":157},[147,91984,52086],{"class":153},[147,91986,51580],{"class":157},[147,91988,91989,91991,91993],{"class":149,"line":10097},[147,91990,52058],{"class":157},[147,91992,52073],{"class":153},[147,91994,51580],{"class":157},[147,91996,91997],{"class":149,"line":10118},[147,91998,2674],{"emptyLinePlaceholder":324},[147,92000,92001,92003,92005],{"class":149,"line":10124},[147,92002,52058],{"class":157},[147,92004,50909],{"class":153},[147,92006,51580],{"class":157},[367,92008,92010],{"id":92009},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[138,92012,92014],{"className":53340,"code":92013,"language":53342,"meta":143,"style":143},"\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",[51,92015,92016,92024,92032,92037,92042,92047,92052,92056,92064],{"__ignoreMap":143},[147,92017,92018,92020,92022],{"class":149,"line":150},[147,92019,1309],{"class":157},[147,92021,52073],{"class":153},[147,92023,51580],{"class":157},[147,92025,92026,92028,92030],{"class":149,"line":312},[147,92027,52417],{"class":157},[147,92029,52086],{"class":153},[147,92031,51580],{"class":157},[147,92033,92034],{"class":149,"line":1454},[147,92035,92036],{"class":157},"    let timer = null\n",[147,92038,92039],{"class":149,"line":1469},[147,92040,92041],{"class":157},"    timer = setTimeout(() => {\n",[147,92043,92044],{"class":149,"line":1475},[147,92045,92046],{"class":157},"      clearTimeout(timer)\n",[147,92048,92049],{"class":149,"line":1489},[147,92050,92051],{"class":157},"      console.log(timer)\n",[147,92053,92054],{"class":149,"line":1495},[147,92055,60498],{"class":157},[147,92057,92058,92060,92062],{"class":149,"line":1586},[147,92059,52690],{"class":157},[147,92061,52086],{"class":153},[147,92063,51580],{"class":157},[147,92065,92066,92068,92070],{"class":149,"line":1592},[147,92067,52058],{"class":157},[147,92069,52073],{"class":153},[147,92071,51580],{"class":157},[19,92073,92074],{},"输出为1",[19,92076,92077],{},"在开启的定时器里边写清除定时器",[19,92079,92080],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[367,92082,92084],{"id":92083},"_4174-节流综合案例","4.17.4 节流综合案例",[19,92086,92087],{},"页面打开，可以记录上一次的视频播放位置",[19,92089,92090],{},[29,92091],{"alt":143,"src":92092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,92094,92095],{},[29,92096],{"alt":143,"src":92097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[138,92099,92101],{"className":50907,"code":92100,"language":50909,"meta":143,"style":143},"\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",[51,92102,92103,92113,92127,92131,92139,92153,92173,92193,92215,92228,92236,92242,92252,92262,92272,92276,92280,92287,92300,92312,92316,92320,92330,92342,92356,92360,92364,92371,92381,92394,92406,92416,92426,92442,92454,92458,92462,92470,92480,92492,92502,92512,92522,92526,92530,92540,92551,92555,92563,92571,92575,92583,92598,92613,92628,92649,92657,92665,92680,92702,92710,92725,92751,92777,92803,92811,92819,92838,92846,92851,92870,92875,92893,92898,92903,92911,92916,92930,92938,92943,92960,92964,92969,92991,92995,93003,93011,93015],{"__ignoreMap":143},[147,92104,92105,92107,92109,92111],{"class":149,"line":150},[147,92106,51571],{"class":157},[147,92108,51574],{"class":153},[147,92110,51577],{"class":2237},[147,92112,51580],{"class":157},[147,92114,92115,92117,92119,92121,92123,92125],{"class":149,"line":312},[147,92116,1309],{"class":157},[147,92118,50909],{"class":153},[147,92120,51589],{"class":2237},[147,92122,445],{"class":157},[147,92124,51594],{"class":504},[147,92126,51580],{"class":157},[147,92128,92129],{"class":149,"line":1454},[147,92130,2674],{"emptyLinePlaceholder":324},[147,92132,92133,92135,92137],{"class":149,"line":1469},[147,92134,1309],{"class":157},[147,92136,51607],{"class":153},[147,92138,51580],{"class":157},[147,92140,92141,92143,92145,92147,92149,92151],{"class":149,"line":1475},[147,92142,52417],{"class":157},[147,92144,51617],{"class":153},[147,92146,51620],{"class":2237},[147,92148,445],{"class":157},[147,92150,51625],{"class":504},[147,92152,59400],{"class":157},[147,92154,92155,92157,92159,92161,92163,92165,92167,92169,92171],{"class":149,"line":1489},[147,92156,52417],{"class":157},[147,92158,51617],{"class":153},[147,92160,51636],{"class":2237},[147,92162,445],{"class":157},[147,92164,51641],{"class":504},[147,92166,51644],{"class":2237},[147,92168,445],{"class":157},[147,92170,51649],{"class":504},[147,92172,59400],{"class":157},[147,92174,92175,92177,92179,92181,92183,92185,92187,92189,92191],{"class":149,"line":1495},[147,92176,52417],{"class":157},[147,92178,51617],{"class":153},[147,92180,15193],{"class":2237},[147,92182,445],{"class":157},[147,92184,51664],{"class":504},[147,92186,51644],{"class":2237},[147,92188,445],{"class":157},[147,92190,51671],{"class":504},[147,92192,59400],{"class":157},[147,92194,92195,92197,92199,92201,92203,92206,92208,92210,92213],{"class":149,"line":1586},[147,92196,52417],{"class":157},[147,92198,51617],{"class":153},[147,92200,15193],{"class":2237},[147,92202,445],{"class":157},[147,92204,92205],{"class":504},"\"referrer\"",[147,92207,51644],{"class":2237},[147,92209,445],{"class":157},[147,92211,92212],{"class":504},"\"never\"",[147,92214,59400],{"class":157},[147,92216,92217,92219,92221,92224,92226],{"class":149,"line":1592},[147,92218,52417],{"class":157},[147,92220,51680],{"class":153},[147,92222,92223],{"class":157},">综合案例\u003C\u002F",[147,92225,51680],{"class":153},[147,92227,51580],{"class":157},[147,92229,92230,92232,92234],{"class":149,"line":1604},[147,92231,52417],{"class":157},[147,92233,308],{"class":153},[147,92235,51580],{"class":157},[147,92237,92238,92240],{"class":149,"line":1886},[147,92239,6677],{"class":153},[147,92241,15845],{"class":157},[147,92243,92244,92246,92248,92250],{"class":149,"line":1891},[147,92245,54968],{"class":448},[147,92247,51710],{"class":157},[147,92249,590],{"class":448},[147,92251,1565],{"class":157},[147,92253,92254,92256,92258,92260],{"class":149,"line":1897},[147,92255,54979],{"class":448},[147,92257,51710],{"class":157},[147,92259,590],{"class":448},[147,92261,1565],{"class":157},[147,92263,92264,92266,92268,92270],{"class":149,"line":1902},[147,92265,72869],{"class":448},[147,92267,51710],{"class":157},[147,92269,60778],{"class":448},[147,92271,1565],{"class":157},[147,92273,92274],{"class":149,"line":1916},[147,92275,2461],{"class":157},[147,92277,92278],{"class":149,"line":1921},[147,92279,2674],{"emptyLinePlaceholder":324},[147,92281,92282,92285],{"class":149,"line":1927},[147,92283,92284],{"class":2237},"    .container",[147,92286,15845],{"class":157},[147,92288,92289,92291,92293,92296,92298],{"class":149,"line":1948},[147,92290,55044],{"class":448},[147,92292,51710],{"class":157},[147,92294,92295],{"class":448},"1200",[147,92297,51765],{"class":397},[147,92299,1565],{"class":157},[147,92301,92302,92304,92306,92308,92310],{"class":149,"line":1953},[147,92303,54979],{"class":448},[147,92305,51710],{"class":157},[147,92307,590],{"class":448},[147,92309,51829],{"class":448},[147,92311,1565],{"class":157},[147,92313,92314],{"class":149,"line":1967},[147,92315,2461],{"class":157},[147,92317,92318],{"class":149,"line":1972},[147,92319,2674],{"emptyLinePlaceholder":324},[147,92321,92322,92325,92328],{"class":149,"line":2001},[147,92323,92324],{"class":2237},"    .video",[147,92326,92327],{"class":153}," video",[147,92329,15845],{"class":157},[147,92331,92332,92334,92336,92338,92340],{"class":149,"line":2006},[147,92333,55044],{"class":448},[147,92335,51710],{"class":157},[147,92337,710],{"class":448},[147,92339,727],{"class":397},[147,92341,1565],{"class":157},[147,92343,92344,92346,92348,92350,92352,92354],{"class":149,"line":2023},[147,92345,54968],{"class":448},[147,92347,51710],{"class":157},[147,92349,1099],{"class":448},[147,92351,51765],{"class":397},[147,92353,4367],{"class":448},[147,92355,1565],{"class":157},[147,92357,92358],{"class":149,"line":2028},[147,92359,2461],{"class":157},[147,92361,92362],{"class":149,"line":2033},[147,92363,2674],{"emptyLinePlaceholder":324},[147,92365,92366,92369],{"class":149,"line":2038},[147,92367,92368],{"class":2237},"    .elevator",[147,92370,15845],{"class":157},[147,92372,92373,92375,92377,92379],{"class":149,"line":2052},[147,92374,55032],{"class":448},[147,92376,51710],{"class":157},[147,92378,86505],{"class":448},[147,92380,1565],{"class":157},[147,92382,92383,92385,92387,92390,92392],{"class":149,"line":2057},[147,92384,55220],{"class":448},[147,92386,51710],{"class":157},[147,92388,92389],{"class":448},"280",[147,92391,51765],{"class":397},[147,92393,1565],{"class":157},[147,92395,92396,92398,92400,92402,92404],{"class":149,"line":2851},[147,92397,86699],{"class":448},[147,92399,51710],{"class":157},[147,92401,1099],{"class":448},[147,92403,51765],{"class":397},[147,92405,1565],{"class":157},[147,92407,92408,92410,92412,92414],{"class":149,"line":2865},[147,92409,86512],{"class":448},[147,92411,51710],{"class":157},[147,92413,86517],{"class":448},[147,92415,1565],{"class":157},[147,92417,92418,92420,92422,92424],{"class":149,"line":2873},[147,92419,61994],{"class":448},[147,92421,51710],{"class":157},[147,92423,61115],{"class":448},[147,92425,1565],{"class":157},[147,92427,92428,92430,92432,92434,92436,92438,92440],{"class":149,"line":2878},[147,92429,62250],{"class":448},[147,92431,51710],{"class":157},[147,92433,616],{"class":448},[147,92435,51765],{"class":397},[147,92437,51794],{"class":448},[147,92439,62517],{"class":448},[147,92441,1565],{"class":157},[147,92443,92444,92446,92448,92450,92452],{"class":149,"line":2884},[147,92445,55044],{"class":448},[147,92447,51710],{"class":157},[147,92449,1306],{"class":448},[147,92451,51765],{"class":397},[147,92453,1565],{"class":157},[147,92455,92456],{"class":149,"line":2890},[147,92457,2461],{"class":157},[147,92459,92460],{"class":149,"line":2895},[147,92461,2674],{"emptyLinePlaceholder":324},[147,92463,92464,92466,92468],{"class":149,"line":8222},[147,92465,92368],{"class":2237},[147,92467,1673],{"class":153},[147,92469,15845],{"class":157},[147,92471,92472,92474,92476,92478],{"class":149,"line":8246},[147,92473,55282],{"class":448},[147,92475,51710],{"class":157},[147,92477,61142],{"class":448},[147,92479,1565],{"class":157},[147,92481,92482,92484,92486,92488,92490],{"class":149,"line":8251},[147,92483,54968],{"class":448},[147,92485,51710],{"class":157},[147,92487,845],{"class":448},[147,92489,51765],{"class":397},[147,92491,1565],{"class":157},[147,92493,92494,92496,92498,92500],{"class":149,"line":8257},[147,92495,64243],{"class":448},[147,92497,51710],{"class":157},[147,92499,55010],{"class":448},[147,92501,1565],{"class":157},[147,92503,92504,92506,92508,92510],{"class":149,"line":8284},[147,92505,57559],{"class":448},[147,92507,51710],{"class":157},[147,92509,51865],{"class":448},[147,92511,1565],{"class":157},[147,92513,92514,92516,92518,92520],{"class":149,"line":8289},[147,92515,57689],{"class":448},[147,92517,51710],{"class":157},[147,92519,62343],{"class":448},[147,92521,1565],{"class":157},[147,92523,92524],{"class":149,"line":8295},[147,92525,2461],{"class":157},[147,92527,92528],{"class":149,"line":8307},[147,92529,2674],{"emptyLinePlaceholder":324},[147,92531,92532,92534,92536,92538],{"class":149,"line":8319},[147,92533,92368],{"class":2237},[147,92535,1673],{"class":153},[147,92537,64297],{"class":2237},[147,92539,15845],{"class":157},[147,92541,92542,92544,92546,92549],{"class":149,"line":8331},[147,92543,57689],{"class":448},[147,92545,51710],{"class":157},[147,92547,92548],{"class":448},"#1286ff",[147,92550,1565],{"class":157},[147,92552,92553],{"class":149,"line":9990},[147,92554,2461],{"class":157},[147,92556,92557,92559,92561],{"class":149,"line":10015},[147,92558,52690],{"class":157},[147,92560,308],{"class":153},[147,92562,51580],{"class":157},[147,92564,92565,92567,92569],{"class":149,"line":10038},[147,92566,52058],{"class":157},[147,92568,51607],{"class":153},[147,92570,51580],{"class":157},[147,92572,92573],{"class":149,"line":10062},[147,92574,2674],{"emptyLinePlaceholder":324},[147,92576,92577,92579,92581],{"class":149,"line":10067},[147,92578,1309],{"class":157},[147,92580,52073],{"class":153},[147,92582,51580],{"class":157},[147,92584,92585,92587,92589,92591,92593,92596],{"class":149,"line":10072},[147,92586,52417],{"class":157},[147,92588,51884],{"class":153},[147,92590,53759],{"class":2237},[147,92592,445],{"class":157},[147,92594,92595],{"class":504},"\"container\"",[147,92597,51580],{"class":157},[147,92599,92600,92602,92604,92606,92608,92611],{"class":149,"line":10077},[147,92601,51614],{"class":157},[147,92603,51884],{"class":153},[147,92605,53759],{"class":2237},[147,92607,445],{"class":157},[147,92609,92610],{"class":504},"\"header\"",[147,92612,51580],{"class":157},[147,92614,92615,92617,92619,92621,92623,92626],{"class":149,"line":10086},[147,92616,55507],{"class":157},[147,92618,637],{"class":153},[147,92620,61330],{"class":2237},[147,92622,445],{"class":157},[147,92624,92625],{"class":504},"\"http:\u002F\u002Fpip.itcast.cn\"",[147,92627,51580],{"class":157},[147,92629,92630,92632,92634,92636,92638,92641,92643,92645,92647],{"class":149,"line":10091},[147,92631,55575],{"class":157},[147,92633,29],{"class":153},[147,92635,55512],{"class":2237},[147,92637,445],{"class":157},[147,92639,92640],{"class":504},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[147,92642,55520],{"class":2237},[147,92644,445],{"class":157},[147,92646,7926],{"class":504},[147,92648,59400],{"class":157},[147,92650,92651,92653,92655],{"class":149,"line":10097},[147,92652,55680],{"class":157},[147,92654,637],{"class":153},[147,92656,51580],{"class":157},[147,92658,92659,92661,92663],{"class":149,"line":10118},[147,92660,52049],{"class":157},[147,92662,51884],{"class":153},[147,92664,51580],{"class":157},[147,92666,92667,92669,92671,92673,92675,92678],{"class":149,"line":10124},[147,92668,51614],{"class":157},[147,92670,51884],{"class":153},[147,92672,53759],{"class":2237},[147,92674,445],{"class":157},[147,92676,92677],{"class":504},"\"video\"",[147,92679,51580],{"class":157},[147,92681,92682,92684,92686,92688,92690,92693,92696,92698,92700],{"class":149,"line":10138},[147,92683,55507],{"class":157},[147,92685,28457],{"class":153},[147,92687,55512],{"class":2237},[147,92689,445],{"class":157},[147,92691,92692],{"class":504},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[147,92694,92695],{"class":2237}," controls",[147,92697,55587],{"class":157},[147,92699,28457],{"class":153},[147,92701,51580],{"class":157},[147,92703,92704,92706,92708],{"class":149,"line":10144},[147,92705,52049],{"class":157},[147,92707,51884],{"class":153},[147,92709,51580],{"class":157},[147,92711,92712,92714,92716,92718,92720,92723],{"class":149,"line":10171},[147,92713,51614],{"class":157},[147,92715,51884],{"class":153},[147,92717,53759],{"class":2237},[147,92719,445],{"class":157},[147,92721,92722],{"class":504},"\"elevator\"",[147,92724,51580],{"class":157},[147,92726,92727,92729,92731,92733,92735,92737,92740,92742,92744,92747,92749],{"class":149,"line":10180},[147,92728,55507],{"class":157},[147,92730,637],{"class":153},[147,92732,61330],{"class":2237},[147,92734,445],{"class":157},[147,92736,64509],{"class":504},[147,92738,92739],{"class":2237}," data-ref",[147,92741,445],{"class":157},[147,92743,92677],{"class":504},[147,92745,92746],{"class":157},">视频介绍\u003C\u002F",[147,92748,637],{"class":153},[147,92750,51580],{"class":157},[147,92752,92753,92755,92757,92759,92761,92763,92765,92767,92770,92773,92775],{"class":149,"line":10186},[147,92754,55507],{"class":157},[147,92756,637],{"class":153},[147,92758,61330],{"class":2237},[147,92760,445],{"class":157},[147,92762,64509],{"class":504},[147,92764,92739],{"class":2237},[147,92766,445],{"class":157},[147,92768,92769],{"class":504},"\"intro\"",[147,92771,92772],{"class":157},">课程简介\u003C\u002F",[147,92774,637],{"class":153},[147,92776,51580],{"class":157},[147,92778,92779,92781,92783,92785,92787,92789,92791,92793,92796,92799,92801],{"class":149,"line":10194},[147,92780,55507],{"class":157},[147,92782,637],{"class":153},[147,92784,61330],{"class":2237},[147,92786,445],{"class":157},[147,92788,64509],{"class":504},[147,92790,92739],{"class":2237},[147,92792,445],{"class":157},[147,92794,92795],{"class":504},"\"outline\"",[147,92797,92798],{"class":157},">评论列表\u003C\u002F",[147,92800,637],{"class":153},[147,92802,51580],{"class":157},[147,92804,92805,92807,92809],{"class":149,"line":10199},[147,92806,52049],{"class":157},[147,92808,51884],{"class":153},[147,92810,51580],{"class":157},[147,92812,92813,92815,92817],{"class":149,"line":16877},[147,92814,52690],{"class":157},[147,92816,51884],{"class":153},[147,92818,51580],{"class":157},[147,92820,92821,92823,92825,92827,92829,92832,92834,92836],{"class":149,"line":16883},[147,92822,52417],{"class":157},[147,92824,52086],{"class":153},[147,92826,55512],{"class":2237},[147,92828,445],{"class":157},[147,92830,92831],{"class":504},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[147,92833,55587],{"class":157},[147,92835,52086],{"class":153},[147,92837,51580],{"class":157},[147,92839,92840,92842,92844],{"class":149,"line":16906},[147,92841,52417],{"class":157},[147,92843,52086],{"class":153},[147,92845,51580],{"class":157},[147,92847,92848],{"class":149,"line":16912},[147,92849,92850],{"class":458},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[147,92852,92853,92855,92857,92859,92861,92863,92865,92868],{"class":149,"line":16935},[147,92854,11495],{"class":397},[147,92856,92327],{"class":448},[147,92858,13838],{"class":397},[147,92860,54669],{"class":157},[147,92862,54672],{"class":2237},[147,92864,401],{"class":157},[147,92866,92867],{"class":504},"'video'",[147,92869,407],{"class":157},[147,92871,92872],{"class":149,"line":16949},[147,92873,92874],{"class":458},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[147,92876,92877,92880,92882,92884,92886,92889,92891],{"class":149,"line":16969},[147,92878,92879],{"class":157},"    video.ontimeupdate ",[147,92881,445],{"class":397},[147,92883,88627],{"class":157},[147,92885,91445],{"class":2237},[147,92887,92888],{"class":157},"(() ",[147,92890,84994],{"class":397},[147,92892,15845],{"class":157},[147,92894,92895],{"class":149,"line":16975},[147,92896,92897],{"class":458},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[147,92899,92900],{"class":149,"line":16986},[147,92901,92902],{"class":458},"      \u002F\u002F 控制台输出当前的时间\n",[147,92904,92905,92908],{"class":149,"line":17009},[147,92906,92907],{"class":458},"      \u002F\u002F console.log(video.currentTime)",[147,92909,92910],{"class":458},"  \u002F\u002F获得当前的视频时间\n",[147,92912,92913],{"class":149,"line":17031},[147,92914,92915],{"class":458},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[147,92917,92918,92920,92922,92924,92927],{"class":149,"line":17036},[147,92919,74956],{"class":157},[147,92921,71927],{"class":2237},[147,92923,401],{"class":157},[147,92925,92926],{"class":504},"'currentTime'",[147,92928,92929],{"class":157},", video.currentTime)\n",[147,92931,92932,92934,92936],{"class":149,"line":17042},[147,92933,54808],{"class":157},[147,92935,6684],{"class":448},[147,92937,407],{"class":157},[147,92939,92940],{"class":149,"line":17056},[147,92941,92942],{"class":458},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[147,92944,92945,92948,92951,92953,92956,92958],{"class":149,"line":17069},[147,92946,92947],{"class":157},"    video.",[147,92949,92950],{"class":2237},"onloadeddata",[147,92952,13838],{"class":397},[147,92954,92955],{"class":157}," () ",[147,92957,84994],{"class":397},[147,92959,15845],{"class":157},[147,92961,92962],{"class":149,"line":17074},[147,92963,60285],{"class":458},[147,92965,92966],{"class":149,"line":17088},[147,92967,92968],{"class":458},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[147,92970,92971,92974,92976,92979,92981,92983,92985,92987,92989],{"class":149,"line":17093},[147,92972,92973],{"class":157},"      video.currentTime ",[147,92975,445],{"class":397},[147,92977,92978],{"class":157}," localStorage.",[147,92980,71958],{"class":2237},[147,92982,401],{"class":157},[147,92984,92926],{"class":504},[147,92986,13988],{"class":157},[147,92988,71630],{"class":397},[147,92990,47607],{"class":448},[147,92992,92993],{"class":149,"line":17099},[147,92994,2461],{"class":157},[147,92996,92997,92999,93001],{"class":149,"line":17104},[147,92998,52690],{"class":157},[147,93000,52086],{"class":153},[147,93002,51580],{"class":157},[147,93004,93005,93007,93009],{"class":149,"line":17118},[147,93006,52058],{"class":157},[147,93008,52073],{"class":153},[147,93010,51580],{"class":157},[147,93012,93013],{"class":149,"line":17123},[147,93014,2674],{"emptyLinePlaceholder":324},[147,93016,93017,93019,93021],{"class":149,"line":17128},[147,93018,52058],{"class":157},[147,93020,50909],{"class":153},[147,93022,51580],{"class":157},[308,93024,93025],{},"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":143,"searchDepth":312,"depth":312,"links":93027},[93028,93033,93037,93038,93039,93044,93049,93050,93051,93052,93059,93064,93065,93075,93079,93080,93084],{"id":76964,"depth":312,"text":76965,"children":93029},[93030,93031,93032],{"id":76968,"depth":1454,"text":76969},{"id":76993,"depth":1454,"text":76994},{"id":77005,"depth":1454,"text":77006},{"id":77017,"depth":312,"text":77018,"children":93034},[93035,93036],{"id":77021,"depth":1454,"text":77022},{"id":77036,"depth":1454,"text":77037},{"id":77088,"depth":312,"text":77089},{"id":77132,"depth":312,"text":77133},{"id":77149,"depth":312,"text":77150,"children":93040},[93041,93042,93043],{"id":77153,"depth":1454,"text":77154},{"id":77166,"depth":1454,"text":77167},{"id":77271,"depth":1454,"text":77272},{"id":77559,"depth":312,"text":77560,"children":93045},[93046,93047,93048],{"id":77563,"depth":1454,"text":77564},{"id":78006,"depth":1454,"text":78007},{"id":78417,"depth":1454,"text":78418},{"id":78480,"depth":312,"text":78481},{"id":78559,"depth":312,"text":78560},{"id":78652,"depth":312,"text":78653},{"id":80497,"depth":312,"text":80498,"children":93053},[93054,93055,93056,93057,93058],{"id":80501,"depth":1454,"text":80502},{"id":80513,"depth":1454,"text":80514},{"id":80732,"depth":1454,"text":80733},{"id":80750,"depth":1454,"text":80751},{"id":80810,"depth":1454,"text":80811},{"id":85078,"depth":312,"text":85079,"children":93060},[93061,93062,93063],{"id":85082,"depth":1454,"text":85083},{"id":85100,"depth":1454,"text":85101},{"id":85126,"depth":1454,"text":85127},{"id":85135,"depth":312,"text":85136},{"id":85157,"depth":312,"text":85158,"children":93066},[93067,93068,93069,93070,93071,93072,93073,93074],{"id":85161,"depth":1454,"text":85162},{"id":85422,"depth":1454,"text":85423},{"id":85608,"depth":1454,"text":85609},{"id":85975,"depth":1454,"text":85976},{"id":86091,"depth":1454,"text":86092},{"id":86127,"depth":1454,"text":86128},{"id":86174,"depth":1454,"text":86175},{"id":86208,"depth":1454,"text":86209},{"id":87571,"depth":312,"text":87572,"children":93076},[93077,93078],{"id":87575,"depth":1454,"text":87576},{"id":87612,"depth":1454,"text":87613},{"id":88967,"depth":312,"text":88968},{"id":89338,"depth":312,"text":89339,"children":93081},[93082,93083],{"id":89342,"depth":1454,"text":89343},{"id":89376,"depth":1454,"text":89377},{"id":90105,"depth":312,"text":90106,"children":93085},[93086,93087,93088,93089],{"id":90109,"depth":1454,"text":90110},{"id":91067,"depth":1454,"text":91068},{"id":92009,"depth":1454,"text":92010},{"id":92083,"depth":1454,"text":92084},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76953,"description":321},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":93096,"title":93097,"body":93098,"description":93109,"extension":322,"meta":93110,"navigation":324,"path":93112,"seo":93113,"stem":93114,"__hash__":93115},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":93099,"toc":93107},[93100],[19,93101,93102,93103],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[637,93104,93105],{"href":93105,"rel":93106},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[24138],{"title":143,"searchDepth":312,"depth":312,"links":93108},[],"三件套第三套学习",{"category":93111},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":93097,"description":93109},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":93117,"title":93118,"body":93119,"description":321,"extension":322,"meta":93224,"navigation":324,"path":93225,"seo":93226,"stem":93227,"__hash__":93228},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":93120,"toc":93219},[93121,93128,93131,93134,93137,93141,93150,93153,93156,93160,93169,93172,93176,93179,93199,93202,93216],[19,93122,93123],{},[637,93124,93127],{"href":93125,"rel":93126},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[24138],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,93129,93118],{"id":93130},"_1安装",[19,93132,93133],{},"numpy是科学计算基础库,底层是C语言",[19,93135,93136],{},"三种方式：",[14,93138,93140],{"id":93139},"_11-通过pip安装","1.1 通过pip安装",[138,93142,93144],{"className":30652,"code":93143,"language":30654,"meta":143,"style":143},"pip install numpy\n",[51,93145,93146],{"__ignoreMap":143},[147,93147,93148],{"class":149,"line":150},[147,93149,93143],{"class":157},[19,93151,93152],{},"首选方式，自动处理依赖项",[19,93154,93155],{},"在提示系统命令符中使用cmd",[14,93157,93159],{"id":93158},"_12-通过anaconda安装","1.2 通过Anaconda安装",[138,93161,93163],{"className":30652,"code":93162,"language":30654,"meta":143,"style":143},"conda install numpy\n",[51,93164,93165],{"__ignoreMap":143},[147,93166,93167],{"class":149,"line":150},[147,93168,93162],{"class":157},[19,93170,93171],{},"自动解决环境依赖",[14,93173,93175],{"id":93174},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,93177,93178],{},"对于Debian\u002FUbuntu",[138,93180,93182],{"className":30652,"code":93181,"language":30654,"meta":143,"style":143},"sudo apt-get install python3-numpy\n",[51,93183,93184],{"__ignoreMap":143},[147,93185,93186,93189,93191,93194,93196],{"class":149,"line":150},[147,93187,93188],{"class":157},"sudo apt",[147,93190,931],{"class":397},[147,93192,93193],{"class":157},"get install python3",[147,93195,931],{"class":397},[147,93197,93198],{"class":157},"numpy\n",[19,93200,93201],{},"对于Fedora:",[138,93203,93205],{"className":30652,"code":93204,"language":30654,"meta":143,"style":143},"sudo dnf install python3-numpy\n",[51,93206,93207],{"__ignoreMap":143},[147,93208,93209,93212,93214],{"class":149,"line":150},[147,93210,93211],{"class":157},"sudo dnf install python3",[147,93213,931],{"class":397},[147,93215,93198],{"class":157},[308,93217,93218],{},"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":143,"searchDepth":312,"depth":312,"links":93220},[93221,93222,93223],{"id":93139,"depth":312,"text":93140},{"id":93158,"depth":312,"text":93159},{"id":93174,"depth":312,"text":93175},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":93118,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":93230,"title":93231,"body":93232,"description":321,"extension":322,"meta":93345,"navigation":324,"path":93346,"seo":93347,"stem":93348,"__hash__":93349},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":93233,"toc":93343},[93234,93237,93240,93243,93246,93249,93252,93255,93258,93261,93337,93340],[10,93235,93231],{"id":93236},"_10算数函数",[19,93238,93239],{},"加减乘除运算跟python基础语法没区别",[19,93241,93242],{},"除了python那种方法外还可以使用函数",[19,93244,93245],{},"加：np.add(a,b)",[19,93247,93248],{},"减：np.subtract(a,b)",[19,93250,93251],{},"乘：np.multiply(a,b)",[19,93253,93254],{},"除：np.divide(a,b) == a\u002Fb",[19,93256,93257],{},"取余：np.mod(a,b) == a%b",[19,93259,93260],{},"必须会的用法：",[138,93262,93264],{"className":30652,"code":93263,"language":30654,"meta":143,"style":143},"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",[51,93265,93266,93288,93309,93319,93332],{"__ignoreMap":143},[147,93267,93268,93270,93272,93275,93277,93280,93282,93284,93286],{"class":149,"line":150},[147,93269,637],{"class":157},[147,93271,445],{"class":397},[147,93273,93274],{"class":157},"np.arange(",[147,93276,819],{"class":448},[147,93278,93279],{"class":157},").reshape(",[147,93281,471],{"class":448},[147,93283,777],{"class":157},[147,93285,471],{"class":448},[147,93287,407],{"class":157},[147,93289,93290,93292,93294,93297,93299,93301,93303,93305,93307],{"class":149,"line":312},[147,93291,662],{"class":157},[147,93293,445],{"class":397},[147,93295,93296],{"class":157},"np.array([",[147,93298,845],{"class":448},[147,93300,777],{"class":157},[147,93302,845],{"class":448},[147,93304,777],{"class":157},[147,93306,845],{"class":448},[147,93308,4931],{"class":157},[147,93310,93311,93314,93316],{"class":149,"line":1454},[147,93312,93313],{"class":157},"result",[147,93315,445],{"class":397},[147,93317,93318],{"class":157},"np.empty_like(a)\n",[147,93320,93321,93324,93327,93329],{"class":149,"line":1469},[147,93322,93323],{"class":157},"np.add(a,b,",[147,93325,93326],{"class":5490},"out",[147,93328,445],{"class":397},[147,93330,93331],{"class":157},"result)\n",[147,93333,93334],{"class":149,"line":1475},[147,93335,93336],{"class":157},"result\n",[19,93338,93339],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[308,93341,93342],{},"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":143,"searchDepth":312,"depth":312,"links":93344},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":93231,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93351,"title":93352,"body":93353,"description":321,"extension":322,"meta":94115,"navigation":324,"path":94116,"seo":94117,"stem":94118,"__hash__":94119},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93354,"toc":94102},[93355,93358,93361,93364,93368,93407,93411,93455,93515,93519,93522,93561,93564,93609,93613,93649,93653,93722,93726,93790,93794,93797,93800,93803,93806,93842,93846,93886,93890,93962,93965,93969,94032,94036,94099],[10,93356,93352],{"id":93357},"_11统计函数",[19,93359,93360],{},"sum max min mean",[19,93362,93363],{},"这些有axis参数，可以指定方向",[14,93365,93367],{"id":93366},"_111-sum求和函数","11.1 sum()求和函数",[138,93369,93371],{"className":30652,"code":93370,"language":30654,"meta":143,"style":143},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[51,93372,93373,93378,93399],{"__ignoreMap":143},[147,93374,93375],{"class":149,"line":150},[147,93376,93377],{"class":458},"#创建一维数组\n",[147,93379,93380,93382,93384,93387,93389,93391,93393,93395,93397],{"class":149,"line":312},[147,93381,637],{"class":157},[147,93383,445],{"class":397},[147,93385,93386],{"class":157},"np.random.randint(",[147,93388,616],{"class":448},[147,93390,777],{"class":157},[147,93392,710],{"class":448},[147,93394,777],{"class":157},[147,93396,1099],{"class":448},[147,93398,407],{"class":157},[147,93400,93401,93404],{"class":149,"line":1454},[147,93402,93403],{"class":157},"np.sum(a)",[147,93405,93406],{"class":458},"#求和\n",[14,93408,93410],{"id":93409},"_112-max求最大值函数","11.2 max()求最大值函数",[138,93412,93414],{"className":30652,"code":93413,"language":30654,"meta":143,"style":143},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[51,93415,93416,93420,93440,93445,93450],{"__ignoreMap":143},[147,93417,93418],{"class":149,"line":150},[147,93419,93377],{"class":458},[147,93421,93422,93424,93426,93428,93430,93432,93434,93436,93438],{"class":149,"line":312},[147,93423,637],{"class":157},[147,93425,445],{"class":397},[147,93427,93386],{"class":157},[147,93429,616],{"class":448},[147,93431,777],{"class":157},[147,93433,710],{"class":448},[147,93435,777],{"class":157},[147,93437,1099],{"class":448},[147,93439,407],{"class":157},[147,93441,93442],{"class":149,"line":1454},[147,93443,93444],{"class":157},"np.max(a)\n",[147,93446,93447],{"class":149,"line":1469},[147,93448,93449],{"class":458},"#最大索引(求最大元素的索引)arg\n",[147,93451,93452],{"class":149,"line":1475},[147,93453,93454],{"class":157},"np.argmax(a)\n",[138,93456,93458],{"className":30652,"code":93457,"language":30654,"meta":143,"style":143},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[51,93459,93460,93481,93501,93505],{"__ignoreMap":143},[147,93461,93462,93464,93466,93469,93471,93473,93475,93477,93479],{"class":149,"line":150},[147,93463,11193],{"class":157},[147,93465,445],{"class":397},[147,93467,93468],{"class":157}," np.array([",[147,93470,616],{"class":448},[147,93472,12709],{"class":157},[147,93474,718],{"class":448},[147,93476,12709],{"class":157},[147,93478,471],{"class":448},[147,93480,4931],{"class":157},[147,93482,93483,93485,93487,93489,93491,93493,93495,93497,93499],{"class":149,"line":312},[147,93484,11219],{"class":157},[147,93486,445],{"class":397},[147,93488,93468],{"class":157},[147,93490,471],{"class":448},[147,93492,12709],{"class":157},[147,93494,477],{"class":448},[147,93496,12709],{"class":157},[147,93498,692],{"class":448},[147,93500,4931],{"class":157},[147,93502,93503],{"class":149,"line":1454},[147,93504,2674],{"emptyLinePlaceholder":324},[147,93506,93507,93509,93512],{"class":149,"line":1469},[147,93508,30689],{"class":448},[147,93510,93511],{"class":157},"(np.maximum(a, b))   ",[147,93513,93514],{"class":458},"# [3 5 4]，每个位置上取较大值\n",[14,93516,93518],{"id":93517},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,93520,93521],{},"①一维数组：",[138,93523,93525],{"className":30652,"code":93524,"language":30654,"meta":143,"style":143},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[51,93526,93527,93531,93551,93556],{"__ignoreMap":143},[147,93528,93529],{"class":149,"line":150},[147,93530,93377],{"class":458},[147,93532,93533,93535,93537,93539,93541,93543,93545,93547,93549],{"class":149,"line":312},[147,93534,637],{"class":157},[147,93536,445],{"class":397},[147,93538,93386],{"class":157},[147,93540,616],{"class":448},[147,93542,777],{"class":157},[147,93544,710],{"class":448},[147,93546,777],{"class":157},[147,93548,1099],{"class":448},[147,93550,407],{"class":157},[147,93552,93553],{"class":149,"line":1454},[147,93554,93555],{"class":458},"#求平均值\n",[147,93557,93558],{"class":149,"line":1469},[147,93559,93560],{"class":157},"np.mean(a)\n",[19,93562,93563],{},"②二维数组",[138,93565,93567],{"className":30652,"code":93566,"language":30654,"meta":143,"style":143},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[51,93568,93569,93574,93599,93604],{"__ignoreMap":143},[147,93570,93571],{"class":149,"line":150},[147,93572,93573],{"class":458},"#二维数组\n",[147,93575,93576,93579,93581,93583,93585,93587,93589,93591,93593,93595,93597],{"class":149,"line":312},[147,93577,93578],{"class":157},"aa",[147,93580,445],{"class":397},[147,93582,93274],{"class":157},[147,93584,616],{"class":448},[147,93586,777],{"class":157},[147,93588,922],{"class":448},[147,93590,93279],{"class":157},[147,93592,471],{"class":448},[147,93594,777],{"class":157},[147,93596,692],{"class":448},[147,93598,407],{"class":157},[147,93600,93601],{"class":149,"line":1454},[147,93602,93603],{"class":458},"#对数组中的所有数求平均\n",[147,93605,93606],{"class":149,"line":1469},[147,93607,93608],{"class":157},"np.mean(aa)\n",[14,93610,93612],{"id":93611},"_114-median求中位数函数","11.4 median()求中位数函数",[138,93614,93616],{"className":30652,"code":93615,"language":30654,"meta":143,"style":143},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[51,93617,93618,93623,93639,93644],{"__ignoreMap":143},[147,93619,93620],{"class":149,"line":150},[147,93621,93622],{"class":458},"#求中位数\n",[147,93624,93625,93627,93629,93631,93633,93635,93637],{"class":149,"line":312},[147,93626,662],{"class":157},[147,93628,445],{"class":397},[147,93630,93274],{"class":157},[147,93632,616],{"class":448},[147,93634,777],{"class":157},[147,93636,845],{"class":448},[147,93638,407],{"class":157},[147,93640,93641],{"class":149,"line":1454},[147,93642,93643],{"class":157},"np.median(b)\n",[147,93645,93646],{"class":149,"line":1469},[147,93647,93648],{"class":458},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,93650,93652],{"id":93651},"_115-power求幂运算函数","11.5 power()求幂运算函数",[138,93654,93656],{"className":30652,"code":93655,"language":30654,"meta":143,"style":143},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[51,93657,93658,93674,93679,93684,93693,93698,93707],{"__ignoreMap":143},[147,93659,93660,93662,93664,93666,93668,93670,93672],{"class":149,"line":150},[147,93661,662],{"class":157},[147,93663,445],{"class":397},[147,93665,93274],{"class":157},[147,93667,616],{"class":448},[147,93669,777],{"class":157},[147,93671,845],{"class":448},[147,93673,407],{"class":157},[147,93675,93676],{"class":149,"line":312},[147,93677,93678],{"class":458},"#幂运算\n",[147,93680,93681],{"class":149,"line":1454},[147,93682,93683],{"class":458},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[147,93685,93686,93689,93691],{"class":149,"line":1469},[147,93687,93688],{"class":157},"np.power(b,",[147,93690,477],{"class":448},[147,93692,407],{"class":157},[147,93694,93695],{"class":149,"line":1475},[147,93696,93697],{"class":458},"#或者以下代码，将数据存储起来\n",[147,93699,93700,93702,93704],{"class":149,"line":1489},[147,93701,1244],{"class":157},[147,93703,445],{"class":397},[147,93705,93706],{"class":157},"np.empty_like(b)\n",[147,93708,93709,93711,93713,93715,93717,93719],{"class":149,"line":1495},[147,93710,93688],{"class":157},[147,93712,477],{"class":448},[147,93714,777],{"class":157},[147,93716,93326],{"class":5490},[147,93718,445],{"class":397},[147,93720,93721],{"class":157},"y)\n",[14,93723,93725],{"id":93724},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[138,93727,93729],{"className":30652,"code":93728,"language":30654,"meta":143,"style":143},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[51,93730,93731,93747,93752,93757,93761,93779],{"__ignoreMap":143},[147,93732,93733,93735,93737,93739,93741,93743,93745],{"class":149,"line":150},[147,93734,662],{"class":157},[147,93736,445],{"class":397},[147,93738,93274],{"class":157},[147,93740,616],{"class":448},[147,93742,777],{"class":157},[147,93744,845],{"class":448},[147,93746,407],{"class":157},[147,93748,93749],{"class":149,"line":312},[147,93750,93751],{"class":458},"#开方\n",[147,93753,93754],{"class":149,"line":1454},[147,93755,93756],{"class":157},"np.sqrt(b)\n",[147,93758,93759],{"class":149,"line":1469},[147,93760,93697],{"class":458},[147,93762,93763,93765,93767,93770,93773,93775,93777],{"class":149,"line":1475},[147,93764,1244],{"class":157},[147,93766,445],{"class":397},[147,93768,93769],{"class":157},"np.empty_like(b,",[147,93771,93772],{"class":5490},"dtype",[147,93774,445],{"class":397},[147,93776,439],{"class":448},[147,93778,407],{"class":157},[147,93780,93781,93784,93786,93788],{"class":149,"line":1489},[147,93782,93783],{"class":157},"np.sqrt(b,",[147,93785,93326],{"class":5490},[147,93787,445],{"class":397},[147,93789,93721],{"class":157},[14,93791,93793],{"id":93792},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,93795,93796],{},"对数组中的元素累计求和，可指定轴",[19,93798,93799],{},"#累计求和的意思是：",[19,93801,93802],{},"a = np.array([1, 2, 3, 4])",[19,93804,93805],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[138,93807,93809],{"className":30652,"code":93808,"language":30654,"meta":143,"style":143},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[51,93810,93811,93827,93832,93837],{"__ignoreMap":143},[147,93812,93813,93815,93817,93819,93821,93823,93825],{"class":149,"line":150},[147,93814,662],{"class":157},[147,93816,445],{"class":397},[147,93818,93274],{"class":157},[147,93820,616],{"class":448},[147,93822,777],{"class":157},[147,93824,845],{"class":448},[147,93826,407],{"class":157},[147,93828,93829],{"class":149,"line":312},[147,93830,93831],{"class":157},"np.cumsum(b)\n",[147,93833,93834],{"class":149,"line":1454},[147,93835,93836],{"class":458},"#结果：\n",[147,93838,93839],{"class":149,"line":1469},[147,93840,93841],{"class":458},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,93843,93845],{"id":93844},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[138,93847,93849],{"className":30652,"code":93848,"language":30654,"meta":143,"style":143},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[51,93850,93851,93867,93872,93877,93881],{"__ignoreMap":143},[147,93852,93853,93855,93857,93859,93861,93863,93865],{"class":149,"line":150},[147,93854,662],{"class":157},[147,93856,445],{"class":397},[147,93858,93274],{"class":157},[147,93860,616],{"class":448},[147,93862,777],{"class":157},[147,93864,845],{"class":448},[147,93866,407],{"class":157},[147,93868,93869],{"class":149,"line":312},[147,93870,93871],{"class":458},"#对数组中的元素累计求积，可指定轴\n",[147,93873,93874],{"class":149,"line":1454},[147,93875,93876],{"class":157},"np.cumprod(b)\n",[147,93878,93879],{"class":149,"line":1469},[147,93880,93836],{"class":458},[147,93882,93883],{"class":149,"line":1475},[147,93884,93885],{"class":458},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,93887,93889],{"id":93888},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[138,93891,93893],{"className":30652,"code":93892,"language":30654,"meta":143,"style":143},"#删除数组中的重复数据，并对数据进行排序\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",[51,93894,93895,93900,93948,93953,93957],{"__ignoreMap":143},[147,93896,93897],{"class":149,"line":150},[147,93898,93899],{"class":458},"#删除数组中的重复数据，并对数据进行排序\n",[147,93901,93902,93904,93906,93908,93910,93912,93914,93916,93918,93920,93922,93924,93926,93928,93930,93932,93934,93936,93938,93940,93942,93944,93946],{"class":149,"line":312},[147,93903,637],{"class":157},[147,93905,445],{"class":397},[147,93907,93296],{"class":157},[147,93909,616],{"class":448},[147,93911,777],{"class":157},[147,93913,477],{"class":448},[147,93915,777],{"class":157},[147,93917,471],{"class":448},[147,93919,777],{"class":157},[147,93921,897],{"class":448},[147,93923,777],{"class":157},[147,93925,471],{"class":448},[147,93927,777],{"class":157},[147,93929,845],{"class":448},[147,93931,777],{"class":157},[147,93933,596],{"class":448},[147,93935,777],{"class":157},[147,93937,590],{"class":448},[147,93939,777],{"class":157},[147,93941,1174],{"class":448},[147,93943,777],{"class":157},[147,93945,692],{"class":448},[147,93947,4931],{"class":157},[147,93949,93950],{"class":149,"line":1454},[147,93951,93952],{"class":157},"np.unique(a)\n",[147,93954,93955],{"class":149,"line":1469},[147,93956,93836],{"class":458},[147,93958,93959],{"class":149,"line":1475},[147,93960,93961],{"class":458},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,93963,93964],{},"升序形式排序",[14,93966,93968],{"id":93967},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[138,93970,93972],{"className":30652,"code":93971,"language":30654,"meta":143,"style":143},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[51,93973,93974,94022,94027],{"__ignoreMap":143},[147,93975,93976,93978,93980,93982,93984,93986,93988,93990,93992,93994,93996,93998,94000,94002,94004,94006,94008,94010,94012,94014,94016,94018,94020],{"class":149,"line":150},[147,93977,637],{"class":157},[147,93979,445],{"class":397},[147,93981,93296],{"class":157},[147,93983,616],{"class":448},[147,93985,777],{"class":157},[147,93987,477],{"class":448},[147,93989,777],{"class":157},[147,93991,471],{"class":448},[147,93993,777],{"class":157},[147,93995,897],{"class":448},[147,93997,777],{"class":157},[147,93999,471],{"class":448},[147,94001,777],{"class":157},[147,94003,845],{"class":448},[147,94005,777],{"class":157},[147,94007,596],{"class":448},[147,94009,777],{"class":157},[147,94011,590],{"class":448},[147,94013,777],{"class":157},[147,94015,1174],{"class":448},[147,94017,777],{"class":157},[147,94019,692],{"class":448},[147,94021,4931],{"class":157},[147,94023,94024],{"class":149,"line":312},[147,94025,94026],{"class":458},"#返回数组中非零元素的索引\n",[147,94028,94029],{"class":149,"line":1454},[147,94030,94031],{"class":157},"np.nonzero(a)\n",[14,94033,94035],{"id":94034},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[138,94037,94039],{"className":30652,"code":94038,"language":30654,"meta":143,"style":143},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[51,94040,94041,94089,94094],{"__ignoreMap":143},[147,94042,94043,94045,94047,94049,94051,94053,94055,94057,94059,94061,94063,94065,94067,94069,94071,94073,94075,94077,94079,94081,94083,94085,94087],{"class":149,"line":150},[147,94044,637],{"class":157},[147,94046,445],{"class":397},[147,94048,93296],{"class":157},[147,94050,616],{"class":448},[147,94052,777],{"class":157},[147,94054,477],{"class":448},[147,94056,777],{"class":157},[147,94058,471],{"class":448},[147,94060,777],{"class":157},[147,94062,897],{"class":448},[147,94064,777],{"class":157},[147,94066,471],{"class":448},[147,94068,777],{"class":157},[147,94070,845],{"class":448},[147,94072,777],{"class":157},[147,94074,596],{"class":448},[147,94076,777],{"class":157},[147,94078,590],{"class":448},[147,94080,777],{"class":157},[147,94082,1174],{"class":448},[147,94084,777],{"class":157},[147,94086,692],{"class":448},[147,94088,4931],{"class":157},[147,94090,94091],{"class":149,"line":312},[147,94092,94093],{"class":458},"#计算一组数中最大值与最小值的差，可指定轴\n",[147,94095,94096],{"class":149,"line":1454},[147,94097,94098],{"class":157},"np.ptp(a)\n",[308,94100,94101],{},"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":143,"searchDepth":312,"depth":312,"links":94103},[94104,94105,94106,94107,94108,94109,94110,94111,94112,94113,94114],{"id":93366,"depth":312,"text":93367},{"id":93409,"depth":312,"text":93410},{"id":93517,"depth":312,"text":93518},{"id":93611,"depth":312,"text":93612},{"id":93651,"depth":312,"text":93652},{"id":93724,"depth":312,"text":93725},{"id":93792,"depth":312,"text":93793},{"id":93844,"depth":312,"text":93845},{"id":93888,"depth":312,"text":93889},{"id":93967,"depth":312,"text":93968},{"id":94034,"depth":312,"text":94035},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93352,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":94121,"title":94122,"body":94123,"description":321,"extension":322,"meta":94778,"navigation":324,"path":94779,"seo":94780,"stem":94781,"__hash__":94782},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":94124,"toc":94766},[94125,94128,94132,94135,94351,94355,94358,94567,94571,94637,94642,94646,94649,94652,94690,94694,94697,94702,94706,94709,94712,94717,94721,94724,94728,94731,94734,94739,94743,94746,94749,94754,94758,94763],[10,94126,94122],{"id":94127},"_12其他常用函数",[14,94129,94131],{"id":94130},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,94133,94134],{},"将数组的数据按照行列复制扩展",[138,94136,94138],{"className":30652,"code":94137,"language":30654,"meta":143,"style":143},"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",[51,94139,94140,94156,94165,94169,94174,94179,94192,94196,94201,94206,94211,94215,94220,94244,94256,94260,94264,94269,94274,94279,94284,94288,94301,94305,94309,94314,94319,94324,94329,94334,94338,94342,94347],{"__ignoreMap":143},[147,94141,94142,94144,94146,94148,94150,94152,94154],{"class":149,"line":150},[147,94143,637],{"class":157},[147,94145,445],{"class":397},[147,94147,93274],{"class":157},[147,94149,616],{"class":448},[147,94151,777],{"class":157},[147,94153,718],{"class":448},[147,94155,407],{"class":157},[147,94157,94158,94161,94163],{"class":149,"line":312},[147,94159,94160],{"class":157},"np.tile(a,",[147,94162,477],{"class":448},[147,94164,407],{"class":157},[147,94166,94167],{"class":149,"line":1454},[147,94168,93836],{"class":458},[147,94170,94171],{"class":149,"line":1469},[147,94172,94173],{"class":458},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[147,94175,94176],{"class":149,"line":1475},[147,94177,94178],{"class":458},"#行复制两次，列复制三次\n",[147,94180,94181,94184,94186,94188,94190],{"class":149,"line":1489},[147,94182,94183],{"class":157},"np.tile(a,(",[147,94185,477],{"class":448},[147,94187,777],{"class":157},[147,94189,471],{"class":448},[147,94191,30771],{"class":157},[147,94193,94194],{"class":149,"line":1495},[147,94195,93836],{"class":458},[147,94197,94198],{"class":149,"line":1586},[147,94199,94200],{"class":504},"'''\n",[147,94202,94203],{"class":149,"line":1592},[147,94204,94205],{"class":504},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[147,94207,94208],{"class":149,"line":1604},[147,94209,94210],{"class":504},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[147,94212,94213],{"class":149,"line":1886},[147,94214,94200],{"class":504},[147,94216,94217],{"class":149,"line":1891},[147,94218,94219],{"class":458},"#创建二维数组\n",[147,94221,94222,94224,94226,94228,94230,94232,94234,94236,94238,94240,94242],{"class":149,"line":1897},[147,94223,93578],{"class":157},[147,94225,445],{"class":397},[147,94227,93274],{"class":157},[147,94229,616],{"class":448},[147,94231,777],{"class":157},[147,94233,922],{"class":448},[147,94235,93279],{"class":157},[147,94237,692],{"class":448},[147,94239,777],{"class":157},[147,94241,471],{"class":448},[147,94243,407],{"class":157},[147,94245,94246,94249,94251,94253],{"class":149,"line":1902},[147,94247,94248],{"class":157},"np.tile(aa,",[147,94250,477],{"class":448},[147,94252,828],{"class":157},[147,94254,94255],{"class":458},"#一个数的时候就是行\n",[147,94257,94258],{"class":149,"line":1916},[147,94259,93836],{"class":458},[147,94261,94262],{"class":149,"line":1921},[147,94263,94200],{"class":504},[147,94265,94266],{"class":149,"line":1927},[147,94267,94268],{"class":504},"array([[ 1,  2,  3,  1,  2,  3],\n",[147,94270,94271],{"class":149,"line":1948},[147,94272,94273],{"class":504},"       [ 4,  5,  6,  4,  5,  6],\n",[147,94275,94276],{"class":149,"line":1953},[147,94277,94278],{"class":504},"       [ 7,  8,  9,  7,  8,  9],\n",[147,94280,94281],{"class":149,"line":1967},[147,94282,94283],{"class":504},"       [10, 11, 12, 10, 11, 12]])\n",[147,94285,94286],{"class":149,"line":1972},[147,94287,94200],{"class":504},[147,94289,94290,94293,94295,94297,94299],{"class":149,"line":2001},[147,94291,94292],{"class":157},"np.tile(aa,(",[147,94294,477],{"class":448},[147,94296,777],{"class":157},[147,94298,471],{"class":448},[147,94300,30771],{"class":157},[147,94302,94303],{"class":149,"line":2006},[147,94304,93836],{"class":458},[147,94306,94307],{"class":149,"line":2023},[147,94308,94200],{"class":504},[147,94310,94311],{"class":149,"line":2028},[147,94312,94313],{"class":504},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[147,94315,94316],{"class":149,"line":2033},[147,94317,94318],{"class":504},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[147,94320,94321],{"class":149,"line":2038},[147,94322,94323],{"class":504},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[147,94325,94326],{"class":149,"line":2052},[147,94327,94328],{"class":504},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[147,94330,94331],{"class":149,"line":2057},[147,94332,94333],{"class":504},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[147,94335,94336],{"class":149,"line":2851},[147,94337,94318],{"class":504},[147,94339,94340],{"class":149,"line":2865},[147,94341,94323],{"class":504},[147,94343,94344],{"class":149,"line":2873},[147,94345,94346],{"class":504},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[147,94348,94349],{"class":149,"line":2878},[147,94350,94200],{"class":504},[14,94352,94354],{"id":94353},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,94356,94357],{},"repeat()将数组中的每个元素重复若干次",[138,94359,94361],{"className":30652,"code":94360,"language":30654,"meta":143,"style":143},"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",[51,94362,94363,94379,94388,94392,94397,94421,94426,94435,94439,94444,94448,94453,94469,94473,94477,94482,94487,94492,94496,94501,94505,94510,94515,94519,94535,94539,94543,94548,94553,94558,94563],{"__ignoreMap":143},[147,94364,94365,94367,94369,94371,94373,94375,94377],{"class":149,"line":150},[147,94366,637],{"class":157},[147,94368,445],{"class":397},[147,94370,93274],{"class":157},[147,94372,616],{"class":448},[147,94374,777],{"class":157},[147,94376,718],{"class":448},[147,94378,407],{"class":157},[147,94380,94381,94384,94386],{"class":149,"line":312},[147,94382,94383],{"class":157},"np.repeat(a,",[147,94385,471],{"class":448},[147,94387,407],{"class":157},[147,94389,94390],{"class":149,"line":1454},[147,94391,93836],{"class":458},[147,94393,94394],{"class":149,"line":1469},[147,94395,94396],{"class":458},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[147,94398,94399,94401,94403,94405,94407,94409,94411,94413,94415,94417,94419],{"class":149,"line":1475},[147,94400,93578],{"class":157},[147,94402,445],{"class":397},[147,94404,93274],{"class":157},[147,94406,616],{"class":448},[147,94408,777],{"class":157},[147,94410,922],{"class":448},[147,94412,93279],{"class":157},[147,94414,692],{"class":448},[147,94416,777],{"class":157},[147,94418,471],{"class":448},[147,94420,407],{"class":157},[147,94422,94423],{"class":149,"line":1489},[147,94424,94425],{"class":458},"#这个重复之后二维变成一维\n",[147,94427,94428,94431,94433],{"class":149,"line":1495},[147,94429,94430],{"class":157},"np.repeat(aa,",[147,94432,477],{"class":448},[147,94434,407],{"class":157},[147,94436,94437],{"class":149,"line":1586},[147,94438,94200],{"class":504},[147,94440,94441],{"class":149,"line":1592},[147,94442,94443],{"class":504},"array([ 1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  6,  7,  7,  8,  8,  9, 9, 10, 10, 11, 11, 12, 12])\n",[147,94445,94446],{"class":149,"line":1604},[147,94447,94200],{"class":504},[147,94449,94450],{"class":149,"line":1886},[147,94451,94452],{"class":458},"#指定axis\n",[147,94454,94455,94457,94459,94461,94463,94465,94467],{"class":149,"line":1891},[147,94456,94430],{"class":157},[147,94458,477],{"class":448},[147,94460,777],{"class":157},[147,94462,47788],{"class":5490},[147,94464,445],{"class":397},[147,94466,590],{"class":448},[147,94468,407],{"class":157},[147,94470,94471],{"class":149,"line":1897},[147,94472,93836],{"class":458},[147,94474,94475],{"class":149,"line":1902},[147,94476,94200],{"class":504},[147,94478,94479],{"class":149,"line":1916},[147,94480,94481],{"class":504},"array([[ 1,  2,  3],\n",[147,94483,94484],{"class":149,"line":1921},[147,94485,94486],{"class":504},"       [ 1,  2,  3],\n",[147,94488,94489],{"class":149,"line":1927},[147,94490,94491],{"class":504},"       [ 4,  5,  6],\n",[147,94493,94494],{"class":149,"line":1948},[147,94495,94491],{"class":504},[147,94497,94498],{"class":149,"line":1953},[147,94499,94500],{"class":504},"       [ 7,  8,  9],\n",[147,94502,94503],{"class":149,"line":1967},[147,94504,94500],{"class":504},[147,94506,94507],{"class":149,"line":1972},[147,94508,94509],{"class":504},"       [10, 11, 12],\n",[147,94511,94512],{"class":149,"line":2001},[147,94513,94514],{"class":504},"       [10, 11, 12]])\n",[147,94516,94517],{"class":149,"line":2006},[147,94518,94200],{"class":504},[147,94520,94521,94523,94525,94527,94529,94531,94533],{"class":149,"line":2023},[147,94522,94430],{"class":157},[147,94524,477],{"class":448},[147,94526,777],{"class":157},[147,94528,47788],{"class":5490},[147,94530,445],{"class":397},[147,94532,616],{"class":448},[147,94534,407],{"class":157},[147,94536,94537],{"class":149,"line":2028},[147,94538,93836],{"class":458},[147,94540,94541],{"class":149,"line":2033},[147,94542,94200],{"class":504},[147,94544,94545],{"class":149,"line":2038},[147,94546,94547],{"class":504},"array([[ 1,  1,  2,  2,  3,  3],\n",[147,94549,94550],{"class":149,"line":2052},[147,94551,94552],{"class":504},"       [ 4,  4,  5,  5,  6,  6],\n",[147,94554,94555],{"class":149,"line":2057},[147,94556,94557],{"class":504},"       [ 7,  7,  8,  8,  9,  9],\n",[147,94559,94560],{"class":149,"line":2851},[147,94561,94562],{"class":504},"       [10, 10, 11, 11, 12, 12]])\n",[147,94564,94565],{"class":149,"line":2865},[147,94566,94200],{"class":504},[14,94568,94570],{"id":94569},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[138,94572,94574],{"className":30652,"code":94573,"language":30654,"meta":143,"style":143},"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",[51,94575,94576,94592,94597,94609,94613,94618,94628,94632],{"__ignoreMap":143},[147,94577,94578,94580,94582,94584,94586,94588,94590],{"class":149,"line":150},[147,94579,637],{"class":157},[147,94581,445],{"class":397},[147,94583,93274],{"class":157},[147,94585,616],{"class":448},[147,94587,777],{"class":157},[147,94589,718],{"class":448},[147,94591,407],{"class":157},[147,94593,94594],{"class":149,"line":312},[147,94595,94596],{"class":458},"#array([，2，3，4])\n",[147,94598,94599,94602,94604,94606],{"class":149,"line":1454},[147,94600,94601],{"class":157},"np.roll(a,",[147,94603,477],{"class":448},[147,94605,828],{"class":157},[147,94607,94608],{"class":458},"#传正数向后调多少位，传负数向前调多少位\n",[147,94610,94611],{"class":149,"line":1469},[147,94612,93836],{"class":458},[147,94614,94615],{"class":149,"line":1475},[147,94616,94617],{"class":458},"#array([3, 4, 1, 2])\n",[147,94619,94620,94622,94624,94626],{"class":149,"line":1489},[147,94621,94601],{"class":157},[147,94623,931],{"class":397},[147,94625,616],{"class":448},[147,94627,407],{"class":157},[147,94629,94630],{"class":149,"line":1495},[147,94631,93836],{"class":458},[147,94633,94634],{"class":149,"line":1586},[147,94635,94636],{"class":458},"#array([2, 3, 4, 1])\n",[19,94638,94639],{},[29,94640],{"alt":143,"src":94641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,94643,94645],{"id":94644},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,94647,94648],{},"resize()重新调整数组的大小",[19,94650,94651],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[138,94653,94655],{"className":30652,"code":94654,"language":30654,"meta":143,"style":143},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[51,94656,94657,94662,94675],{"__ignoreMap":143},[147,94658,94659],{"class":149,"line":150},[147,94660,94661],{"class":458},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[147,94663,94664,94667,94669,94671,94673],{"class":149,"line":312},[147,94665,94666],{"class":157},"np.resize(aa,(",[147,94668,477],{"class":448},[147,94670,777],{"class":157},[147,94672,743],{"class":448},[147,94674,30771],{"class":157},[147,94676,94677,94679,94681,94683,94685,94687],{"class":149,"line":1454},[147,94678,94666],{"class":157},[147,94680,477],{"class":448},[147,94682,777],{"class":157},[147,94684,819],{"class":448},[147,94686,83043],{"class":157},[147,94688,94689],{"class":458},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,94691,94693],{"id":94692},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,94695,94696],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,94698,94699],{},[29,94700],{"alt":143,"src":94701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,94703,94705],{"id":94704},"_126-保存加载文件","12.6 保存加载文件",[19,94707,94708],{},"savetxt():将数据保存到txt文件中",[19,94710,94711],{},"loadtxt():从文件加载数据",[19,94713,94714],{},[29,94715],{"alt":143,"src":94716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,94718,94720],{"id":94719},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,94722,94723],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,94725,94727],{"id":94726},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,94729,94730],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,94732,94733],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,94735,94736],{},[29,94737],{"alt":143,"src":94738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,94740,94742],{"id":94741},"_129-where语句","12.9 where语句",[19,94744,94745],{},"np.where(条件,x,y)",[19,94747,94748],{},"如果条件为True,对应值为x,否则对应值为y",[19,94750,94751],{},[29,94752],{"alt":143,"src":94753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,94755,94757],{"id":94756},"_1210-dot矩阵","12.10 dot()矩阵",[19,94759,94760],{},[29,94761],{"alt":143,"src":94762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[308,94764,94765],{},"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":143,"searchDepth":312,"depth":312,"links":94767},[94768,94769,94770,94771,94772,94773,94774,94775,94776,94777],{"id":94130,"depth":312,"text":94131},{"id":94353,"depth":312,"text":94354},{"id":94569,"depth":312,"text":94570},{"id":94644,"depth":312,"text":94645},{"id":94692,"depth":312,"text":94693},{"id":94704,"depth":312,"text":94705},{"id":94719,"depth":312,"text":94720},{"id":94726,"depth":312,"text":94727},{"id":94741,"depth":312,"text":94742},{"id":94756,"depth":312,"text":94757},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":94122,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94784,"title":94785,"body":94786,"description":321,"extension":322,"meta":95139,"navigation":324,"path":95140,"seo":95141,"stem":95142,"__hash__":95143},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94787,"toc":95137},[94788,94791,94794,94797,94800,94803,94868,94870,95134],[10,94789,94785],{"id":94790},"_13数组排序",[19,94792,94793],{},"排序主要用到的方法是np.sort和np.argsort",[19,94795,94796],{},"其中np.sort()对数组直接排序",[19,94798,94799],{},"而np.argsort()是返回排序后的原始索引",[19,94801,94802],{},"①一维数组",[138,94804,94806],{"className":30652,"code":94805,"language":30654,"meta":143,"style":143},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[51,94807,94808,94812,94852,94860],{"__ignoreMap":143},[147,94809,94810],{"class":149,"line":150},[147,94811,93377],{"class":458},[147,94813,94814,94816,94818,94820,94822,94824,94826,94828,94830,94832,94834,94836,94838,94840,94842,94844,94846,94848,94850],{"class":149,"line":312},[147,94815,637],{"class":157},[147,94817,445],{"class":397},[147,94819,93296],{"class":157},[147,94821,471],{"class":448},[147,94823,777],{"class":157},[147,94825,897],{"class":448},[147,94827,777],{"class":157},[147,94829,794],{"class":448},[147,94831,777],{"class":157},[147,94833,1174],{"class":448},[147,94835,777],{"class":157},[147,94837,678],{"class":448},[147,94839,777],{"class":157},[147,94841,1292],{"class":448},[147,94843,777],{"class":157},[147,94845,743],{"class":448},[147,94847,777],{"class":157},[147,94849,845],{"class":448},[147,94851,4931],{"class":157},[147,94853,94854,94857],{"class":149,"line":1454},[147,94855,94856],{"class":157},"np.sort(a)",[147,94858,94859],{"class":458},"#升序排序\n",[147,94861,94862,94865],{"class":149,"line":1469},[147,94863,94864],{"class":157},"np.argsort(a)",[147,94866,94867],{"class":458},"#按照元素大小来索引排序\n",[19,94869,93563],{},[138,94871,94873],{"className":30652,"code":94872,"language":30654,"meta":143,"style":143},"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",[51,94874,94875,94887,94913,94918,94922,94927,94932,94937,94942,94946,94954,94958,94963,94968,94973,94978,94982,94987,95000,95004,95009,95014,95019,95024,95028,95033,95045,95049,95053,95057,95061,95065,95069,95074,95089,95094,95103,95108,95112,95116,95121,95125,95130],{"__ignoreMap":143},[147,94876,94877,94880,94882,94884],{"class":149,"line":150},[147,94878,94879],{"class":157},"np.random.seed(",[147,94881,590],{"class":448},[147,94883,828],{"class":157},[147,94885,94886],{"class":458},"#保证每次值一样\n",[147,94888,94889,94891,94893,94895,94897,94899,94901,94903,94905,94907,94909,94911],{"class":149,"line":312},[147,94890,93578],{"class":157},[147,94892,445],{"class":397},[147,94894,93386],{"class":157},[147,94896,710],{"class":448},[147,94898,777],{"class":157},[147,94900,31770],{"class":5490},[147,94902,445],{"class":397},[147,94904,401],{"class":157},[147,94906,692],{"class":448},[147,94908,777],{"class":157},[147,94910,743],{"class":448},[147,94912,30771],{"class":157},[147,94914,94915],{"class":149,"line":1454},[147,94916,94917],{"class":458},"#原数组：\n",[147,94919,94920],{"class":149,"line":1469},[147,94921,94200],{"class":504},[147,94923,94924],{"class":149,"line":1475},[147,94925,94926],{"class":504},"array([[44, 47, 64, 67, 67,  9],\n",[147,94928,94929],{"class":149,"line":1489},[147,94930,94931],{"class":504},"       [83, 21, 36, 87, 70, 88],\n",[147,94933,94934],{"class":149,"line":1495},[147,94935,94936],{"class":504},"       [88, 12, 58, 65, 39, 87],\n",[147,94938,94939],{"class":149,"line":1586},[147,94940,94941],{"class":504},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[147,94943,94944],{"class":149,"line":1592},[147,94945,94200],{"class":504},[147,94947,94948,94951],{"class":149,"line":1604},[147,94949,94950],{"class":157},"np.sort(aa)",[147,94952,94953],{"class":458},"#每行进行了排序\n",[147,94955,94956],{"class":149,"line":1886},[147,94957,94200],{"class":504},[147,94959,94960],{"class":149,"line":1891},[147,94961,94962],{"class":504},"array([[ 9, 44, 47, 64, 67, 67],\n",[147,94964,94965],{"class":149,"line":1897},[147,94966,94967],{"class":504},"       [21, 36, 70, 83, 87, 88],\n",[147,94969,94970],{"class":149,"line":1902},[147,94971,94972],{"class":504},"       [12, 39, 58, 65, 87, 88],\n",[147,94974,94975],{"class":149,"line":1916},[147,94976,94977],{"class":504},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[147,94979,94980],{"class":149,"line":1921},[147,94981,94200],{"class":504},[147,94983,94984],{"class":149,"line":1927},[147,94985,94986],{"class":458},"#axis=0时\n",[147,94988,94989,94992,94994,94996,94998],{"class":149,"line":1948},[147,94990,94991],{"class":157},"np.sort(aa,",[147,94993,47788],{"class":5490},[147,94995,445],{"class":397},[147,94997,590],{"class":448},[147,94999,407],{"class":157},[147,95001,95002],{"class":149,"line":1953},[147,95003,94200],{"class":504},[147,95005,95006],{"class":149,"line":1967},[147,95007,95008],{"class":504},"array([[44, 12, 36, 37, 25,  9],\n",[147,95010,95011],{"class":149,"line":1972},[147,95012,95013],{"class":504},"       [46, 21, 58, 65, 39, 77],\n",[147,95015,95016],{"class":149,"line":2001},[147,95017,95018],{"class":504},"       [83, 47, 64, 67, 67, 87],\n",[147,95020,95021],{"class":149,"line":2006},[147,95022,95023],{"class":504},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[147,95025,95026],{"class":149,"line":2023},[147,95027,94200],{"class":504},[147,95029,95030],{"class":149,"line":2028},[147,95031,95032],{"class":458},"#axis=1时,为默认值\n",[147,95034,95035,95037,95039,95041,95043],{"class":149,"line":2033},[147,95036,94991],{"class":157},[147,95038,47788],{"class":5490},[147,95040,445],{"class":397},[147,95042,616],{"class":448},[147,95044,407],{"class":157},[147,95046,95047],{"class":149,"line":2038},[147,95048,94200],{"class":504},[147,95050,95051],{"class":149,"line":2052},[147,95052,94962],{"class":504},[147,95054,95055],{"class":149,"line":2057},[147,95056,94967],{"class":504},[147,95058,95059],{"class":149,"line":2851},[147,95060,94972],{"class":504},[147,95062,95063],{"class":149,"line":2865},[147,95064,94977],{"class":504},[147,95066,95067],{"class":149,"line":2873},[147,95068,94200],{"class":504},[147,95070,95071],{"class":149,"line":2878},[147,95072,95073],{"class":458},"#按最后一列排序\n",[147,95075,95076,95078,95080,95083,95085,95087],{"class":149,"line":2884},[147,95077,662],{"class":157},[147,95079,445],{"class":397},[147,95081,95082],{"class":157},"aa[:,",[147,95084,931],{"class":397},[147,95086,616],{"class":448},[147,95088,33520],{"class":157},[147,95090,95091],{"class":149,"line":2890},[147,95092,95093],{"class":458},"#获取最后一列排好序的索引\n",[147,95095,95096,95098,95100],{"class":149,"line":2895},[147,95097,74331],{"class":157},[147,95099,445],{"class":397},[147,95101,95102],{"class":157},"np.argsort(b)\n",[147,95104,95105],{"class":149,"line":8222},[147,95106,95107],{"class":157},"aa[index]\n",[147,95109,95110],{"class":149,"line":8246},[147,95111,94200],{"class":504},[147,95113,95114],{"class":149,"line":8251},[147,95115,94926],{"class":504},[147,95117,95118],{"class":149,"line":8257},[147,95119,95120],{"class":504},"       [46, 88, 81, 37, 25, 77],\n",[147,95122,95123],{"class":149,"line":8284},[147,95124,94936],{"class":504},[147,95126,95127],{"class":149,"line":8289},[147,95128,95129],{"class":504},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[147,95131,95132],{"class":149,"line":8295},[147,95133,94200],{"class":504},[308,95135,95136],{},"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":143,"searchDepth":312,"depth":312,"links":95138},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94785,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":95145,"title":95146,"body":95147,"description":321,"extension":322,"meta":95177,"navigation":324,"path":95178,"seo":95179,"stem":95180,"__hash__":95181},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":95148,"toc":95175},[95149,95152,95155,95158,95161,95164,95167,95170],[10,95150,95146],{"id":95151},"_14广播机制",[19,95153,95154],{},"广播的规则：",[19,95156,95157],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,95159,95160],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,95162,95163],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,95165,95166],{},"3.如果没有维度形状为1，则会引发异常",[19,95168,95169],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,95171,95172],{},[29,95173],{"alt":143,"src":95174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":143,"searchDepth":312,"depth":312,"links":95176},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":95146,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":95183,"title":95184,"body":95185,"description":321,"extension":322,"meta":95283,"navigation":324,"path":95284,"seo":95285,"stem":95286,"__hash__":95287},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":95186,"toc":95281},[95187,95190,95193,95278],[10,95188,95184],{"id":95189},"_15比较掩码",[19,95191,95192],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[138,95194,95196],{"className":30652,"code":95195,"language":30654,"meta":143,"style":143},"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",[51,95197,95198,95244,95255,95269,95273],{"__ignoreMap":143},[147,95199,95200,95202,95204,95207,95209,95211,95213,95215,95217,95219,95221,95223,95225,95227,95229,95231,95233,95235,95237,95239,95241],{"class":149,"line":150},[147,95201,637],{"class":157},[147,95203,445],{"class":397},[147,95205,95206],{"class":157},"np.array([[",[147,95208,616],{"class":448},[147,95210,777],{"class":157},[147,95212,477],{"class":448},[147,95214,777],{"class":157},[147,95216,471],{"class":448},[147,95218,48304],{"class":157},[147,95220,871],{"class":448},[147,95222,777],{"class":157},[147,95224,897],{"class":448},[147,95226,777],{"class":157},[147,95228,922],{"class":448},[147,95230,48304],{"class":157},[147,95232,1124],{"class":448},[147,95234,777],{"class":157},[147,95236,1149],{"class":448},[147,95238,777],{"class":157},[147,95240,1174],{"class":448},[147,95242,95243],{"class":157},"]])\n",[147,95245,95246,95248,95250,95252],{"class":149,"line":312},[147,95247,637],{"class":157},[147,95249,1309],{"class":397},[147,95251,1099],{"class":448},[147,95253,95254],{"class":458},"#结果是一个由True,False组成的数组\n",[147,95256,95257,95260,95262,95264,95266],{"class":149,"line":1454},[147,95258,95259],{"class":157},"a[a",[147,95261,1309],{"class":397},[147,95263,1099],{"class":448},[147,95265,1339],{"class":157},[147,95267,95268],{"class":458},"#小于20的元素会存到这个数组中\n",[147,95270,95271],{"class":149,"line":1469},[147,95272,93836],{"class":458},[147,95274,95275],{"class":149,"line":1475},[147,95276,95277],{"class":458},"#array([ 1,  2,  3, 11, 12, 13])\n",[308,95279,95280],{},"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":143,"searchDepth":312,"depth":312,"links":95282},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":95184,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95289,"title":95290,"body":95291,"description":321,"extension":322,"meta":95383,"navigation":324,"path":95384,"seo":95385,"stem":95386,"__hash__":95387},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95292,"toc":95381},[95293,95296,95299,95302,95305,95308,95373,95378],[10,95294,95290],{"id":95295},"_16魔法命令time",[19,95297,95298],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,95300,95301],{},"%:行模式",[19,95303,95304],{},"%%:单元格模式",[19,95306,95307],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[138,95309,95311],{"className":30652,"code":95310,"language":30654,"meta":143,"style":143},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[51,95312,95313,95318,95325,95330,95339,95352,95356,95364],{"__ignoreMap":143},[147,95314,95315],{"class":149,"line":150},[147,95316,95317],{"class":458},"#程序执行时间\n",[147,95319,95320,95322],{"class":149,"line":312},[147,95321,30666],{"class":397},[147,95323,95324],{"class":157}," time \n",[147,95326,95327],{"class":149,"line":1454},[147,95328,95329],{"class":458},"#获取时间\n",[147,95331,95332,95335,95337],{"class":149,"line":1469},[147,95333,95334],{"class":157},"start",[147,95336,445],{"class":397},[147,95338,32692],{"class":157},[147,95340,95341,95344,95347,95349],{"class":149,"line":1475},[147,95342,95343],{"class":157},"time.sleep(",[147,95345,95346],{"class":448},"0.4",[147,95348,828],{"class":157},[147,95350,95351],{"class":458},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[147,95353,95354],{"class":149,"line":1489},[147,95355,95329],{"class":458},[147,95357,95358,95360,95362],{"class":149,"line":1495},[147,95359,46075],{"class":157},[147,95361,445],{"class":397},[147,95363,32692],{"class":157},[147,95365,95366,95368,95370],{"class":149,"line":1586},[147,95367,46075],{"class":157},[147,95369,931],{"class":397},[147,95371,95372],{"class":157},"start\n",[19,95374,95375],{},[29,95376],{"alt":143,"src":95377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[308,95379,95380],{},"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":143,"searchDepth":312,"depth":312,"links":95382},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95290,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95389,"title":95390,"body":95391,"description":321,"extension":322,"meta":95426,"navigation":324,"path":95427,"seo":95428,"stem":95429,"__hash__":95430},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95392,"toc":95424},[95393,95396,95399,95402,95405,95408,95411,95414,95419],[10,95394,95390],{"id":95395},"_17魔法命令timeit",[19,95397,95398],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,95400,95401],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,95403,95404],{},"单元格模式：",[19,95406,95407],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,95409,95410],{},"初始化语句执行次数由轮数来决定",[19,95412,95413],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,95415,95416],{},[29,95417],{"alt":143,"src":95418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,95420,95421],{},[29,95422],{"alt":143,"src":95423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":143,"searchDepth":312,"depth":312,"links":95425},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95390,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":95432,"title":95433,"body":95434,"description":321,"extension":322,"meta":95452,"navigation":324,"path":95453,"seo":95454,"stem":95455,"__hash__":95456},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95435,"toc":95450},[95436,95439,95442,95445],[10,95437,95433],{"id":95438},"_18魔法命令writefile和run",[19,95440,95441],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,95443,95444],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,95446,95447],{},[29,95448],{"alt":143,"src":95449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":143,"searchDepth":312,"depth":312,"links":95451},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95433,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95458,"title":95459,"body":95460,"description":321,"extension":322,"meta":95513,"navigation":324,"path":95514,"seo":95515,"stem":95516,"__hash__":95517},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95461,"toc":95511},[95462,95465,95468,95470,95473,95476,95481,95484,95487,95490,95493,95496,95499,95502,95505,95508],[10,95463,95459],{"id":95464},"_19魔法命令memit",[19,95466,95467],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,95469,24873],{},[19,95471,95472],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,95474,95475],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,95477,95478],{},[29,95479],{"alt":143,"src":95480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,95482,95483],{},"补充：",[19,95485,95486],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,95488,95489],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,95491,95492],{},"解决方法：",[19,95494,95495],{},"1.cmd",[19,95497,95498],{},"2.依次输入以下代码：",[19,95500,95501],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,95503,95504],{},"pip install --upgrade ipython",[19,95506,95507],{},"#升级 memory_profiler 和 setuptools",[19,95509,95510],{},"pip install --upgrade memory_profiler setuptools",{"title":143,"searchDepth":312,"depth":312,"links":95512},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95459,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95519,"title":95520,"body":95521,"description":321,"extension":322,"meta":97167,"navigation":324,"path":97168,"seo":97169,"stem":97170,"__hash__":97171},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95522,"toc":97137},[95523,95526,95530,95534,95595,95598,95603,95607,95612,95617,95622,95627,95630,95635,95639,95643,95676,95679,95682,95685,95737,95740,95776,95779,95821,95825,95846,95848,95885,95887,95892,95894,95899,95903,95906,95934,95938,95942,95995,95999,96091,96095,96099,96102,96107,96111,96136,96141,96145,96148,96151,96154,96157,96160,96163,96166,96178,96182,96186,96189,96221,96224,96247,96250,96276,96279,96305,96308,96342,96345,96407,96411,96414,96418,96421,96447,96450,96453,96458,96461,96530,96532,96537,96598,96601,96612,96618,96623,96627,96630,96643,96647,96662,96664,96687,96689,96715,96718,96721,96724,96772,96774,96779,96783,96787,96814,96818,96845,96848,96853,96858,96948,96952,97010,97015,97018,97021,97063,97067,97123,97128,97131,97134],[10,95524,95520],{"id":95525},"_2创建数组",[14,95527,95529],{"id":95528},"_21-array函数创建数组","2.1 array()函数创建数组",[367,95531,95533],{"id":95532},"_221-函数语句","2.2.1 函数语句",[138,95535,95537],{"className":30652,"code":95536,"language":30654,"meta":143,"style":143},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[51,95538,95539],{"__ignoreMap":143},[147,95540,95541,95544,95547,95549,95551,95553,95555,95557,95560,95562,95565,95567,95570,95572,95574,95576,95579,95581,95584,95586,95589,95591,95593],{"class":149,"line":150},[147,95542,95543],{"class":157},"numpy.array(",[147,95545,95546],{"class":448},"object",[147,95548,12709],{"class":157},[147,95550,93772],{"class":5490},[147,95552,13838],{"class":397},[147,95554,39207],{"class":448},[147,95556,12709],{"class":157},[147,95558,95559],{"class":5490},"copy",[147,95561,13838],{"class":397},[147,95563,95564],{"class":448}," True",[147,95566,12709],{"class":157},[147,95568,95569],{"class":5490},"order",[147,95571,13838],{"class":397},[147,95573,39207],{"class":448},[147,95575,12709],{"class":157},[147,95577,95578],{"class":5490},"subok",[147,95580,13838],{"class":397},[147,95582,95583],{"class":448}," False",[147,95585,12709],{"class":157},[147,95587,95588],{"class":5490},"ndmin",[147,95590,13838],{"class":397},[147,95592,4367],{"class":448},[147,95594,407],{"class":157},[19,95596,95597],{},"参数：",[19,95599,95600],{},[29,95601],{"alt":143,"src":95602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[367,95604,95606],{"id":95605},"_222-实例","2.2.2 实例",[19,95608,95609],{},[29,95610],{"alt":143,"src":95611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,95613,95614],{},[29,95615],{"alt":143,"src":95616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,95618,95619],{},[29,95620],{"alt":143,"src":95621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,95623,95624],{},[29,95625],{"alt":143,"src":95626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,95628,95629],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,95631,95632],{},[29,95633],{"alt":143,"src":95634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,95636,95638],{"id":95637},"_22-随机数创建数组","2.2 随机数创建数组",[367,95640,95642],{"id":95641},"_221-random语句","2.2.1 random语句",[138,95644,95646],{"className":30652,"code":95645,"language":30654,"meta":143,"style":143},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[51,95647,95648,95653,95658,95666,95671],{"__ignoreMap":143},[147,95649,95650],{"class":149,"line":150},[147,95651,95652],{"class":458},"#random.random()\n",[147,95654,95655],{"class":149,"line":312},[147,95656,95657],{"class":458},"#确定随机种子,就是每次运行结果是相同的\n",[147,95659,95660,95662,95664],{"class":149,"line":1454},[147,95661,94879],{"class":157},[147,95663,590],{"class":448},[147,95665,407],{"class":157},[147,95667,95668],{"class":149,"line":1469},[147,95669,95670],{"class":157},"np.random.random()\n",[147,95672,95673],{"class":149,"line":1475},[147,95674,95675],{"class":458},"#生成一个随机的数目\n",[19,95677,95678],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,95680,95681],{},"可以指定数组形状 size",[19,95683,95684],{},"①生成一维数组",[138,95686,95688],{"className":30652,"code":95687,"language":30654,"meta":143,"style":143},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[51,95689,95690,95695,95708,95713,95729],{"__ignoreMap":143},[147,95691,95692],{"class":149,"line":150},[147,95693,95694],{"class":458},"#random.random(size())\n",[147,95696,95697,95700,95702,95704,95706],{"class":149,"line":312},[147,95698,95699],{"class":157},"np.random.random(",[147,95701,31770],{"class":5490},[147,95703,445],{"class":397},[147,95705,718],{"class":448},[147,95707,407],{"class":157},[147,95709,95710],{"class":149,"line":1454},[147,95711,95712],{"class":458},"#生成一位的五个元素\n",[147,95714,95715,95717,95719,95721,95723,95725,95727],{"class":149,"line":1469},[147,95716,637],{"class":157},[147,95718,445],{"class":397},[147,95720,95699],{"class":157},[147,95722,31770],{"class":5490},[147,95724,445],{"class":397},[147,95726,692],{"class":448},[147,95728,407],{"class":157},[147,95730,95731,95734],{"class":149,"line":1475},[147,95732,95733],{"class":157},"a.shape ",[147,95735,95736],{"class":458},"#输出数组形状\n",[19,95738,95739],{},"②生成二维数组",[138,95741,95743],{"className":30652,"code":95742,"language":30654,"meta":143,"style":143},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[51,95744,95745,95749,95771],{"__ignoreMap":143},[147,95746,95747],{"class":149,"line":150},[147,95748,93573],{"class":458},[147,95750,95751,95753,95755,95757,95759,95761,95763,95765,95767,95769],{"class":149,"line":312},[147,95752,93578],{"class":157},[147,95754,445],{"class":397},[147,95756,95699],{"class":157},[147,95758,31770],{"class":5490},[147,95760,445],{"class":397},[147,95762,401],{"class":157},[147,95764,692],{"class":448},[147,95766,777],{"class":157},[147,95768,718],{"class":448},[147,95770,30771],{"class":157},[147,95772,95773],{"class":149,"line":1454},[147,95774,95775],{"class":458},"#生成四行五列的数组\n",[19,95777,95778],{},"③生成三维数组",[138,95780,95782],{"className":30652,"code":95781,"language":30654,"meta":143,"style":143},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[51,95783,95784,95789,95816],{"__ignoreMap":143},[147,95785,95786],{"class":149,"line":150},[147,95787,95788],{"class":458},"#三维数组\n",[147,95790,95791,95794,95796,95798,95800,95802,95804,95806,95808,95810,95812,95814],{"class":149,"line":312},[147,95792,95793],{"class":157},"aaa",[147,95795,445],{"class":397},[147,95797,95699],{"class":157},[147,95799,31770],{"class":5490},[147,95801,445],{"class":397},[147,95803,401],{"class":157},[147,95805,477],{"class":448},[147,95807,777],{"class":157},[147,95809,471],{"class":448},[147,95811,777],{"class":157},[147,95813,692],{"class":448},[147,95815,30771],{"class":157},[147,95817,95818],{"class":149,"line":1454},[147,95819,95820],{"class":157},"aaa.shape\n",[367,95822,95824],{"id":95823},"_222-randint语句","2.2.2 randint语句",[138,95826,95828],{"className":30652,"code":95827,"language":30654,"meta":143,"style":143},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[51,95829,95830,95835],{"__ignoreMap":143},[147,95831,95832],{"class":149,"line":150},[147,95833,95834],{"class":458},"#生成随机的整数 random.randint(low,high,size)\n",[147,95836,95837,95839,95841,95843],{"class":149,"line":312},[147,95838,93386],{"class":157},[147,95840,718],{"class":448},[147,95842,13988],{"class":157},[147,95844,95845],{"class":458},"#0~5中的随机一个数\n",[19,95847,95684],{},[138,95849,95851],{"className":30652,"code":95850,"language":30654,"meta":143,"style":143},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[51,95852,95853,95858,95880],{"__ignoreMap":143},[147,95854,95855],{"class":149,"line":150},[147,95856,95857],{"class":458},"#一维\n",[147,95859,95860,95862,95864,95866,95868,95870,95872,95874,95876,95878],{"class":149,"line":312},[147,95861,93386],{"class":157},[147,95863,616],{"class":448},[147,95865,777],{"class":157},[147,95867,871],{"class":448},[147,95869,777],{"class":157},[147,95871,31770],{"class":5490},[147,95873,445],{"class":397},[147,95875,401],{"class":157},[147,95877,845],{"class":448},[147,95879,30771],{"class":157},[147,95881,95882],{"class":149,"line":1454},[147,95883,95884],{"class":458},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,95886,95739],{},[19,95888,95889],{},[29,95890],{"alt":143,"src":95891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,95893,95778],{},[19,95895,95896],{},[29,95897],{"alt":143,"src":95898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[367,95900,95902],{"id":95901},"_222-rand语句","2.2.2 rand语句",[19,95904,95905],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[138,95907,95909],{"className":30652,"code":95908,"language":30654,"meta":143,"style":143},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[51,95910,95911,95924,95929],{"__ignoreMap":143},[147,95912,95913,95916,95918,95920,95922],{"class":149,"line":150},[147,95914,95915],{"class":157},"np.random.rand(",[147,95917,710],{"class":448},[147,95919,777],{"class":157},[147,95921,845],{"class":448},[147,95923,407],{"class":157},[147,95925,95926],{"class":149,"line":312},[147,95927,95928],{"class":458},"#第一个参数100：行数，表示有100个样本\n",[147,95930,95931],{"class":149,"line":1454},[147,95932,95933],{"class":458},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,95935,95937],{"id":95936},"_23-arange创建数组","2.3 arange()创建数组",[367,95939,95941],{"id":95940},"_231-函数语句","2.3.1 函数语句",[138,95943,95945],{"className":30652,"code":95944,"language":30654,"meta":143,"style":143},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[51,95946,95947,95961,95966,95971,95976,95981,95986,95991],{"__ignoreMap":143},[147,95948,95949,95952,95954,95956,95959],{"class":149,"line":150},[147,95950,95951],{"class":157},"numpy.arange([start,] stop[, step], ",[147,95953,93772],{"class":5490},[147,95955,445],{"class":397},[147,95957,95958],{"class":448},"None",[147,95960,407],{"class":157},[147,95962,95963],{"class":149,"line":312},[147,95964,95965],{"class":458},"#参数\n",[147,95967,95968],{"class":149,"line":1454},[147,95969,95970],{"class":504},"\"\"\"\n",[147,95972,95973],{"class":149,"line":1469},[147,95974,95975],{"class":504},"start:起始值，可选，默认从 0 开始。\n",[147,95977,95978],{"class":149,"line":1475},[147,95979,95980],{"class":504},"stop:结束值（不包含该值）。\n",[147,95982,95983],{"class":149,"line":1489},[147,95984,95985],{"class":504},"step:步长，可选，默认是 1。可以为浮点数。\n",[147,95987,95988],{"class":149,"line":1495},[147,95989,95990],{"class":504},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[147,95992,95993],{"class":149,"line":1586},[147,95994,95970],{"class":504},[367,95996,95998],{"id":95997},"_232-实例","2.3.2 实例",[138,96000,96002],{"className":30652,"code":96001,"language":30654,"meta":143,"style":143},"#创建一维数组\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",[51,96003,96004,96008,96032,96037,96042,96046,96069,96073,96077,96082,96087],{"__ignoreMap":143},[147,96005,96006],{"class":149,"line":150},[147,96007,93377],{"class":458},[147,96009,96010,96012,96014,96016,96018,96020,96022,96024,96026,96028,96030],{"class":149,"line":312},[147,96011,93274],{"class":157},[147,96013,616],{"class":448},[147,96015,777],{"class":157},[147,96017,1124],{"class":448},[147,96019,777],{"class":157},[147,96021,616],{"class":448},[147,96023,777],{"class":157},[147,96025,93772],{"class":5490},[147,96027,445],{"class":397},[147,96029,404],{"class":448},[147,96031,407],{"class":157},[147,96033,96034],{"class":149,"line":1454},[147,96035,96036],{"class":458},"#输出结果：\n",[147,96038,96039],{"class":149,"line":1469},[147,96040,96041],{"class":458},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[147,96043,96044],{"class":149,"line":1475},[147,96045,94219],{"class":458},[147,96047,96048,96051,96053,96055,96057,96060,96062,96064,96066],{"class":149,"line":1489},[147,96049,96050],{"class":157},"np.array([np.arange(",[147,96052,616],{"class":448},[147,96054,777],{"class":157},[147,96056,692],{"class":448},[147,96058,96059],{"class":157},"),np.arange(",[147,96061,692],{"class":448},[147,96063,777],{"class":157},[147,96065,768],{"class":448},[147,96067,96068],{"class":157},")])\n",[147,96070,96071],{"class":149,"line":1495},[147,96072,93836],{"class":458},[147,96074,96075],{"class":149,"line":1586},[147,96076,95970],{"class":504},[147,96078,96079],{"class":149,"line":1592},[147,96080,96081],{"class":504},"array([[1, 2, 3],\n",[147,96083,96084],{"class":149,"line":1604},[147,96085,96086],{"class":504},"       [4, 5, 6]])\n",[147,96088,96089],{"class":149,"line":1886},[147,96090,95970],{"class":504},[14,96092,96094],{"id":96093},"_24-生态分布","2.4 生态分布",[367,96096,96098],{"id":96097},"_241-标准正态分布","2.4.1 标准正态分布",[19,96100,96101],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,96103,96104],{},[29,96105],{"alt":143,"src":96106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[367,96108,96110],{"id":96109},"_242-常规正态分布","2.4.2 常规正态分布",[138,96112,96114],{"className":30652,"code":96113,"language":30654,"meta":143,"style":143},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[51,96115,96116,96121,96126,96131],{"__ignoreMap":143},[147,96117,96118],{"class":149,"line":150},[147,96119,96120],{"class":157},"random.normal(loc,scale,size)也可以生成正态分布\n",[147,96122,96123],{"class":149,"line":312},[147,96124,96125],{"class":458},"#loc:期望\n",[147,96127,96128],{"class":149,"line":1454},[147,96129,96130],{"class":458},"#scale:方差\n",[147,96132,96133],{"class":149,"line":1469},[147,96134,96135],{"class":458},"#size:用于确定是几维的数列\n",[19,96137,96138],{},[29,96139],{"alt":143,"src":96140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,96142,96144],{"id":96143},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,96146,96147],{},"ndim:秩，维度个数",[19,96149,96150],{},"size:数组元素的个数",[19,96152,96153],{},"shape:数组的形状",[19,96155,96156],{},"dtype:数组元素的类型",[19,96158,96159],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,96161,96162],{},"他们都是属性，通过数组.属性的形式来确定",[19,96164,96165],{},"如果需要输出多个可以通过以下方式：",[138,96167,96169],{"className":30652,"code":96168,"language":30654,"meta":143,"style":143},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[51,96170,96171],{"__ignoreMap":143},[147,96172,96173,96175],{"class":149,"line":150},[147,96174,30689],{"class":448},[147,96176,96177],{"class":157},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,96179,96181],{"id":96180},"_26-其他方式创建数组","2.6 其他方式创建数组",[367,96183,96185],{"id":96184},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,96187,96188],{},"①创建一维数组",[138,96190,96192],{"className":30652,"code":96191,"language":30654,"meta":143,"style":143},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[51,96193,96194,96203,96207,96212,96217],{"__ignoreMap":143},[147,96195,96196,96199,96201],{"class":149,"line":150},[147,96197,96198],{"class":157},"np.zeros(",[147,96200,845],{"class":448},[147,96202,407],{"class":157},[147,96204,96205],{"class":149,"line":312},[147,96206,95970],{"class":504},[147,96208,96209],{"class":149,"line":1454},[147,96210,96211],{"class":504},"输出结果：\n",[147,96213,96214],{"class":149,"line":1469},[147,96215,96216],{"class":504},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[147,96218,96219],{"class":149,"line":1475},[147,96220,95970],{"class":504},[19,96222,96223],{},"上方代码等价于：",[138,96225,96227],{"className":30652,"code":96226,"language":30654,"meta":143,"style":143},"np.zeros(shape=(10))#创建10个元素的0数组\n",[51,96228,96229],{"__ignoreMap":143},[147,96230,96231,96233,96236,96238,96240,96242,96244],{"class":149,"line":150},[147,96232,96198],{"class":157},[147,96234,96235],{"class":5490},"shape",[147,96237,445],{"class":397},[147,96239,401],{"class":157},[147,96241,845],{"class":448},[147,96243,83043],{"class":157},[147,96245,96246],{"class":458},"#创建10个元素的0数组\n",[19,96248,96249],{},"也可以指定类型",[138,96251,96253],{"className":30652,"code":96252,"language":30654,"meta":143,"style":143},"#指定类型\nnp.zeros(5,dtype=int)\n",[51,96254,96255,96260],{"__ignoreMap":143},[147,96256,96257],{"class":149,"line":150},[147,96258,96259],{"class":458},"#指定类型\n",[147,96261,96262,96264,96266,96268,96270,96272,96274],{"class":149,"line":312},[147,96263,96198],{"class":157},[147,96265,718],{"class":448},[147,96267,777],{"class":157},[147,96269,93772],{"class":5490},[147,96271,445],{"class":397},[147,96273,404],{"class":448},[147,96275,407],{"class":157},[19,96277,96278],{},"②创建二维数组",[138,96280,96282],{"className":30652,"code":96281,"language":30654,"meta":143,"style":143},"np.zeros((3,4),dtype=int)\n",[51,96283,96284],{"__ignoreMap":143},[147,96285,96286,96289,96291,96293,96295,96297,96299,96301,96303],{"class":149,"line":150},[147,96287,96288],{"class":157},"np.zeros((",[147,96290,471],{"class":448},[147,96292,777],{"class":157},[147,96294,692],{"class":448},[147,96296,42530],{"class":157},[147,96298,93772],{"class":5490},[147,96300,445],{"class":397},[147,96302,404],{"class":448},[147,96304,407],{"class":157},[19,96306,96307],{},"③创建三维数组",[138,96309,96311],{"className":30652,"code":96310,"language":30654,"meta":143,"style":143},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[51,96312,96313,96318],{"__ignoreMap":143},[147,96314,96315],{"class":149,"line":150},[147,96316,96317],{"class":458},"#创建三维数组\n",[147,96319,96320,96322,96324,96326,96328,96330,96332,96334,96336,96338,96340],{"class":149,"line":312},[147,96321,96288],{"class":157},[147,96323,471],{"class":448},[147,96325,777],{"class":157},[147,96327,692],{"class":448},[147,96329,777],{"class":157},[147,96331,718],{"class":448},[147,96333,42530],{"class":157},[147,96335,93772],{"class":5490},[147,96337,445],{"class":397},[147,96339,404],{"class":448},[147,96341,407],{"class":157},[19,96343,96344],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[138,96346,96348],{"className":30652,"code":96347,"language":30654,"meta":143,"style":143},"#使用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",[51,96349,96350,96355,96370,96375,96380,96402],{"__ignoreMap":143},[147,96351,96352],{"class":149,"line":150},[147,96353,96354],{"class":458},"#使用zeros_like将创建的一维数组变成全0的数组\n",[147,96356,96357,96359,96361,96363,96365,96367],{"class":149,"line":312},[147,96358,637],{"class":157},[147,96360,445],{"class":397},[147,96362,93274],{"class":157},[147,96364,692],{"class":448},[147,96366,828],{"class":157},[147,96368,96369],{"class":458},"#这个得到的结果：一维数组0，1，2，3\n",[147,96371,96372],{"class":149,"line":1454},[147,96373,96374],{"class":157},"np.zeros_like(a)\n",[147,96376,96377],{"class":149,"line":1469},[147,96378,96379],{"class":458},"#使用zeros_like将创建的二维数组变成全0的数组\n",[147,96381,96382,96384,96386,96388,96390,96392,96394,96396,96398,96400],{"class":149,"line":1475},[147,96383,93578],{"class":157},[147,96385,445],{"class":397},[147,96387,95699],{"class":157},[147,96389,31770],{"class":5490},[147,96391,445],{"class":397},[147,96393,401],{"class":157},[147,96395,692],{"class":448},[147,96397,777],{"class":157},[147,96399,718],{"class":448},[147,96401,30771],{"class":157},[147,96403,96404],{"class":149,"line":1489},[147,96405,96406],{"class":157},"np.zeros_like(aa)\n",[367,96408,96410],{"id":96409},"_262-ones创建数组","2.6.2 ones()创建数组",[19,96412,96413],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[367,96415,96417],{"id":96416},"_263-empty创建数组","2.6.3 empty()创建数组",[19,96419,96420],{},"①empty()用法",[138,96422,96424],{"className":30652,"code":96423,"language":30654,"meta":143,"style":143},"numpy.empty(shape,dtype=float,order='c')\n",[51,96425,96426],{"__ignoreMap":143},[147,96427,96428,96431,96433,96435,96437,96439,96441,96443,96445],{"class":149,"line":150},[147,96429,96430],{"class":157},"numpy.empty(shape,",[147,96432,93772],{"class":5490},[147,96434,445],{"class":397},[147,96436,439],{"class":448},[147,96438,777],{"class":157},[147,96440,95569],{"class":5490},[147,96442,445],{"class":397},[147,96444,76301],{"class":504},[147,96446,407],{"class":157},[19,96448,96449],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,96451,96452],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,96454,96455],{},[29,96456],{"alt":143,"src":96457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,96459,96460],{},"②empty()用法",[138,96462,96464],{"className":30652,"code":96463,"language":30654,"meta":143,"style":143},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[51,96465,96466,96487,96499,96520,96525],{"__ignoreMap":143},[147,96467,96468,96470,96472,96475,96477,96479,96481,96483,96485],{"class":149,"line":150},[147,96469,1244],{"class":157},[147,96471,445],{"class":397},[147,96473,96474],{"class":157},"np.empty(",[147,96476,845],{"class":448},[147,96478,777],{"class":157},[147,96480,93772],{"class":5490},[147,96482,445],{"class":397},[147,96484,404],{"class":448},[147,96486,407],{"class":157},[147,96488,96489,96491,96493,96495,96497],{"class":149,"line":312},[147,96490,1219],{"class":157},[147,96492,445],{"class":397},[147,96494,93274],{"class":157},[147,96496,718],{"class":448},[147,96498,407],{"class":157},[147,96500,96501,96504,96506,96509,96511,96513,96516,96518],{"class":149,"line":1454},[147,96502,96503],{"class":157},"np.add(",[147,96505,477],{"class":448},[147,96507,96508],{"class":157},",x,",[147,96510,93326],{"class":5490},[147,96512,445],{"class":397},[147,96514,96515],{"class":157},"y[:",[147,96517,718],{"class":448},[147,96519,4931],{"class":157},[147,96521,96522],{"class":149,"line":1469},[147,96523,96524],{"class":458},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[147,96526,96527],{"class":149,"line":1475},[147,96528,96529],{"class":157},"y\n",[19,96531,11788],{},[19,96533,96534],{},[29,96535],{"alt":143,"src":96536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[138,96538,96540],{"className":30652,"code":96539,"language":30654,"meta":143,"style":143},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[51,96541,96542,96558,96578,96593],{"__ignoreMap":143},[147,96543,96544,96546,96548,96550,96552,96554,96556],{"class":149,"line":150},[147,96545,1219],{"class":157},[147,96547,445],{"class":397},[147,96549,93274],{"class":157},[147,96551,616],{"class":448},[147,96553,777],{"class":157},[147,96555,743],{"class":448},[147,96557,407],{"class":157},[147,96559,96560,96562,96564,96566,96568,96570,96572,96574,96576],{"class":149,"line":312},[147,96561,1244],{"class":157},[147,96563,445],{"class":397},[147,96565,96474],{"class":157},[147,96567,718],{"class":448},[147,96569,777],{"class":157},[147,96571,93772],{"class":5490},[147,96573,445],{"class":397},[147,96575,404],{"class":448},[147,96577,407],{"class":157},[147,96579,96580,96583,96585,96587,96589,96591],{"class":149,"line":1454},[147,96581,96582],{"class":157},"np.add(x,",[147,96584,477],{"class":448},[147,96586,777],{"class":157},[147,96588,93326],{"class":5490},[147,96590,445],{"class":397},[147,96592,93721],{"class":157},[147,96594,96595],{"class":149,"line":1469},[147,96596,96597],{"class":458},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,96599,96600],{},"③empty_like()",[19,96602,96603],{},[234,96604,96605,96606,96611],{},"创建一个",[234,96607,96608],{},[234,96609,96610],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,96613,96614,96617],{},[51,96615,96616],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,96619,96620],{},[29,96621],{"alt":143,"src":96622},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[367,96624,96626],{"id":96625},"_264-用法","2.6.4 ？？用法",[19,96628,96629],{},"当想查看一个函数的参数时，可以通过？？来实现",[138,96631,96633],{"className":30652,"code":96632,"language":30654,"meta":143,"style":143},"np.full??\n",[51,96634,96635],{"__ignoreMap":143},[147,96636,96637,96640],{"class":149,"line":150},[147,96638,96639],{"class":157},"np.full",[147,96641,96642],{"class":77675},"??\n",[367,96644,96646],{"id":96645},"_265-full创建数组","2.6.5 full()创建数组",[138,96648,96650],{"className":30652,"code":96649,"language":30654,"meta":143,"style":143},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[51,96651,96652,96657],{"__ignoreMap":143},[147,96653,96654],{"class":149,"line":150},[147,96655,96656],{"class":157},"full(shape,fill_value)\n",[147,96658,96659],{"class":149,"line":312},[147,96660,96661],{"class":157},"创建全为某个指定值的数组\n",[19,96663,94802],{},[138,96665,96667],{"className":30652,"code":96666,"language":30654,"meta":143,"style":143},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[51,96668,96669,96674],{"__ignoreMap":143},[147,96670,96671],{"class":149,"line":150},[147,96672,96673],{"class":458},"#创建一个一维数组,以20进行填充\n",[147,96675,96676,96679,96681,96683,96685],{"class":149,"line":312},[147,96677,96678],{"class":157},"np.full(",[147,96680,845],{"class":448},[147,96682,777],{"class":157},[147,96684,1099],{"class":448},[147,96686,407],{"class":157},[19,96688,93563],{},[138,96690,96692],{"className":30652,"code":96691,"language":30654,"meta":143,"style":143},"#创建二维数组\nnp.full((3,5),11)\n",[51,96693,96694,96698],{"__ignoreMap":143},[147,96695,96696],{"class":149,"line":150},[147,96697,94219],{"class":458},[147,96699,96700,96703,96705,96707,96709,96711,96713],{"class":149,"line":312},[147,96701,96702],{"class":157},"np.full((",[147,96704,471],{"class":448},[147,96706,777],{"class":157},[147,96708,718],{"class":448},[147,96710,42530],{"class":157},[147,96712,871],{"class":448},[147,96714,407],{"class":157},[19,96716,96717],{},"③full_like用法",[19,96719,96720],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,96722,96723],{},"这里是指定填充而已",[138,96725,96727],{"className":30652,"code":96726,"language":30654,"meta":143,"style":143},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[51,96728,96729,96734,96758,96763],{"__ignoreMap":143},[147,96730,96731],{"class":149,"line":150},[147,96732,96733],{"class":458},"#创建一个指定形状数组\n",[147,96735,96736,96738,96740,96742,96744,96746,96748,96750,96752,96754,96756],{"class":149,"line":312},[147,96737,637],{"class":157},[147,96739,445],{"class":397},[147,96741,93274],{"class":157},[147,96743,616],{"class":448},[147,96745,777],{"class":157},[147,96747,724],{"class":448},[147,96749,93279],{"class":157},[147,96751,692],{"class":448},[147,96753,777],{"class":157},[147,96755,819],{"class":448},[147,96757,407],{"class":157},[147,96759,96760],{"class":149,"line":1454},[147,96761,96762],{"class":458},"#进行指定填充\n",[147,96764,96765,96768,96770],{"class":149,"line":1469},[147,96766,96767],{"class":157},"np.full_like(a,",[147,96769,845],{"class":448},[147,96771,407],{"class":157},[19,96773,11788],{},[19,96775,96776],{},[29,96777],{"alt":143,"src":96778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[367,96780,96782],{"id":96781},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22271,96784,96786],{"id":96785},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[138,96788,96790],{"className":30652,"code":96789,"language":30654,"meta":143,"style":143},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[51,96791,96792,96809],{"__ignoreMap":143},[147,96793,96794,96797,96799,96801,96803,96805,96807],{"class":149,"line":150},[147,96795,96796],{"class":157},"np.eye(",[147,96798,692],{"class":448},[147,96800,777],{"class":157},[147,96802,93772],{"class":5490},[147,96804,445],{"class":397},[147,96806,404],{"class":448},[147,96808,407],{"class":157},[147,96810,96811],{"class":149,"line":312},[147,96812,96813],{"class":458},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22271,96815,96817],{"id":96816},"_2662-法2identity","2.6.6.2 法2：identity()",[138,96819,96821],{"className":30652,"code":96820,"language":30654,"meta":143,"style":143},"#identity()\nnp.identity(5,dtype=int)\n",[51,96822,96823,96828],{"__ignoreMap":143},[147,96824,96825],{"class":149,"line":150},[147,96826,96827],{"class":458},"#identity()\n",[147,96829,96830,96833,96835,96837,96839,96841,96843],{"class":149,"line":312},[147,96831,96832],{"class":157},"np.identity(",[147,96834,718],{"class":448},[147,96836,777],{"class":157},[147,96838,93772],{"class":5490},[147,96840,445],{"class":397},[147,96842,404],{"class":448},[147,96844,407],{"class":157},[19,96846,96847],{},"两个函数是有区别的",[19,96849,96850],{},[29,96851],{"alt":143,"src":96852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,96854,96855],{},[29,96856],{"alt":143,"src":96857},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[138,96859,96861],{"className":30652,"code":96860,"language":30654,"meta":143,"style":143},"# 创建一个 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",[51,96862,96863,96868,96880,96885,96890,96895,96900,96904,96909,96929,96933,96938,96943],{"__ignoreMap":143},[147,96864,96865],{"class":149,"line":150},[147,96866,96867],{"class":458},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[147,96869,96870,96872,96874,96876,96878],{"class":149,"line":312},[147,96871,96796],{"class":157},[147,96873,471],{"class":448},[147,96875,12709],{"class":157},[147,96877,692],{"class":448},[147,96879,407],{"class":157},[147,96881,96882],{"class":149,"line":1454},[147,96883,96884],{"class":458},"# 输出:\n",[147,96886,96887],{"class":149,"line":1469},[147,96888,96889],{"class":458},"# [[1. 0. 0. 0.]\n",[147,96891,96892],{"class":149,"line":1475},[147,96893,96894],{"class":458},"#  [0. 1. 0. 0.]\n",[147,96896,96897],{"class":149,"line":1489},[147,96898,96899],{"class":458},"#  [0. 0. 1. 0.]]\n",[147,96901,96902],{"class":149,"line":1495},[147,96903,2674],{"emptyLinePlaceholder":324},[147,96905,96906],{"class":149,"line":1586},[147,96907,96908],{"class":458},"# 对角线向上偏移1\n",[147,96910,96911,96913,96915,96917,96919,96921,96923,96925,96927],{"class":149,"line":1592},[147,96912,96796],{"class":157},[147,96914,471],{"class":448},[147,96916,12709],{"class":157},[147,96918,692],{"class":448},[147,96920,12709],{"class":157},[147,96922,892],{"class":5490},[147,96924,445],{"class":397},[147,96926,616],{"class":448},[147,96928,407],{"class":157},[147,96930,96931],{"class":149,"line":1604},[147,96932,96884],{"class":458},[147,96934,96935],{"class":149,"line":1886},[147,96936,96937],{"class":458},"# [[0. 1. 0. 0.]\n",[147,96939,96940],{"class":149,"line":1891},[147,96941,96942],{"class":458},"#  [0. 0. 1. 0.]\n",[147,96944,96945],{"class":149,"line":1897},[147,96946,96947],{"class":458},"#  [0. 0. 0. 1.]]\n",[367,96949,96951],{"id":96950},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[138,96953,96955],{"className":30652,"code":96954,"language":30654,"meta":143,"style":143},"#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",[51,96956,96957,96962,96966,96971,96976,96981,96986,96991,96996,97001,97006],{"__ignoreMap":143},[147,96958,96959],{"class":149,"line":150},[147,96960,96961],{"class":458},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[147,96963,96964],{"class":149,"line":312},[147,96965,95970],{"class":504},[147,96967,96968],{"class":149,"line":1454},[147,96969,96970],{"class":504},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[147,96972,96973],{"class":149,"line":1469},[147,96974,96975],{"class":504},"参数介绍：\n",[147,96977,96978],{"class":149,"line":1475},[147,96979,96980],{"class":504},"start：序列的起始值\n",[147,96982,96983],{"class":149,"line":1489},[147,96984,96985],{"class":504},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[147,96987,96988],{"class":149,"line":1495},[147,96989,96990],{"class":504},"num：要生长的等步长的样本数量，默认为50\n",[147,96992,96993],{"class":149,"line":1586},[147,96994,96995],{"class":504},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[147,96997,96998],{"class":149,"line":1592},[147,96999,97000],{"class":504},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[147,97002,97003],{"class":149,"line":1604},[147,97004,97005],{"class":504},"dtype：ndarry的数据类型\n",[147,97007,97008],{"class":149,"line":1886},[147,97009,95970],{"class":504},[19,97011,97012],{},[29,97013],{"alt":143,"src":97014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,97016,97017],{},"这里num=是可以省略的",[19,97019,97020],{},"也就是下方两行代码结果是一模一样的",[138,97022,97024],{"className":30652,"code":97023,"language":30654,"meta":143,"style":143},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[51,97025,97026,97043],{"__ignoreMap":143},[147,97027,97028,97031,97033,97035,97037,97039,97041],{"class":149,"line":150},[147,97029,97030],{"class":157},"np.linspace(",[147,97032,616],{"class":448},[147,97034,777],{"class":157},[147,97036,718],{"class":448},[147,97038,777],{"class":157},[147,97040,718],{"class":448},[147,97042,407],{"class":157},[147,97044,97045,97047,97049,97051,97053,97055,97057,97059,97061],{"class":149,"line":312},[147,97046,97030],{"class":157},[147,97048,616],{"class":448},[147,97050,777],{"class":157},[147,97052,718],{"class":448},[147,97054,777],{"class":157},[147,97056,1939],{"class":5490},[147,97058,445],{"class":397},[147,97060,718],{"class":448},[147,97062,407],{"class":157},[367,97064,97066],{"id":97065},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[138,97068,97070],{"className":30652,"code":97069,"language":30654,"meta":143,"style":143},"#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",[51,97071,97072,97077,97081,97086,97091,97096,97101,97105,97110,97115,97119],{"__ignoreMap":143},[147,97073,97074],{"class":149,"line":150},[147,97075,97076],{"class":458},"#logspace函数用于创建一个等比数列，格式如下：\n",[147,97078,97079],{"class":149,"line":312},[147,97080,95970],{"class":504},[147,97082,97083],{"class":149,"line":1454},[147,97084,97085],{"class":504},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[147,97087,97088],{"class":149,"line":1469},[147,97089,97090],{"class":504},"参数为：\n",[147,97092,97093],{"class":149,"line":1475},[147,97094,97095],{"class":504},"start:序列的起始位置为：base**start\n",[147,97097,97098],{"class":149,"line":1489},[147,97099,97100],{"class":504},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[147,97102,97103],{"class":149,"line":1495},[147,97104,96990],{"class":504},[147,97106,97107],{"class":149,"line":1586},[147,97108,97109],{"class":504},"endpoint：是否包含 stop 这个值，默认是 True\n",[147,97111,97112],{"class":149,"line":1592},[147,97113,97114],{"class":504},"base：对数的底数，默认是 10（常见对数）\n",[147,97116,97117],{"class":149,"line":1604},[147,97118,97005],{"class":504},[147,97120,97121],{"class":149,"line":1886},[147,97122,95970],{"class":504},[19,97124,97125],{},[29,97126],{"alt":143,"src":97127},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,97129,97130],{},"logspace()函数中的num参数也是可以不写num=的",[19,97132,97133],{},"endpoint是不可以省略的",[308,97135,97136],{},"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":143,"searchDepth":312,"depth":312,"links":97138},[97139,97143,97148,97152,97156,97157],{"id":95528,"depth":312,"text":95529,"children":97140},[97141,97142],{"id":95532,"depth":1454,"text":95533},{"id":95605,"depth":1454,"text":95606},{"id":95637,"depth":312,"text":95638,"children":97144},[97145,97146,97147],{"id":95641,"depth":1454,"text":95642},{"id":95823,"depth":1454,"text":95824},{"id":95901,"depth":1454,"text":95902},{"id":95936,"depth":312,"text":95937,"children":97149},[97150,97151],{"id":95940,"depth":1454,"text":95941},{"id":95997,"depth":1454,"text":95998},{"id":96093,"depth":312,"text":96094,"children":97153},[97154,97155],{"id":96097,"depth":1454,"text":96098},{"id":96109,"depth":1454,"text":96110},{"id":96143,"depth":312,"text":96144},{"id":96180,"depth":312,"text":96181,"children":97158},[97159,97160,97161,97162,97163,97164,97165,97166],{"id":96184,"depth":1454,"text":96185},{"id":96409,"depth":1454,"text":96410},{"id":96416,"depth":1454,"text":96417},{"id":96625,"depth":1454,"text":96626},{"id":96645,"depth":1454,"text":96646},{"id":96781,"depth":1454,"text":96782},{"id":96950,"depth":1454,"text":96951},{"id":97065,"depth":1454,"text":97066},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95520,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":97173,"title":97174,"body":97175,"description":321,"extension":322,"meta":97268,"navigation":324,"path":97269,"seo":97270,"stem":97271,"__hash__":97272},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":97176,"toc":97266},[97177,97180,97183,97186,97189,97192,97195,97198,97201,97204,97207,97210,97212,97215,97218,97223,97226,97229,97263],[10,97178,97174],{"id":97179},"_20魔法命令mprun",[19,97181,97182],{},"逐行分析数据内存的使用情况",[19,97184,97185],{},"语法格式：",[19,97187,97188],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,97190,97191],{},"分析结果列如下：",[19,97193,97194],{},"Line行号",[19,97196,97197],{},"Mem usage内存使用大小",[19,97199,97200],{},"increment内存增量",[19,97202,97203],{},"Line content代码内容",[19,97205,97206],{},"补充说明：",[19,97208,97209],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,97211,95475],{},[19,97213,97214],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,97216,97217],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,97219,97220],{},[29,97221],{"alt":143,"src":97222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,97224,97225],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,97227,97228],{},"这时候需要重新加载模块",[138,97230,97232],{"className":30652,"code":97231,"language":30654,"meta":143,"style":143},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[51,97233,97234,97239,97246,97251],{"__ignoreMap":143},[147,97235,97236],{"class":149,"line":150},[147,97237,97238],{"class":458},"#重新加载模块\n",[147,97240,97241,97243],{"class":149,"line":312},[147,97242,30666],{"class":397},[147,97244,97245],{"class":157}," importlib\n",[147,97247,97248],{"class":149,"line":1454},[147,97249,97250],{"class":157},"importlib.reload(mprun_test)\n",[147,97252,97253,97255,97258,97260],{"class":149,"line":1469},[147,97254,727],{"class":397},[147,97256,97257],{"class":157},"mprun ",[147,97259,931],{"class":397},[147,97261,97262],{"class":157},"f mprun_test.fun_test mprun_test.fun_test()\n",[308,97264,97265],{},"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":143,"searchDepth":312,"depth":312,"links":97267},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":97174,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":97274,"title":97275,"body":97276,"description":321,"extension":322,"meta":97293,"navigation":324,"path":97294,"seo":97295,"stem":97296,"__hash__":97297},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97277,"toc":97291},[97278,97281,97286],[10,97279,97275],{"id":97280},"_3一维数组的索引和切片",[19,97282,97283],{},[29,97284],{"alt":143,"src":97285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,97287,97288],{},[29,97289],{"alt":143,"src":97290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":143,"searchDepth":312,"depth":312,"links":97292},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97275,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97299,"title":97300,"body":97301,"description":321,"extension":322,"meta":97784,"navigation":324,"path":97785,"seo":97786,"stem":97787,"__hash__":97788},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97302,"toc":97782},[97303,97306,97309,97314,97347,97350,97388,97391,97425,97428,97533,97536,97573,97576,97677,97680,97731,97734,97776,97779],[10,97304,97300],{"id":97305},"_4二维数组的索引与切片",[19,97307,97308],{},"①获取指定单个元素",[19,97310,97311],{},[29,97312],{"alt":143,"src":97313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[138,97315,97317],{"className":30652,"code":97316,"language":30654,"meta":143,"style":143},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[51,97318,97319,97324,97329,97334],{"__ignoreMap":143},[147,97320,97321],{"class":149,"line":150},[147,97322,97323],{"class":458},"#获取元素9\n",[147,97325,97326],{"class":149,"line":312},[147,97327,97328],{"class":458},"#先获取所在行，再获取所在列\n",[147,97330,97331],{"class":149,"line":1454},[147,97332,97333],{"class":458},"#数组[行索引号，列索引号]\n",[147,97335,97336,97339,97341,97343,97345],{"class":149,"line":1469},[147,97337,97338],{"class":157},"a[",[147,97340,616],{"class":448},[147,97342,777],{"class":157},[147,97344,477],{"class":448},[147,97346,33520],{"class":157},[19,97348,97349],{},"②获取整行元素",[138,97351,97353],{"className":30652,"code":97352,"language":30654,"meta":143,"style":143},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[51,97354,97355,97360,97365,97373,97378],{"__ignoreMap":143},[147,97356,97357],{"class":149,"line":150},[147,97358,97359],{"class":458},"#获取整行 数组[行索引号]\n",[147,97361,97362],{"class":149,"line":312},[147,97363,97364],{"class":458},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[147,97366,97367,97369,97371],{"class":149,"line":1454},[147,97368,97338],{"class":157},[147,97370,477],{"class":448},[147,97372,33520],{"class":157},[147,97374,97375],{"class":149,"line":1469},[147,97376,97377],{"class":458},"#也可以负索引获取一行\n",[147,97379,97380,97382,97384,97386],{"class":149,"line":1475},[147,97381,97338],{"class":157},[147,97383,931],{"class":397},[147,97385,616],{"class":448},[147,97387,33520],{"class":157},[19,97389,97390],{},"③获取整列元素",[138,97392,97394],{"className":30652,"code":97393,"language":30654,"meta":143,"style":143},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[51,97395,97396,97401,97410,97415],{"__ignoreMap":143},[147,97397,97398],{"class":149,"line":150},[147,97399,97400],{"class":458},"#获取整列 数组名[:,列索引]\n",[147,97402,97403,97406,97408],{"class":149,"line":312},[147,97404,97405],{"class":157},"a[:,",[147,97407,477],{"class":448},[147,97409,33520],{"class":157},[147,97411,97412],{"class":149,"line":1454},[147,97413,97414],{"class":458},"#也可以负索引获取一列\n",[147,97416,97417,97419,97421,97423],{"class":149,"line":1469},[147,97418,97405],{"class":157},[147,97420,931],{"class":397},[147,97422,616],{"class":448},[147,97424,33520],{"class":157},[19,97426,97427],{},"④部分行部分列的元素",[138,97429,97431],{"className":30652,"code":97430,"language":30654,"meta":143,"style":143},"#部分行部分列 数组名[行切片，列切片]\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",[51,97432,97433,97438,97448,97452,97456,97461,97466,97470,97482,97486,97490,97495,97500,97505,97510,97514,97519],{"__ignoreMap":143},[147,97434,97435],{"class":149,"line":150},[147,97436,97437],{"class":458},"#部分行部分列 数组名[行切片，列切片]\n",[147,97439,97440,97443,97445],{"class":149,"line":312},[147,97441,97442],{"class":157},"a[:",[147,97444,477],{"class":448},[147,97446,97447],{"class":157},",:]\n",[147,97449,97450],{"class":149,"line":1454},[147,97451,93836],{"class":458},[147,97453,97454],{"class":149,"line":1469},[147,97455,94200],{"class":504},[147,97457,97458],{"class":149,"line":1475},[147,97459,97460],{"class":504},"array([[ 1,  2,  3,  4,  5,  6],\n",[147,97462,97463],{"class":149,"line":1489},[147,97464,97465],{"class":504},"       [ 7,  8,  9, 10, 11, 12]])\n",[147,97467,97468],{"class":149,"line":1495},[147,97469,94200],{"class":504},[147,97471,97472,97474,97476,97478,97480],{"class":149,"line":1586},[147,97473,97405],{"class":157},[147,97475,616],{"class":448},[147,97477,1258],{"class":157},[147,97479,692],{"class":448},[147,97481,33520],{"class":157},[147,97483,97484],{"class":149,"line":1592},[147,97485,93836],{"class":458},[147,97487,97488],{"class":149,"line":1604},[147,97489,94200],{"class":504},[147,97491,97492],{"class":149,"line":1886},[147,97493,97494],{"class":504},"array([[ 2,  3,  4],\n",[147,97496,97497],{"class":149,"line":1891},[147,97498,97499],{"class":504},"       [ 8,  9, 10],\n",[147,97501,97502],{"class":149,"line":1897},[147,97503,97504],{"class":504},"       [14, 15, 16],\n",[147,97506,97507],{"class":149,"line":1902},[147,97508,97509],{"class":504},"       [20, 21, 22]])\n",[147,97511,97512],{"class":149,"line":1916},[147,97513,94200],{"class":504},[147,97515,97516],{"class":149,"line":1921},[147,97517,97518],{"class":458},"#对列行同时进行切片，使用了step参数\n",[147,97520,97521,97524,97526,97529,97531],{"class":149,"line":1927},[147,97522,97523],{"class":157},"a[::",[147,97525,477],{"class":448},[147,97527,97528],{"class":157},",::",[147,97530,477],{"class":448},[147,97532,33520],{"class":157},[19,97534,97535],{},"⑤同时获取两个元素",[138,97537,97539],{"className":30652,"code":97538,"language":30654,"meta":143,"style":143},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[51,97540,97541,97546,97551],{"__ignoreMap":143},[147,97542,97543],{"class":149,"line":150},[147,97544,97545],{"class":458},"#同时获取第三行第二列，第四行第一列\n",[147,97547,97548],{"class":149,"line":312},[147,97549,97550],{"class":458},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[147,97552,97553,97556,97558,97560,97562,97564,97566,97568,97570],{"class":149,"line":1454},[147,97554,97555],{"class":157},"a[(",[147,97557,477],{"class":448},[147,97559,777],{"class":157},[147,97561,471],{"class":448},[147,97563,42521],{"class":157},[147,97565,616],{"class":448},[147,97567,777],{"class":157},[147,97569,590],{"class":448},[147,97571,97572],{"class":157},")]\n",[19,97574,97575],{},"⑥切片，对行进行反向获取",[138,97577,97579],{"className":30652,"code":97578,"language":30654,"meta":143,"style":143},"#切片 对所有行进行反向获取\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",[51,97580,97581,97586,97596,97600,97604,97609,97614,97619,97624,97628,97633,97649,97653,97658,97663,97668,97673],{"__ignoreMap":143},[147,97582,97583],{"class":149,"line":150},[147,97584,97585],{"class":458},"#切片 对所有行进行反向获取\n",[147,97587,97588,97590,97592,97594],{"class":149,"line":312},[147,97589,97523],{"class":157},[147,97591,931],{"class":397},[147,97593,616],{"class":448},[147,97595,33520],{"class":157},[147,97597,97598],{"class":149,"line":1454},[147,97599,93836],{"class":458},[147,97601,97602],{"class":149,"line":1469},[147,97603,94200],{"class":504},[147,97605,97606],{"class":149,"line":1475},[147,97607,97608],{"class":504},"array([[19, 20, 21, 22, 23, 24],\n",[147,97610,97611],{"class":149,"line":1489},[147,97612,97613],{"class":504},"       [13, 14, 15, 16, 17, 18],\n",[147,97615,97616],{"class":149,"line":1495},[147,97617,97618],{"class":504},"       [ 7,  8,  9, 10, 11, 12],\n",[147,97620,97621],{"class":149,"line":1586},[147,97622,97623],{"class":504},"       [ 1,  2,  3,  4,  5,  6]])\n",[147,97625,97626],{"class":149,"line":1592},[147,97627,94200],{"class":504},[147,97629,97630],{"class":149,"line":1604},[147,97631,97632],{"class":458},"#对行列都进行反向切片获取\n",[147,97634,97635,97637,97639,97641,97643,97645,97647],{"class":149,"line":1886},[147,97636,97523],{"class":157},[147,97638,931],{"class":397},[147,97640,616],{"class":448},[147,97642,97528],{"class":157},[147,97644,931],{"class":397},[147,97646,616],{"class":448},[147,97648,33520],{"class":157},[147,97650,97651],{"class":149,"line":1891},[147,97652,94200],{"class":504},[147,97654,97655],{"class":149,"line":1897},[147,97656,97657],{"class":504},"array([[24, 23, 22, 21, 20, 19],\n",[147,97659,97660],{"class":149,"line":1902},[147,97661,97662],{"class":504},"       [18, 17, 16, 15, 14, 13],\n",[147,97664,97665],{"class":149,"line":1916},[147,97666,97667],{"class":504},"       [12, 11, 10,  9,  8,  7],\n",[147,97669,97670],{"class":149,"line":1921},[147,97671,97672],{"class":504},"       [ 6,  5,  4,  3,  2,  1]])\n",[147,97674,97675],{"class":149,"line":1927},[147,97676,94200],{"class":504},[19,97678,97679],{},"⑦修改元素",[138,97681,97683],{"className":30652,"code":97682,"language":30654,"meta":143,"style":143},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[51,97684,97685,97690,97708,97713],{"__ignoreMap":143},[147,97686,97687],{"class":149,"line":150},[147,97688,97689],{"class":458},"#获取前两行和前两列\n",[147,97691,97692,97695,97697,97699,97701,97704,97706],{"class":149,"line":312},[147,97693,97694],{"class":157},"sub_a",[147,97696,445],{"class":397},[147,97698,97442],{"class":157},[147,97700,477],{"class":448},[147,97702,97703],{"class":157},",:",[147,97705,477],{"class":448},[147,97707,33520],{"class":157},[147,97709,97710],{"class":149,"line":1454},[147,97711,97712],{"class":458},"#修改sub_a第一个元素的值\n",[147,97714,97715,97718,97720,97722,97724,97726,97728],{"class":149,"line":1469},[147,97716,97717],{"class":157},"sub_a[",[147,97719,590],{"class":448},[147,97721,777],{"class":157},[147,97723,590],{"class":448},[147,97725,1339],{"class":157},[147,97727,445],{"class":397},[147,97729,97730],{"class":448},"100\n",[19,97732,97733],{},"⑧数组复制copy()",[138,97735,97737],{"className":30652,"code":97736,"language":30654,"meta":143,"style":143},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[51,97738,97739,97744,97754,97759],{"__ignoreMap":143},[147,97740,97741],{"class":149,"line":150},[147,97742,97743],{"class":458},"#数组复制\n",[147,97745,97746,97749,97751],{"class":149,"line":312},[147,97747,97748],{"class":157},"copy_a",[147,97750,445],{"class":397},[147,97752,97753],{"class":157},"np.copy(sub_a)\n",[147,97755,97756],{"class":149,"line":1454},[147,97757,97758],{"class":458},"#修改copy_a后不影响原数组\n",[147,97760,97761,97764,97766,97768,97770,97772,97774],{"class":149,"line":1469},[147,97762,97763],{"class":157},"copy_a[",[147,97765,590],{"class":448},[147,97767,777],{"class":157},[147,97769,590],{"class":448},[147,97771,1339],{"class":157},[147,97773,445],{"class":397},[147,97775,97730],{"class":448},[19,97777,97778],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[308,97780,97781],{},"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":143,"searchDepth":312,"depth":312,"links":97783},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97300,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97790,"title":97791,"body":97792,"description":321,"extension":322,"meta":98284,"navigation":324,"path":98285,"seo":98286,"stem":98287,"__hash__":98288},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97793,"toc":98276},[97794,97797,97801,97804,97807,97860,97863,97888,97891,97910,97930,97933,97949,97953,97999,98003,98045,98049,98052,98055,98058,98061,98064,98126,98186,98190,98193,98250,98254,98259,98268,98273],[10,97795,97791],{"id":97796},"_5改变数组的维度",[14,97798,97800],{"id":97799},"_51-使用reshape","5.1 使用reshape()",[19,97802,97803],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,97805,97806],{},"①一维数组转换为二维数组",[138,97808,97810],{"className":30652,"code":97809,"language":30654,"meta":143,"style":143},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[51,97811,97812,97828,97833,97838,97843],{"__ignoreMap":143},[147,97813,97814,97816,97818,97820,97822,97824,97826],{"class":149,"line":150},[147,97815,637],{"class":157},[147,97817,445],{"class":397},[147,97819,93274],{"class":157},[147,97821,616],{"class":448},[147,97823,777],{"class":157},[147,97825,922],{"class":448},[147,97827,407],{"class":157},[147,97829,97830],{"class":149,"line":312},[147,97831,97832],{"class":458},"#将一维数组进行转换\n",[147,97834,97835],{"class":149,"line":1454},[147,97836,97837],{"class":458},"#注意点：元素个数不可以变\n",[147,97839,97840],{"class":149,"line":1469},[147,97841,97842],{"class":458},"#转换维度要保持一致，不一致就异常！！！\n",[147,97844,97845,97847,97849,97852,97854,97856,97858],{"class":149,"line":1475},[147,97846,93578],{"class":157},[147,97848,445],{"class":397},[147,97850,97851],{"class":157},"a.reshape(",[147,97853,477],{"class":448},[147,97855,777],{"class":157},[147,97857,743],{"class":448},[147,97859,407],{"class":157},[19,97861,97862],{},"②一维数组转换为三维数组",[138,97864,97866],{"className":30652,"code":97865,"language":30654,"meta":143,"style":143},"aaa=a.reshape(2,3,2)\n",[51,97867,97868],{"__ignoreMap":143},[147,97869,97870,97872,97874,97876,97878,97880,97882,97884,97886],{"class":149,"line":150},[147,97871,95793],{"class":157},[147,97873,445],{"class":397},[147,97875,97851],{"class":157},[147,97877,477],{"class":448},[147,97879,777],{"class":157},[147,97881,471],{"class":448},[147,97883,777],{"class":157},[147,97885,477],{"class":448},[147,97887,407],{"class":157},[19,97889,97890],{},"③二维数组转化为一维数组",[138,97892,97894],{"className":30652,"code":97893,"language":30654,"meta":143,"style":143},"#知道元素个数：\naa.reshape(12)\n",[51,97895,97896,97901],{"__ignoreMap":143},[147,97897,97898],{"class":149,"line":150},[147,97899,97900],{"class":458},"#知道元素个数：\n",[147,97902,97903,97906,97908],{"class":149,"line":312},[147,97904,97905],{"class":157},"aa.reshape(",[147,97907,897],{"class":448},[147,97909,407],{"class":157},[138,97911,97913],{"className":30652,"code":97912,"language":30654,"meta":143,"style":143},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[51,97914,97915,97920],{"__ignoreMap":143},[147,97916,97917],{"class":149,"line":150},[147,97918,97919],{"class":458},"#不知道元素个数，参数传递-1\n",[147,97921,97922,97924,97926,97928],{"class":149,"line":312},[147,97923,97905],{"class":157},[147,97925,931],{"class":397},[147,97927,616],{"class":448},[147,97929,407],{"class":157},[19,97931,97932],{},"④三维数组转换为一维数组",[138,97934,97936],{"className":30652,"code":97935,"language":30654,"meta":143,"style":143},"aaa.reshape(-1)\n",[51,97937,97938],{"__ignoreMap":143},[147,97939,97940,97943,97945,97947],{"class":149,"line":150},[147,97941,97942],{"class":157},"aaa.reshape(",[147,97944,931],{"class":397},[147,97946,616],{"class":448},[147,97948,407],{"class":157},[14,97950,97952],{"id":97951},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[138,97954,97956],{"className":30652,"code":97955,"language":30654,"meta":143,"style":143},"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",[51,97957,97958,97985,97990,97994],{"__ignoreMap":143},[147,97959,97960,97962,97964,97966,97968,97970,97972,97974,97976,97978,97980,97982],{"class":149,"line":150},[147,97961,93578],{"class":157},[147,97963,445],{"class":397},[147,97965,93274],{"class":157},[147,97967,616],{"class":448},[147,97969,777],{"class":157},[147,97971,922],{"class":448},[147,97973,93279],{"class":157},[147,97975,477],{"class":448},[147,97977,777],{"class":157},[147,97979,743],{"class":448},[147,97981,828],{"class":157},[147,97983,97984],{"class":458},"#转换为2行6列的数组\n",[147,97986,97987],{"class":149,"line":312},[147,97988,97989],{"class":157},"aa.revel()\n",[147,97991,97992],{"class":149,"line":1454},[147,97993,93836],{"class":458},[147,97995,97996],{"class":149,"line":1469},[147,97997,97998],{"class":458},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,98000,98002],{"id":98001},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[138,98004,98006],{"className":30652,"code":98005,"language":30654,"meta":143,"style":143},"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",[51,98007,98008,98032,98037,98041],{"__ignoreMap":143},[147,98009,98010,98012,98014,98016,98018,98020,98022,98024,98026,98028,98030],{"class":149,"line":150},[147,98011,93578],{"class":157},[147,98013,445],{"class":397},[147,98015,93274],{"class":157},[147,98017,616],{"class":448},[147,98019,777],{"class":157},[147,98021,922],{"class":448},[147,98023,93279],{"class":157},[147,98025,477],{"class":448},[147,98027,777],{"class":157},[147,98029,743],{"class":448},[147,98031,407],{"class":157},[147,98033,98034],{"class":149,"line":312},[147,98035,98036],{"class":157},"aa.flatten()\n",[147,98038,98039],{"class":149,"line":1454},[147,98040,93836],{"class":458},[147,98042,98043],{"class":149,"line":1469},[147,98044,97998],{"class":458},[14,98046,98048],{"id":98047},"_54-使用resize","5.4 使用resize()",[19,98050,98051],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,98053,98054],{},"通过resize方法可以改变数组的维度",[19,98056,98057],{},"#resize修改数组维度",[19,98059,98060],{},"#以元组的形式指定形状",[19,98062,98063],{},"#改变的是原数组",[138,98065,98067],{"className":30652,"code":98066,"language":30654,"meta":143,"style":143},"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",[51,98068,98069,98085,98105,98118,98122],{"__ignoreMap":143},[147,98070,98071,98073,98075,98077,98079,98081,98083],{"class":149,"line":150},[147,98072,637],{"class":157},[147,98074,445],{"class":397},[147,98076,93274],{"class":157},[147,98078,616],{"class":448},[147,98080,777],{"class":157},[147,98082,922],{"class":448},[147,98084,407],{"class":157},[147,98086,98087,98090,98092,98094,98096,98098,98100,98102],{"class":149,"line":312},[147,98088,98089],{"class":157},"a.shape",[147,98091,445],{"class":397},[147,98093,401],{"class":157},[147,98095,477],{"class":448},[147,98097,777],{"class":157},[147,98099,743],{"class":448},[147,98101,828],{"class":157},[147,98103,98104],{"class":458},"#改变了原数组\n",[147,98106,98107,98109,98111,98114,98116],{"class":149,"line":1454},[147,98108,637],{"class":157},[147,98110,445],{"class":397},[147,98112,98113],{"class":157},"resize((",[147,98115,897],{"class":448},[147,98117,30771],{"class":157},[147,98119,98120],{"class":149,"line":1469},[147,98121,93836],{"class":458},[147,98123,98124],{"class":149,"line":1475},[147,98125,97998],{"class":458},[138,98127,98129],{"className":30652,"code":98128,"language":30654,"meta":143,"style":143},"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",[51,98130,98131,98144,98148,98152,98157,98162,98167,98172,98177,98182],{"__ignoreMap":143},[147,98132,98133,98136,98138,98140,98142],{"class":149,"line":150},[147,98134,98135],{"class":157},"a.resize((",[147,98137,743],{"class":448},[147,98139,777],{"class":157},[147,98141,477],{"class":448},[147,98143,30771],{"class":157},[147,98145,98146],{"class":149,"line":312},[147,98147,93836],{"class":458},[147,98149,98150],{"class":149,"line":1454},[147,98151,94200],{"class":504},[147,98153,98154],{"class":149,"line":1469},[147,98155,98156],{"class":504},"array([[ 1,  2],\n",[147,98158,98159],{"class":149,"line":1475},[147,98160,98161],{"class":504},"       [ 3,  4],\n",[147,98163,98164],{"class":149,"line":1489},[147,98165,98166],{"class":504},"       [ 5,  6],\n",[147,98168,98169],{"class":149,"line":1495},[147,98170,98171],{"class":504},"       [ 7,  8],\n",[147,98173,98174],{"class":149,"line":1586},[147,98175,98176],{"class":504},"       [ 9, 10],\n",[147,98178,98179],{"class":149,"line":1592},[147,98180,98181],{"class":504},"       [11, 12]])\n",[147,98183,98184],{"class":149,"line":1604},[147,98185,94200],{"class":504},[14,98187,98189],{"id":98188},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,98191,98192],{},"改变了原数组",[138,98194,98196],{"className":30652,"code":98195,"language":30654,"meta":143,"style":143},"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",[51,98197,98198,98214,98230,98234,98238,98242,98246],{"__ignoreMap":143},[147,98199,98200,98202,98204,98206,98208,98210,98212],{"class":149,"line":150},[147,98201,637],{"class":157},[147,98203,445],{"class":397},[147,98205,93274],{"class":157},[147,98207,616],{"class":448},[147,98209,777],{"class":157},[147,98211,922],{"class":448},[147,98213,407],{"class":157},[147,98215,98216,98218,98220,98222,98224,98226,98228],{"class":149,"line":312},[147,98217,98089],{"class":157},[147,98219,445],{"class":397},[147,98221,401],{"class":157},[147,98223,477],{"class":448},[147,98225,777],{"class":157},[147,98227,743],{"class":448},[147,98229,407],{"class":157},[147,98231,98232],{"class":149,"line":1454},[147,98233,93836],{"class":458},[147,98235,98236],{"class":149,"line":1469},[147,98237,94200],{"class":504},[147,98239,98240],{"class":149,"line":1475},[147,98241,97460],{"class":504},[147,98243,98244],{"class":149,"line":1489},[147,98245,97465],{"class":504},[147,98247,98248],{"class":149,"line":1495},[147,98249,94200],{"class":504},[14,98251,98253],{"id":98252},"_56-重要比较","5.6 重要比较：",[19,98255,98256],{},[29,98257],{"alt":143,"src":98258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,98260,98261,98262,98264,98265,98267],{},"口诀：NumPy 函数要么用 ",[51,98263,96235],{},"，要么用 ",[51,98266,31770],{},"，创建结构用 shape，造数据用 size",[19,98269,98270],{},[29,98271],{"alt":143,"src":98272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[308,98274,98275],{},"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":143,"searchDepth":312,"depth":312,"links":98277},[98278,98279,98280,98281,98282,98283],{"id":97799,"depth":312,"text":97800},{"id":97951,"depth":312,"text":97952},{"id":98001,"depth":312,"text":98002},{"id":98047,"depth":312,"text":98048},{"id":98188,"depth":312,"text":98189},{"id":98252,"depth":312,"text":98253},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97791,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98290,"title":98291,"body":98292,"description":321,"extension":322,"meta":99364,"navigation":324,"path":99365,"seo":99366,"stem":99367,"__hash__":99368},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98293,"toc":99358},[98294,98297,98301,98304,98307,98310,98375,98378,98418,98421,98503,98506,98511,98533,98535,98540,98545,98548,98551,98706,98709,98911,98915,98918,98921,98989,98991,98996,98999,99002,99082,99086,99089,99091,99164,99166,99171,99173,99253,99257,99260,99263,99266,99269,99272,99275,99355],[10,98295,98291],{"id":98296},"_6数组的拼接",[14,98298,98300],{"id":98299},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,98302,98303],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,98305,98306],{},"函数内部传两个数列构成的数列或者元组",[19,98308,98309],{},"①一维数组的拼接",[138,98311,98313],{"className":30652,"code":98312,"language":30654,"meta":143,"style":143},"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",[51,98314,98315,98335,98355,98360,98365,98370],{"__ignoreMap":143},[147,98316,98317,98319,98321,98323,98325,98327,98329,98331,98333],{"class":149,"line":150},[147,98318,637],{"class":157},[147,98320,445],{"class":397},[147,98322,93296],{"class":157},[147,98324,616],{"class":448},[147,98326,777],{"class":157},[147,98328,477],{"class":448},[147,98330,777],{"class":157},[147,98332,471],{"class":448},[147,98334,4931],{"class":157},[147,98336,98337,98339,98341,98343,98345,98347,98349,98351,98353],{"class":149,"line":312},[147,98338,662],{"class":157},[147,98340,445],{"class":397},[147,98342,93296],{"class":157},[147,98344,692],{"class":448},[147,98346,777],{"class":157},[147,98348,718],{"class":448},[147,98350,777],{"class":157},[147,98352,743],{"class":448},[147,98354,4931],{"class":157},[147,98356,98357],{"class":149,"line":1454},[147,98358,98359],{"class":458},"#调用concatenate进行数组拼接\n",[147,98361,98362],{"class":149,"line":1469},[147,98363,98364],{"class":157},"np.concatenate((a,b))\n",[147,98366,98367],{"class":149,"line":1475},[147,98368,98369],{"class":458},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[147,98371,98372],{"class":149,"line":1489},[147,98373,98374],{"class":458},"#np.concatenate([a,b])\n",[19,98376,98377],{},"②一维多个数组拼接",[138,98379,98381],{"className":30652,"code":98380,"language":30654,"meta":143,"style":143},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[51,98382,98383,98388,98408,98413],{"__ignoreMap":143},[147,98384,98385],{"class":149,"line":150},[147,98386,98387],{"class":458},"#也可以多个数组进行拼接\n",[147,98389,98390,98392,98394,98396,98398,98400,98402,98404,98406],{"class":149,"line":312},[147,98391,687],{"class":157},[147,98393,445],{"class":397},[147,98395,93296],{"class":157},[147,98397,845],{"class":448},[147,98399,777],{"class":157},[147,98401,871],{"class":448},[147,98403,777],{"class":157},[147,98405,922],{"class":448},[147,98407,4931],{"class":157},[147,98409,98410],{"class":149,"line":1454},[147,98411,98412],{"class":157},"c\n",[147,98414,98415],{"class":149,"line":1469},[147,98416,98417],{"class":157},"np.concatenate((a,b,c))\n",[19,98419,98420],{},"③二维数组拼接",[138,98422,98424],{"className":30652,"code":98423,"language":30654,"meta":143,"style":143},"#二维数组使用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",[51,98425,98426,98431,98455,98480,98485,98490],{"__ignoreMap":143},[147,98427,98428],{"class":149,"line":150},[147,98429,98430],{"class":458},"#二维数组使用concatenate进行拼接\n",[147,98432,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453],{"class":149,"line":312},[147,98434,93578],{"class":157},[147,98436,445],{"class":397},[147,98438,93274],{"class":157},[147,98440,616],{"class":448},[147,98442,777],{"class":157},[147,98444,922],{"class":448},[147,98446,93279],{"class":157},[147,98448,471],{"class":448},[147,98450,777],{"class":157},[147,98452,692],{"class":448},[147,98454,407],{"class":157},[147,98456,98457,98460,98462,98464,98466,98468,98470,98472,98474,98476,98478],{"class":149,"line":1454},[147,98458,98459],{"class":157},"bb",[147,98461,445],{"class":397},[147,98463,93274],{"class":157},[147,98465,736],{"class":448},[147,98467,777],{"class":157},[147,98469,1041],{"class":448},[147,98471,93279],{"class":157},[147,98473,471],{"class":448},[147,98475,777],{"class":157},[147,98477,692],{"class":448},[147,98479,407],{"class":157},[147,98481,98482],{"class":149,"line":1469},[147,98483,98484],{"class":458},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[147,98486,98487],{"class":149,"line":1475},[147,98488,98489],{"class":458},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[147,98491,98492,98495,98497,98499,98501],{"class":149,"line":1489},[147,98493,98494],{"class":157},"np.concatenate((aa,bb),",[147,98496,47788],{"class":5490},[147,98498,445],{"class":397},[147,98500,590],{"class":448},[147,98502,407],{"class":157},[19,98504,98505],{},"结果：",[19,98507,98508],{},[29,98509],{"alt":143,"src":98510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[138,98512,98514],{"className":30652,"code":98513,"language":30654,"meta":143,"style":143},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[51,98515,98516,98521],{"__ignoreMap":143},[147,98517,98518],{"class":149,"line":150},[147,98519,98520],{"class":458},"#指定axis为1进行拼接\n",[147,98522,98523,98525,98527,98529,98531],{"class":149,"line":312},[147,98524,98494],{"class":157},[147,98526,47788],{"class":5490},[147,98528,445],{"class":397},[147,98530,616],{"class":448},[147,98532,407],{"class":157},[19,98534,98505],{},[19,98536,98537],{},[29,98538],{"alt":143,"src":98539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,98541,98542],{},[234,98543,98544],{},"二维数组总结：0竖着方向，1横着方向",[19,98546,98547],{},"④三维数组拼接",[19,98549,98550],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[138,98552,98554],{"className":30652,"code":98553,"language":30654,"meta":143,"style":143},"#两个三行六列\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",[51,98555,98556,98561,98589,98619,98624,98641,98646,98651,98656,98673,98678,98683,98688,98701],{"__ignoreMap":143},[147,98557,98558],{"class":149,"line":150},[147,98559,98560],{"class":458},"#两个三行六列\n",[147,98562,98563,98565,98567,98569,98571,98573,98575,98577,98579,98581,98583,98585,98587],{"class":149,"line":312},[147,98564,95793],{"class":157},[147,98566,445],{"class":397},[147,98568,93274],{"class":157},[147,98570,616],{"class":448},[147,98572,777],{"class":157},[147,98574,724],{"class":448},[147,98576,93279],{"class":157},[147,98578,477],{"class":448},[147,98580,777],{"class":157},[147,98582,471],{"class":448},[147,98584,777],{"class":157},[147,98586,743],{"class":448},[147,98588,407],{"class":157},[147,98590,98591,98594,98596,98598,98600,98602,98605,98607,98609,98611,98613,98615,98617],{"class":149,"line":1454},[147,98592,98593],{"class":157},"bbb",[147,98595,445],{"class":397},[147,98597,93274],{"class":157},[147,98599,736],{"class":448},[147,98601,777],{"class":157},[147,98603,98604],{"class":448},"137",[147,98606,93279],{"class":157},[147,98608,477],{"class":448},[147,98610,777],{"class":157},[147,98612,471],{"class":448},[147,98614,777],{"class":157},[147,98616,743],{"class":448},[147,98618,407],{"class":157},[147,98620,98621],{"class":149,"line":1469},[147,98622,98623],{"class":458},"#axis=0\n",[147,98625,98626,98628,98630,98633,98635,98637,98639],{"class":149,"line":1475},[147,98627,1094],{"class":157},[147,98629,445],{"class":397},[147,98631,98632],{"class":157},"np.concatenate((aaa,bbb),",[147,98634,47788],{"class":5490},[147,98636,445],{"class":397},[147,98638,590],{"class":448},[147,98640,407],{"class":157},[147,98642,98643],{"class":149,"line":1489},[147,98644,98645],{"class":157},"s.shape\n",[147,98647,98648],{"class":149,"line":1495},[147,98649,98650],{"class":458},"#输出：(4,3,6)\n",[147,98652,98653],{"class":149,"line":1586},[147,98654,98655],{"class":458},"#axis=1\n",[147,98657,98658,98661,98663,98665,98667,98669,98671],{"class":149,"line":1592},[147,98659,98660],{"class":157},"ss",[147,98662,445],{"class":397},[147,98664,98632],{"class":157},[147,98666,47788],{"class":5490},[147,98668,445],{"class":397},[147,98670,616],{"class":448},[147,98672,407],{"class":157},[147,98674,98675],{"class":149,"line":1604},[147,98676,98677],{"class":157},"ss.shape\n",[147,98679,98680],{"class":149,"line":1886},[147,98681,98682],{"class":458},"#输出：(2,6,6)\n",[147,98684,98685],{"class":149,"line":1891},[147,98686,98687],{"class":458},"#axis=2\n",[147,98689,98690,98692,98694,98696,98698],{"class":149,"line":1897},[147,98691,98632],{"class":157},[147,98693,47788],{"class":5490},[147,98695,445],{"class":397},[147,98697,477],{"class":448},[147,98699,98700],{"class":157},").shape\n",[147,98702,98703],{"class":149,"line":1902},[147,98704,98705],{"class":458},"#输出：（2，3，12）\n",[19,98707,98708],{},"⑤四维数组拼接",[138,98710,98712],{"className":30652,"code":98711,"language":30654,"meta":143,"style":143},"#两个三行六列\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",[51,98713,98714,98718,98746,98774,98799,98825,98829,98842,98847,98851,98863,98868,98872,98884,98889,98894,98906],{"__ignoreMap":143},[147,98715,98716],{"class":149,"line":150},[147,98717,98560],{"class":458},[147,98719,98720,98722,98724,98726,98728,98730,98732,98734,98736,98738,98740,98742,98744],{"class":149,"line":312},[147,98721,95793],{"class":157},[147,98723,445],{"class":397},[147,98725,93274],{"class":157},[147,98727,616],{"class":448},[147,98729,777],{"class":157},[147,98731,724],{"class":448},[147,98733,93279],{"class":157},[147,98735,477],{"class":448},[147,98737,777],{"class":157},[147,98739,471],{"class":448},[147,98741,777],{"class":157},[147,98743,743],{"class":448},[147,98745,407],{"class":157},[147,98747,98748,98750,98752,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772],{"class":149,"line":1454},[147,98749,98593],{"class":157},[147,98751,445],{"class":397},[147,98753,93274],{"class":157},[147,98755,736],{"class":448},[147,98757,777],{"class":157},[147,98759,98604],{"class":448},[147,98761,93279],{"class":157},[147,98763,477],{"class":448},[147,98765,777],{"class":157},[147,98767,471],{"class":448},[147,98769,777],{"class":157},[147,98771,743],{"class":448},[147,98773,407],{"class":157},[147,98775,98776,98779,98781,98783,98785,98787,98789,98791,98793,98795,98797],{"class":149,"line":1469},[147,98777,98778],{"class":157},"aaaa",[147,98780,445],{"class":397},[147,98782,97942],{"class":157},[147,98784,477],{"class":448},[147,98786,777],{"class":157},[147,98788,471],{"class":448},[147,98790,777],{"class":157},[147,98792,471],{"class":448},[147,98794,777],{"class":157},[147,98796,477],{"class":448},[147,98798,407],{"class":157},[147,98800,98801,98804,98806,98809,98811,98813,98815,98817,98819,98821,98823],{"class":149,"line":1475},[147,98802,98803],{"class":157},"bbbb",[147,98805,445],{"class":397},[147,98807,98808],{"class":157},"bbb.reshape(",[147,98810,477],{"class":448},[147,98812,777],{"class":157},[147,98814,471],{"class":448},[147,98816,777],{"class":157},[147,98818,471],{"class":448},[147,98820,777],{"class":157},[147,98822,477],{"class":448},[147,98824,407],{"class":157},[147,98826,98827],{"class":149,"line":1489},[147,98828,98623],{"class":458},[147,98830,98831,98834,98836,98838,98840],{"class":149,"line":1495},[147,98832,98833],{"class":157},"np.concatenate((aaaa,bbbb),",[147,98835,47788],{"class":5490},[147,98837,445],{"class":397},[147,98839,590],{"class":448},[147,98841,98700],{"class":157},[147,98843,98844],{"class":149,"line":1586},[147,98845,98846],{"class":458},"#结果：（4，3，3，2）\n",[147,98848,98849],{"class":149,"line":1592},[147,98850,98655],{"class":458},[147,98852,98853,98855,98857,98859,98861],{"class":149,"line":1604},[147,98854,98833],{"class":157},[147,98856,47788],{"class":5490},[147,98858,445],{"class":397},[147,98860,616],{"class":448},[147,98862,98700],{"class":157},[147,98864,98865],{"class":149,"line":1886},[147,98866,98867],{"class":458},"#结果：（2，6，3，2）\n",[147,98869,98870],{"class":149,"line":1891},[147,98871,98687],{"class":458},[147,98873,98874,98876,98878,98880,98882],{"class":149,"line":1897},[147,98875,98833],{"class":157},[147,98877,47788],{"class":5490},[147,98879,445],{"class":397},[147,98881,477],{"class":448},[147,98883,98700],{"class":157},[147,98885,98886],{"class":149,"line":1902},[147,98887,98888],{"class":458},"#结果：（2，3，6，2）\n",[147,98890,98891],{"class":149,"line":1916},[147,98892,98893],{"class":458},"#axis=3\n",[147,98895,98896,98898,98900,98902,98904],{"class":149,"line":1921},[147,98897,98833],{"class":157},[147,98899,47788],{"class":5490},[147,98901,445],{"class":397},[147,98903,471],{"class":448},[147,98905,98700],{"class":157},[147,98907,98908],{"class":149,"line":1927},[147,98909,98910],{"class":458},"#结果：（2，3，3，4）\n",[14,98912,98914],{"id":98913},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,98916,98917],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,98919,98920],{},"①二维数组",[138,98922,98924],{"className":30652,"code":98923,"language":30654,"meta":143,"style":143},"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",[51,98925,98926,98950,98974,98979,98984],{"__ignoreMap":143},[147,98927,98928,98930,98932,98934,98936,98938,98940,98942,98944,98946,98948],{"class":149,"line":150},[147,98929,93578],{"class":157},[147,98931,445],{"class":397},[147,98933,93274],{"class":157},[147,98935,616],{"class":448},[147,98937,777],{"class":157},[147,98939,922],{"class":448},[147,98941,93279],{"class":157},[147,98943,471],{"class":448},[147,98945,777],{"class":157},[147,98947,692],{"class":448},[147,98949,407],{"class":157},[147,98951,98952,98954,98956,98958,98960,98962,98964,98966,98968,98970,98972],{"class":149,"line":312},[147,98953,98459],{"class":157},[147,98955,445],{"class":397},[147,98957,93274],{"class":157},[147,98959,736],{"class":448},[147,98961,777],{"class":157},[147,98963,1041],{"class":448},[147,98965,93279],{"class":157},[147,98967,471],{"class":448},[147,98969,777],{"class":157},[147,98971,692],{"class":448},[147,98973,407],{"class":157},[147,98975,98976],{"class":149,"line":1454},[147,98977,98978],{"class":157},"np.hstack((aa,bb))\n",[147,98980,98981],{"class":149,"line":1469},[147,98982,98983],{"class":458},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[147,98985,98986],{"class":149,"line":1475},[147,98987,98988],{"class":458},"#np.hstack([aa,bb])\n",[19,98990,98505],{},[19,98992,98993],{},[29,98994],{"alt":143,"src":98995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,98997,98998],{},"等效于concatenate()函数中axis=1时的情况",[19,99000,99001],{},"②三维数组",[138,99003,99005],{"className":30652,"code":99004,"language":30654,"meta":143,"style":143},"#两个三行六列\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",[51,99006,99007,99011,99039,99067,99072,99077],{"__ignoreMap":143},[147,99008,99009],{"class":149,"line":150},[147,99010,98560],{"class":458},[147,99012,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035,99037],{"class":149,"line":312},[147,99014,95793],{"class":157},[147,99016,445],{"class":397},[147,99018,93274],{"class":157},[147,99020,616],{"class":448},[147,99022,777],{"class":157},[147,99024,724],{"class":448},[147,99026,93279],{"class":157},[147,99028,477],{"class":448},[147,99030,777],{"class":157},[147,99032,471],{"class":448},[147,99034,777],{"class":157},[147,99036,743],{"class":448},[147,99038,407],{"class":157},[147,99040,99041,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063,99065],{"class":149,"line":1454},[147,99042,98593],{"class":157},[147,99044,445],{"class":397},[147,99046,93274],{"class":157},[147,99048,736],{"class":448},[147,99050,777],{"class":157},[147,99052,98604],{"class":448},[147,99054,93279],{"class":157},[147,99056,477],{"class":448},[147,99058,777],{"class":157},[147,99060,471],{"class":448},[147,99062,777],{"class":157},[147,99064,743],{"class":448},[147,99066,407],{"class":157},[147,99068,99069],{"class":149,"line":1469},[147,99070,99071],{"class":458},"#使用hstack\n",[147,99073,99074],{"class":149,"line":1475},[147,99075,99076],{"class":157},"np.hstack((aaa,bbb)).shape\n",[147,99078,99079],{"class":149,"line":1489},[147,99080,99081],{"class":458},"#输出：（2，6，6）\n",[14,99083,99085],{"id":99084},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,99087,99088],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,99090,98920],{},[138,99092,99094],{"className":30652,"code":99093,"language":30654,"meta":143,"style":143},"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",[51,99095,99096,99120,99144,99149,99154,99159],{"__ignoreMap":143},[147,99097,99098,99100,99102,99104,99106,99108,99110,99112,99114,99116,99118],{"class":149,"line":150},[147,99099,93578],{"class":157},[147,99101,445],{"class":397},[147,99103,93274],{"class":157},[147,99105,616],{"class":448},[147,99107,777],{"class":157},[147,99109,922],{"class":448},[147,99111,93279],{"class":157},[147,99113,471],{"class":448},[147,99115,777],{"class":157},[147,99117,692],{"class":448},[147,99119,407],{"class":157},[147,99121,99122,99124,99126,99128,99130,99132,99134,99136,99138,99140,99142],{"class":149,"line":312},[147,99123,98459],{"class":157},[147,99125,445],{"class":397},[147,99127,93274],{"class":157},[147,99129,736],{"class":448},[147,99131,777],{"class":157},[147,99133,1041],{"class":448},[147,99135,93279],{"class":157},[147,99137,471],{"class":448},[147,99139,777],{"class":157},[147,99141,692],{"class":448},[147,99143,407],{"class":157},[147,99145,99146],{"class":149,"line":1454},[147,99147,99148],{"class":458},"#vstack 垂直方向进行堆叠\n",[147,99150,99151],{"class":149,"line":1469},[147,99152,99153],{"class":157},"np.vstack((aa,bb))\n",[147,99155,99156],{"class":149,"line":1475},[147,99157,99158],{"class":458},"#与hstack传的参数类似，等价于：\n",[147,99160,99161],{"class":149,"line":1489},[147,99162,99163],{"class":157},"np.vstack([aa,bb])\n",[19,99165,98505],{},[19,99167,99168],{},[29,99169],{"alt":143,"src":99170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,99172,99001],{},[138,99174,99176],{"className":30652,"code":99175,"language":30654,"meta":143,"style":143},"#两个三行六列\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",[51,99177,99178,99182,99210,99238,99243,99248],{"__ignoreMap":143},[147,99179,99180],{"class":149,"line":150},[147,99181,98560],{"class":458},[147,99183,99184,99186,99188,99190,99192,99194,99196,99198,99200,99202,99204,99206,99208],{"class":149,"line":312},[147,99185,95793],{"class":157},[147,99187,445],{"class":397},[147,99189,93274],{"class":157},[147,99191,616],{"class":448},[147,99193,777],{"class":157},[147,99195,724],{"class":448},[147,99197,93279],{"class":157},[147,99199,477],{"class":448},[147,99201,777],{"class":157},[147,99203,471],{"class":448},[147,99205,777],{"class":157},[147,99207,743],{"class":448},[147,99209,407],{"class":157},[147,99211,99212,99214,99216,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236],{"class":149,"line":1454},[147,99213,98593],{"class":157},[147,99215,445],{"class":397},[147,99217,93274],{"class":157},[147,99219,736],{"class":448},[147,99221,777],{"class":157},[147,99223,98604],{"class":448},[147,99225,93279],{"class":157},[147,99227,477],{"class":448},[147,99229,777],{"class":157},[147,99231,471],{"class":448},[147,99233,777],{"class":157},[147,99235,743],{"class":448},[147,99237,407],{"class":157},[147,99239,99240],{"class":149,"line":1469},[147,99241,99242],{"class":458},"#使用vstack\n",[147,99244,99245],{"class":149,"line":1475},[147,99246,99247],{"class":157},"np.vstack((aaa,bbb)).shape\n",[147,99249,99250],{"class":149,"line":1489},[147,99251,99252],{"class":458},"#输出：（4，3，6）\n",[14,99254,99256],{"id":99255},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,99258,99259],{},"该方法是三维数组特有的方法",[19,99261,99262],{},"也就是说",[19,99264,99265],{},"一维数组拼接方法用：concatenate()",[19,99267,99268],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,99270,99271],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,99273,99274],{},"四维数组及多维数组只能用concatenate进行拼接",[138,99276,99278],{"className":30652,"code":99277,"language":30654,"meta":143,"style":143},"#两个三行六列\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",[51,99279,99280,99284,99312,99340,99345,99350],{"__ignoreMap":143},[147,99281,99282],{"class":149,"line":150},[147,99283,98560],{"class":458},[147,99285,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310],{"class":149,"line":312},[147,99287,95793],{"class":157},[147,99289,445],{"class":397},[147,99291,93274],{"class":157},[147,99293,616],{"class":448},[147,99295,777],{"class":157},[147,99297,724],{"class":448},[147,99299,93279],{"class":157},[147,99301,477],{"class":448},[147,99303,777],{"class":157},[147,99305,471],{"class":448},[147,99307,777],{"class":157},[147,99309,743],{"class":448},[147,99311,407],{"class":157},[147,99313,99314,99316,99318,99320,99322,99324,99326,99328,99330,99332,99334,99336,99338],{"class":149,"line":1454},[147,99315,98593],{"class":157},[147,99317,445],{"class":397},[147,99319,93274],{"class":157},[147,99321,736],{"class":448},[147,99323,777],{"class":157},[147,99325,98604],{"class":448},[147,99327,93279],{"class":157},[147,99329,477],{"class":448},[147,99331,777],{"class":157},[147,99333,471],{"class":448},[147,99335,777],{"class":157},[147,99337,743],{"class":448},[147,99339,407],{"class":157},[147,99341,99342],{"class":149,"line":1469},[147,99343,99344],{"class":458},"#使用dstack\n",[147,99346,99347],{"class":149,"line":1475},[147,99348,99349],{"class":157},"np.dstack((aaa,bbb)).shape\n",[147,99351,99352],{"class":149,"line":1489},[147,99353,99354],{"class":458},"#结果：（2，3，12）\n",[308,99356,99357],{},"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":143,"searchDepth":312,"depth":312,"links":99359},[99360,99361,99362,99363],{"id":98299,"depth":312,"text":98300},{"id":98913,"depth":312,"text":98914},{"id":99084,"depth":312,"text":99085},{"id":99255,"depth":312,"text":99256},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98291,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99370,"title":99371,"body":99372,"description":321,"extension":322,"meta":99647,"navigation":324,"path":99648,"seo":99649,"stem":99650,"__hash__":99651},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99373,"toc":99645},[99374,99377,99380,99474,99477,99480,99483,99486,99489,99492,99495,99498,99642],[10,99375,99371],{"id":99376},"_7数组转置",[19,99378,99379],{},"使用transpose()函数",[138,99381,99383],{"className":30652,"code":99382,"language":30654,"meta":143,"style":143},"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",[51,99384,99385,99395,99419,99424,99429,99434,99439,99447,99451,99455,99460,99465,99470],{"__ignoreMap":143},[147,99386,99387,99389,99391,99393],{"class":149,"line":150},[147,99388,30666],{"class":397},[147,99390,31654],{"class":157},[147,99392,31657],{"class":397},[147,99394,31660],{"class":157},[147,99396,99397,99399,99401,99403,99405,99407,99409,99411,99413,99415,99417],{"class":149,"line":312},[147,99398,637],{"class":157},[147,99400,445],{"class":397},[147,99402,31991],{"class":157},[147,99404,616],{"class":448},[147,99406,777],{"class":157},[147,99408,922],{"class":448},[147,99410,93279],{"class":157},[147,99412,692],{"class":448},[147,99414,777],{"class":157},[147,99416,471],{"class":448},[147,99418,407],{"class":157},[147,99420,99421],{"class":149,"line":1454},[147,99422,99423],{"class":458},"#二维数组转置\n",[147,99425,99426],{"class":149,"line":1469},[147,99427,99428],{"class":458},"#调用transpose()函数\n",[147,99430,99431],{"class":149,"line":1475},[147,99432,99433],{"class":157},"a.transpose()\n",[147,99435,99436],{"class":149,"line":1489},[147,99437,99438],{"class":458},"#对于二维数组也可以采用.T来实现\n",[147,99440,99441,99444],{"class":149,"line":1495},[147,99442,99443],{"class":157},"a.T",[147,99445,99446],{"class":458},"#与上述代码一样\n",[147,99448,99449],{"class":149,"line":1586},[147,99450,93836],{"class":458},[147,99452,99453],{"class":149,"line":1592},[147,99454,94200],{"class":504},[147,99456,99457],{"class":149,"line":1604},[147,99458,99459],{"class":504},"array([[ 1,  4,  7, 10],\n",[147,99461,99462],{"class":149,"line":1886},[147,99463,99464],{"class":504},"       [ 2,  5,  8, 11],\n",[147,99466,99467],{"class":149,"line":1891},[147,99468,99469],{"class":504},"       [ 3,  6,  9, 12]])\n",[147,99471,99472],{"class":149,"line":1897},[147,99473,94200],{"class":504},[19,99475,99476],{},"也可以使用np.transpose()的形式",[19,99478,99479],{},"#多维数组进行转置 np.transpose()",[19,99481,99482],{},"#对二维数组也可以使用np.transpose()进行转置",[19,99484,99485],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,99487,99488],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,99490,99491],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,99493,99494],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,99496,99497],{},"四维及以上的数组也是一样的道理",[138,99499,99501],{"className":30652,"code":99500,"language":30654,"meta":143,"style":143},"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",[51,99502,99503,99531,99536,99541,99546,99564,99569,99601,99606,99611,99616,99637],{"__ignoreMap":143},[147,99504,99505,99507,99509,99511,99513,99515,99517,99519,99521,99523,99525,99527,99529],{"class":149,"line":150},[147,99506,1219],{"class":157},[147,99508,445],{"class":397},[147,99510,93274],{"class":157},[147,99512,616],{"class":448},[147,99514,777],{"class":157},[147,99516,724],{"class":448},[147,99518,93279],{"class":157},[147,99520,471],{"class":448},[147,99522,777],{"class":157},[147,99524,743],{"class":448},[147,99526,777],{"class":157},[147,99528,477],{"class":448},[147,99530,407],{"class":157},[147,99532,99533],{"class":149,"line":312},[147,99534,99535],{"class":157},"x.shape\n",[147,99537,99538],{"class":149,"line":1454},[147,99539,99540],{"class":458},"#结果：（3,6,2）\n",[147,99542,99543],{"class":149,"line":1469},[147,99544,99545],{"class":458},"#使用np.transpose()进行转置 变为(2,6,3)\n",[147,99547,99548,99551,99553,99555,99557,99559,99561],{"class":149,"line":1475},[147,99549,99550],{"class":157},"np.transpose(x,(",[147,99552,477],{"class":448},[147,99554,777],{"class":157},[147,99556,616],{"class":448},[147,99558,777],{"class":157},[147,99560,590],{"class":448},[147,99562,99563],{"class":157},")).shape\n",[147,99565,99566],{"class":149,"line":1489},[147,99567,99568],{"class":458},"#结果：(2,6,3)\n",[147,99570,99571,99573,99575,99577,99579,99581,99583,99585,99587,99589,99591,99593,99595,99597,99599],{"class":149,"line":1495},[147,99572,98778],{"class":157},[147,99574,445],{"class":397},[147,99576,93274],{"class":157},[147,99578,616],{"class":448},[147,99580,777],{"class":157},[147,99582,724],{"class":448},[147,99584,93279],{"class":157},[147,99586,471],{"class":448},[147,99588,777],{"class":157},[147,99590,477],{"class":448},[147,99592,777],{"class":157},[147,99594,616],{"class":448},[147,99596,777],{"class":157},[147,99598,743],{"class":448},[147,99600,407],{"class":157},[147,99602,99603],{"class":149,"line":1586},[147,99604,99605],{"class":157},"aaaa.shape\n",[147,99607,99608],{"class":149,"line":1592},[147,99609,99610],{"class":458},"#结果：（3，2，1，6）\n",[147,99612,99613],{"class":149,"line":1604},[147,99614,99615],{"class":458},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[147,99617,99618,99621,99623,99625,99627,99629,99631,99633,99635],{"class":149,"line":1886},[147,99619,99620],{"class":157},"np.transpose(aaaa,(",[147,99622,616],{"class":448},[147,99624,777],{"class":157},[147,99626,477],{"class":448},[147,99628,777],{"class":157},[147,99630,590],{"class":448},[147,99632,777],{"class":157},[147,99634,471],{"class":448},[147,99636,99563],{"class":157},[147,99638,99639],{"class":149,"line":1891},[147,99640,99641],{"class":458},"#结果：(2,1,3,6)\n",[308,99643,99644],{},"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":143,"searchDepth":312,"depth":312,"links":99646},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99371,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99653,"title":99654,"body":99655,"description":321,"extension":322,"meta":100389,"navigation":324,"path":100390,"seo":100391,"stem":100392,"__hash__":100393},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99656,"toc":100387},[99657,99660,99663,99666,99669,99672,99675,99678,99681,99790,99793,99796,100384],[10,99658,99654],{"id":99659},"_8数组分割",[19,99661,99662],{},"split分割",[19,99664,99665],{},"numpy.split(ary,indics_or_sections,axis)",[19,99667,99668],{},"解释：",[19,99670,99671],{},"ary:被分割的数组",[19,99673,99674],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,99676,99677],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,99679,99680],{},"①一维数组的分割",[138,99682,99684],{"className":30652,"code":99683,"language":30654,"meta":143,"style":143},"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",[51,99685,99686,99702,99707,99716,99720,99725,99733,99737,99742,99747,99760,99764,99769,99781,99785],{"__ignoreMap":143},[147,99687,99688,99690,99692,99694,99696,99698,99700],{"class":149,"line":150},[147,99689,637],{"class":157},[147,99691,445],{"class":397},[147,99693,93274],{"class":157},[147,99695,616],{"class":448},[147,99697,777],{"class":157},[147,99699,819],{"class":448},[147,99701,407],{"class":157},[147,99703,99704],{"class":149,"line":312},[147,99705,99706],{"class":458},"#如果传入整数，必须能够平分，否则会报错\n",[147,99708,99709,99712,99714],{"class":149,"line":1454},[147,99710,99711],{"class":157},"np.split(a,",[147,99713,477],{"class":448},[147,99715,407],{"class":157},[147,99717,99718],{"class":149,"line":1469},[147,99719,93836],{"class":458},[147,99721,99722],{"class":149,"line":1475},[147,99723,99724],{"class":458},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[147,99726,99727,99729,99731],{"class":149,"line":1489},[147,99728,99711],{"class":157},[147,99730,692],{"class":448},[147,99732,407],{"class":157},[147,99734,99735],{"class":149,"line":1495},[147,99736,93836],{"class":458},[147,99738,99739],{"class":149,"line":1586},[147,99740,99741],{"class":458},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[147,99743,99744],{"class":149,"line":1592},[147,99745,99746],{"class":458},"#传入数组\n",[147,99748,99749,99752,99754,99756,99758],{"class":149,"line":1604},[147,99750,99751],{"class":157},"np.split(a,[",[147,99753,471],{"class":448},[147,99755,777],{"class":157},[147,99757,718],{"class":448},[147,99759,4931],{"class":157},[147,99761,99762],{"class":149,"line":1886},[147,99763,93836],{"class":458},[147,99765,99766],{"class":149,"line":1891},[147,99767,99768],{"class":458},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[147,99770,99771,99773,99775,99777,99779],{"class":149,"line":1897},[147,99772,99751],{"class":157},[147,99774,718],{"class":448},[147,99776,777],{"class":157},[147,99778,768],{"class":448},[147,99780,4931],{"class":157},[147,99782,99783],{"class":149,"line":1902},[147,99784,93836],{"class":458},[147,99786,99787],{"class":149,"line":1916},[147,99788,99789],{"class":458},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,99791,99792],{},"②二维数组的分割",[19,99794,99795],{},"使用split()",[138,99797,99799],{"className":30652,"code":99798,"language":30654,"meta":143,"style":143},"#二维数组分割\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",[51,99800,99801,99806,99830,99835,99844,99848,99852,99857,99862,99867,99872,99877,99882,99887,99891,99904,99908,99912,99916,99920,99924,99929,99934,99939,99943,99948,99964,99968,99972,99977,99982,99987,99992,99997,100002,100007,100012,100017,100022,100027,100032,100037,100042,100047,100052,100057,100062,100066,100070,100090,100094,100098,100103,100108,100113,100118,100123,100128,100133,100138,100143,100148,100153,100158,100163,100168,100173,100178,100183,100188,100192,100197,100206,100210,100214,100218,100222,100226,100230,100234,100238,100242,100251,100255,100259,100263,100267,100271,100275,100279,100283,100287,100291,100295,100299,100303,100307,100311,100315,100319,100323,100327,100331,100335,100348,100352,100356,100360,100364,100368,100372,100376,100380],{"__ignoreMap":143},[147,99802,99803],{"class":149,"line":150},[147,99804,99805],{"class":458},"#二维数组分割\n",[147,99807,99808,99810,99812,99814,99816,99818,99820,99822,99824,99826,99828],{"class":149,"line":312},[147,99809,93578],{"class":157},[147,99811,445],{"class":397},[147,99813,93274],{"class":157},[147,99815,616],{"class":448},[147,99817,777],{"class":157},[147,99819,724],{"class":448},[147,99821,93279],{"class":157},[147,99823,743],{"class":448},[147,99825,777],{"class":157},[147,99827,743],{"class":448},[147,99829,407],{"class":157},[147,99831,99832],{"class":149,"line":1454},[147,99833,99834],{"class":458},"#默认axis=0  传入整数平均分,按行来的\n",[147,99836,99837,99840,99842],{"class":149,"line":1469},[147,99838,99839],{"class":157},"np.split(aa,",[147,99841,471],{"class":448},[147,99843,407],{"class":157},[147,99845,99846],{"class":149,"line":1475},[147,99847,96036],{"class":458},[147,99849,99850],{"class":149,"line":1489},[147,99851,94200],{"class":504},[147,99853,99854],{"class":149,"line":1495},[147,99855,99856],{"class":504},"[array([[ 1,  2,  3,  4,  5,  6],\n",[147,99858,99859],{"class":149,"line":1586},[147,99860,99861],{"class":504},"        [ 7,  8,  9, 10, 11, 12]]),\n",[147,99863,99864],{"class":149,"line":1592},[147,99865,99866],{"class":504}," array([[13, 14, 15, 16, 17, 18],\n",[147,99868,99869],{"class":149,"line":1604},[147,99870,99871],{"class":504},"        [19, 20, 21, 22, 23, 24]]),\n",[147,99873,99874],{"class":149,"line":1886},[147,99875,99876],{"class":504}," array([[25, 26, 27, 28, 29, 30],\n",[147,99878,99879],{"class":149,"line":1891},[147,99880,99881],{"class":504},"        [31, 32, 33, 34, 35, 36]])]\n",[147,99883,99884],{"class":149,"line":1897},[147,99885,99886],{"class":504}," '''\n",[147,99888,99889],{"class":149,"line":1902},[147,99890,99746],{"class":458},[147,99892,99893,99896,99898,99900,99902],{"class":149,"line":1916},[147,99894,99895],{"class":157},"np.split(aa,[",[147,99897,477],{"class":448},[147,99899,777],{"class":157},[147,99901,718],{"class":448},[147,99903,4931],{"class":157},[147,99905,99906],{"class":149,"line":1921},[147,99907,96036],{"class":458},[147,99909,99910],{"class":149,"line":1927},[147,99911,94200],{"class":504},[147,99913,99914],{"class":149,"line":1948},[147,99915,99856],{"class":504},[147,99917,99918],{"class":149,"line":1953},[147,99919,99861],{"class":504},[147,99921,99922],{"class":149,"line":1967},[147,99923,99866],{"class":504},[147,99925,99926],{"class":149,"line":1972},[147,99927,99928],{"class":504},"        [19, 20, 21, 22, 23, 24],\n",[147,99930,99931],{"class":149,"line":2001},[147,99932,99933],{"class":504},"        [25, 26, 27, 28, 29, 30]]),\n",[147,99935,99936],{"class":149,"line":2006},[147,99937,99938],{"class":504}," array([[31, 32, 33, 34, 35, 36]])]\n",[147,99940,99941],{"class":149,"line":2023},[147,99942,94200],{"class":504},[147,99944,99945],{"class":149,"line":2028},[147,99946,99947],{"class":458},"#axis=1 按照列来分\n",[147,99949,99950,99952,99954,99956,99958,99960,99962],{"class":149,"line":2033},[147,99951,99839],{"class":157},[147,99953,471],{"class":448},[147,99955,777],{"class":157},[147,99957,47788],{"class":5490},[147,99959,445],{"class":397},[147,99961,616],{"class":448},[147,99963,407],{"class":157},[147,99965,99966],{"class":149,"line":2038},[147,99967,96036],{"class":458},[147,99969,99970],{"class":149,"line":2052},[147,99971,94200],{"class":504},[147,99973,99974],{"class":149,"line":2057},[147,99975,99976],{"class":504},"[array([[ 1,  2],\n",[147,99978,99979],{"class":149,"line":2851},[147,99980,99981],{"class":504},"        [ 7,  8],\n",[147,99983,99984],{"class":149,"line":2865},[147,99985,99986],{"class":504},"        [13, 14],\n",[147,99988,99989],{"class":149,"line":2873},[147,99990,99991],{"class":504},"        [19, 20],\n",[147,99993,99994],{"class":149,"line":2878},[147,99995,99996],{"class":504},"        [25, 26],\n",[147,99998,99999],{"class":149,"line":2884},[147,100000,100001],{"class":504},"        [31, 32]]),\n",[147,100003,100004],{"class":149,"line":2890},[147,100005,100006],{"class":504}," array([[ 3,  4],\n",[147,100008,100009],{"class":149,"line":2895},[147,100010,100011],{"class":504},"        [ 9, 10],\n",[147,100013,100014],{"class":149,"line":8222},[147,100015,100016],{"class":504},"        [15, 16],\n",[147,100018,100019],{"class":149,"line":8246},[147,100020,100021],{"class":504},"        [21, 22],\n",[147,100023,100024],{"class":149,"line":8251},[147,100025,100026],{"class":504},"        [27, 28],\n",[147,100028,100029],{"class":149,"line":8257},[147,100030,100031],{"class":504},"        [33, 34]]),\n",[147,100033,100034],{"class":149,"line":8284},[147,100035,100036],{"class":504}," array([[ 5,  6],\n",[147,100038,100039],{"class":149,"line":8289},[147,100040,100041],{"class":504},"        [11, 12],\n",[147,100043,100044],{"class":149,"line":8295},[147,100045,100046],{"class":504},"        [17, 18],\n",[147,100048,100049],{"class":149,"line":8307},[147,100050,100051],{"class":504},"        [23, 24],\n",[147,100053,100054],{"class":149,"line":8319},[147,100055,100056],{"class":504},"        [29, 30],\n",[147,100058,100059],{"class":149,"line":8331},[147,100060,100061],{"class":504},"        [35, 36]])]\n",[147,100063,100064],{"class":149,"line":9990},[147,100065,99886],{"class":504},[147,100067,100068],{"class":149,"line":10015},[147,100069,99746],{"class":458},[147,100071,100072,100074,100076,100078,100080,100082,100084,100086,100088],{"class":149,"line":10038},[147,100073,99895],{"class":157},[147,100075,616],{"class":448},[147,100077,777],{"class":157},[147,100079,477],{"class":448},[147,100081,41883],{"class":157},[147,100083,47788],{"class":5490},[147,100085,445],{"class":397},[147,100087,616],{"class":448},[147,100089,407],{"class":157},[147,100091,100092],{"class":149,"line":10062},[147,100093,93836],{"class":458},[147,100095,100096],{"class":149,"line":10067},[147,100097,94200],{"class":504},[147,100099,100100],{"class":149,"line":10072},[147,100101,100102],{"class":504},"[array([[ 1],\n",[147,100104,100105],{"class":149,"line":10077},[147,100106,100107],{"class":504},"        [ 7],\n",[147,100109,100110],{"class":149,"line":10086},[147,100111,100112],{"class":504},"        [13],\n",[147,100114,100115],{"class":149,"line":10091},[147,100116,100117],{"class":504},"        [19],\n",[147,100119,100120],{"class":149,"line":10097},[147,100121,100122],{"class":504},"        [25],\n",[147,100124,100125],{"class":149,"line":10118},[147,100126,100127],{"class":504},"        [31]]),\n",[147,100129,100130],{"class":149,"line":10124},[147,100131,100132],{"class":504}," array([[ 2],\n",[147,100134,100135],{"class":149,"line":10138},[147,100136,100137],{"class":504},"        [ 8],\n",[147,100139,100140],{"class":149,"line":10144},[147,100141,100142],{"class":504},"        [14],\n",[147,100144,100145],{"class":149,"line":10171},[147,100146,100147],{"class":504},"        [20],\n",[147,100149,100150],{"class":149,"line":10180},[147,100151,100152],{"class":504},"        [26],\n",[147,100154,100155],{"class":149,"line":10186},[147,100156,100157],{"class":504},"        [32]]),\n",[147,100159,100160],{"class":149,"line":10194},[147,100161,100162],{"class":504}," array([[ 3,  4,  5,  6],\n",[147,100164,100165],{"class":149,"line":10199},[147,100166,100167],{"class":504},"        [ 9, 10, 11, 12],\n",[147,100169,100170],{"class":149,"line":16877},[147,100171,100172],{"class":504},"        [15, 16, 17, 18],\n",[147,100174,100175],{"class":149,"line":16883},[147,100176,100177],{"class":504},"        [21, 22, 23, 24],\n",[147,100179,100180],{"class":149,"line":16906},[147,100181,100182],{"class":504},"        [27, 28, 29, 30],\n",[147,100184,100185],{"class":149,"line":16912},[147,100186,100187],{"class":504},"        [33, 34, 35, 36]])]\n",[147,100189,100190],{"class":149,"line":16935},[147,100191,94200],{"class":504},[147,100193,100194],{"class":149,"line":16949},[147,100195,100196],{"class":458},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[147,100198,100199,100202,100204],{"class":149,"line":16969},[147,100200,100201],{"class":157},"np.vsplit(aa,",[147,100203,471],{"class":448},[147,100205,407],{"class":157},[147,100207,100208],{"class":149,"line":16975},[147,100209,93836],{"class":458},[147,100211,100212],{"class":149,"line":16986},[147,100213,94200],{"class":504},[147,100215,100216],{"class":149,"line":17009},[147,100217,99856],{"class":504},[147,100219,100220],{"class":149,"line":17031},[147,100221,99861],{"class":504},[147,100223,100224],{"class":149,"line":17036},[147,100225,99866],{"class":504},[147,100227,100228],{"class":149,"line":17042},[147,100229,99871],{"class":504},[147,100231,100232],{"class":149,"line":17056},[147,100233,99876],{"class":504},[147,100235,100236],{"class":149,"line":17069},[147,100237,99881],{"class":504},[147,100239,100240],{"class":149,"line":17074},[147,100241,94200],{"class":504},[147,100243,100244,100247,100249],{"class":149,"line":17088},[147,100245,100246],{"class":157},"np.hsplit(aa,",[147,100248,471],{"class":448},[147,100250,407],{"class":157},[147,100252,100253],{"class":149,"line":17093},[147,100254,93836],{"class":458},[147,100256,100257],{"class":149,"line":17099},[147,100258,94200],{"class":504},[147,100260,100261],{"class":149,"line":17104},[147,100262,99976],{"class":504},[147,100264,100265],{"class":149,"line":17118},[147,100266,99981],{"class":504},[147,100268,100269],{"class":149,"line":17123},[147,100270,99986],{"class":504},[147,100272,100273],{"class":149,"line":17128},[147,100274,99991],{"class":504},[147,100276,100277],{"class":149,"line":17142},[147,100278,99996],{"class":504},[147,100280,100281],{"class":149,"line":17154},[147,100282,100001],{"class":504},[147,100284,100285],{"class":149,"line":17159},[147,100286,100006],{"class":504},[147,100288,100289],{"class":149,"line":17172},[147,100290,100011],{"class":504},[147,100292,100293],{"class":149,"line":17177},[147,100294,100016],{"class":504},[147,100296,100297],{"class":149,"line":17182},[147,100298,100021],{"class":504},[147,100300,100301],{"class":149,"line":17187},[147,100302,100026],{"class":504},[147,100304,100305],{"class":149,"line":17200},[147,100306,100031],{"class":504},[147,100308,100309],{"class":149,"line":17205},[147,100310,100036],{"class":504},[147,100312,100313],{"class":149,"line":32907},[147,100314,100041],{"class":504},[147,100316,100317],{"class":149,"line":32913},[147,100318,100046],{"class":504},[147,100320,100321],{"class":149,"line":32919},[147,100322,100051],{"class":504},[147,100324,100325],{"class":149,"line":32925},[147,100326,100056],{"class":504},[147,100328,100329],{"class":149,"line":32931},[147,100330,100061],{"class":504},[147,100332,100333],{"class":149,"line":32942},[147,100334,94200],{"class":504},[147,100336,100337,100340,100342,100344,100346],{"class":149,"line":32948},[147,100338,100339],{"class":157},"np.vsplit(aa,[",[147,100341,477],{"class":448},[147,100343,777],{"class":157},[147,100345,718],{"class":448},[147,100347,4931],{"class":157},[147,100349,100350],{"class":149,"line":32968},[147,100351,93836],{"class":458},[147,100353,100354],{"class":149,"line":32974},[147,100355,94200],{"class":504},[147,100357,100358],{"class":149,"line":32985},[147,100359,99856],{"class":504},[147,100361,100362],{"class":149,"line":32991},[147,100363,99861],{"class":504},[147,100365,100366],{"class":149,"line":32997},[147,100367,99866],{"class":504},[147,100369,100370],{"class":149,"line":33003},[147,100371,99928],{"class":504},[147,100373,100374],{"class":149,"line":33009},[147,100375,99933],{"class":504},[147,100377,100378],{"class":149,"line":33015},[147,100379,99938],{"class":504},[147,100381,100382],{"class":149,"line":33021},[147,100383,99886],{"class":504},[308,100385,100386],{},"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":143,"searchDepth":312,"depth":312,"links":100388},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99654,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100395,"title":100396,"body":100397,"description":321,"extension":322,"meta":100891,"navigation":324,"path":100892,"seo":100893,"stem":100894,"__hash__":100895},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100398,"toc":100882},[100399,100402,100405,100430,100434,100493,100545,100549,100551,100587,100641,100643,100681,100752,100756,100761,100765,100768,100801,100804,100808,100811,100814,100817,100820,100825,100829,100832,100835,100838,100841,100846,100850,100855,100858,100879],[10,100400,100396],{"id":100401},"_9数学函数",[19,100403,100404],{},"补充回顾：python的列表推导式",[138,100406,100408],{"className":30652,"code":100407,"language":30654,"meta":143,"style":143},"[1\u002Fi for i in a]\n",[51,100409,100410],{"__ignoreMap":143},[147,100411,100412,100414,100416,100418,100421,100423,100425,100427],{"class":149,"line":150},[147,100413,1289],{"class":157},[147,100415,616],{"class":448},[147,100417,983],{"class":397},[147,100419,100420],{"class":157},"i ",[147,100422,3299],{"class":397},[147,100424,9712],{"class":157},[147,100426,26317],{"class":397},[147,100428,100429],{"class":157}," a]\n",[14,100431,100433],{"id":100432},"_91-求倒数","9.1 求倒数",[138,100435,100437],{"className":30652,"code":100436,"language":30654,"meta":143,"style":143},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[51,100438,100439,100444,100472,100484],{"__ignoreMap":143},[147,100440,100441],{"class":149,"line":150},[147,100442,100443],{"class":458},"#数组求倒数\n",[147,100445,100446,100448,100450,100452,100454,100456,100458,100460,100462,100464,100466,100468,100470],{"class":149,"line":312},[147,100447,637],{"class":157},[147,100449,445],{"class":397},[147,100451,1289],{"class":157},[147,100453,616],{"class":448},[147,100455,777],{"class":157},[147,100457,477],{"class":448},[147,100459,777],{"class":157},[147,100461,471],{"class":448},[147,100463,777],{"class":157},[147,100465,692],{"class":448},[147,100467,777],{"class":157},[147,100469,718],{"class":448},[147,100471,33520],{"class":157},[147,100473,100474,100476,100478,100481],{"class":149,"line":1454},[147,100475,662],{"class":157},[147,100477,445],{"class":397},[147,100479,100480],{"class":157},"np.array(a)",[147,100482,100483],{"class":458},"#将列表转换为数组\n",[147,100485,100486,100488,100490],{"class":149,"line":1469},[147,100487,616],{"class":448},[147,100489,983],{"class":397},[147,100491,100492],{"class":157},"b\n",[138,100494,100496],{"className":30652,"code":100495,"language":30654,"meta":143,"style":143},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[51,100497,100498,100526,100535,100540],{"__ignoreMap":143},[147,100499,100500,100502,100504,100506,100508,100510,100512,100514,100516,100518,100520,100522,100524],{"class":149,"line":150},[147,100501,637],{"class":157},[147,100503,445],{"class":397},[147,100505,1289],{"class":157},[147,100507,616],{"class":448},[147,100509,777],{"class":157},[147,100511,477],{"class":448},[147,100513,777],{"class":157},[147,100515,471],{"class":448},[147,100517,777],{"class":157},[147,100519,692],{"class":448},[147,100521,777],{"class":157},[147,100523,718],{"class":448},[147,100525,33520],{"class":157},[147,100527,100528,100530,100532],{"class":149,"line":312},[147,100529,662],{"class":157},[147,100531,445],{"class":397},[147,100533,100534],{"class":157},"np.array(a)\n",[147,100536,100537],{"class":149,"line":1454},[147,100538,100539],{"class":458},"#调用numpy中的函数reciprocal()\n",[147,100541,100542],{"class":149,"line":1469},[147,100543,100544],{"class":157},"np.reciprocal(b)\n",[14,100546,100548],{"id":100547},"_92-求平方","9.2 求平方",[19,100550,94802],{},[138,100552,100554],{"className":30652,"code":100553,"language":30654,"meta":143,"style":143},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[51,100555,100556,100561,100566,100582],{"__ignoreMap":143},[147,100557,100558],{"class":149,"line":150},[147,100559,100560],{"class":458},"#square()，求平方\n",[147,100562,100563],{"class":149,"line":312},[147,100564,100565],{"class":458},"#一维数组\n",[147,100567,100568,100570,100572,100574,100576,100578,100580],{"class":149,"line":1454},[147,100569,637],{"class":157},[147,100571,445],{"class":397},[147,100573,93274],{"class":157},[147,100575,616],{"class":448},[147,100577,777],{"class":157},[147,100579,845],{"class":448},[147,100581,407],{"class":157},[147,100583,100584],{"class":149,"line":1469},[147,100585,100586],{"class":157},"np.square(a)\n",[138,100588,100590],{"className":30652,"code":100589,"language":30654,"meta":143,"style":143},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[51,100591,100592,100597,100602,100623],{"__ignoreMap":143},[147,100593,100594],{"class":149,"line":150},[147,100595,100596],{"class":458},"#或者通过循环遍历的形式来计算\n",[147,100598,100599],{"class":149,"line":312},[147,100600,100601],{"class":458},"#这是一个列表\n",[147,100603,100604,100607,100609,100611,100613,100615,100617,100620],{"class":149,"line":1454},[147,100605,100606],{"class":157},"[i",[147,100608,854],{"class":397},[147,100610,100420],{"class":157},[147,100612,3299],{"class":397},[147,100614,9712],{"class":157},[147,100616,26317],{"class":397},[147,100618,100619],{"class":157}," a]",[147,100621,100622],{"class":458},"#这个求完之后在数列当中\n",[147,100624,100625,100628,100630,100632,100634,100636,100638],{"class":149,"line":1469},[147,100626,100627],{"class":157},"np.array([i",[147,100629,854],{"class":397},[147,100631,100420],{"class":157},[147,100633,3299],{"class":397},[147,100635,9712],{"class":157},[147,100637,26317],{"class":397},[147,100639,100640],{"class":157}," a])\n",[19,100642,93563],{},[138,100644,100646],{"className":30652,"code":100645,"language":30654,"meta":143,"style":143},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[51,100647,100648,100652,100676],{"__ignoreMap":143},[147,100649,100650],{"class":149,"line":150},[147,100651,93573],{"class":458},[147,100653,100654,100656,100658,100660,100662,100664,100666,100668,100670,100672,100674],{"class":149,"line":312},[147,100655,93578],{"class":157},[147,100657,445],{"class":397},[147,100659,93274],{"class":157},[147,100661,616],{"class":448},[147,100663,777],{"class":157},[147,100665,922],{"class":448},[147,100667,93279],{"class":157},[147,100669,692],{"class":448},[147,100671,777],{"class":157},[147,100673,471],{"class":448},[147,100675,407],{"class":157},[147,100677,100678],{"class":149,"line":1454},[147,100679,100680],{"class":157},"np.square(aa)\n",[138,100682,100684],{"className":30652,"code":100683,"language":30654,"meta":143,"style":143},"#传统的方式\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",[51,100685,100686,100691,100700,100716,100732,100747],{"__ignoreMap":143},[147,100687,100688],{"class":149,"line":150},[147,100689,100690],{"class":458},"#传统的方式\n",[147,100692,100693,100695,100697],{"class":149,"line":312},[147,100694,98459],{"class":157},[147,100696,445],{"class":397},[147,100698,100699],{"class":157},"np.empty_like(aa)\n",[147,100701,100702,100704,100706,100708,100710,100712,100714],{"class":149,"line":1454},[147,100703,3299],{"class":397},[147,100705,9712],{"class":157},[147,100707,26317],{"class":397},[147,100709,32717],{"class":448},[147,100711,401],{"class":157},[147,100713,692],{"class":448},[147,100715,31060],{"class":157},[147,100717,100718,100720,100722,100724,100726,100728,100730],{"class":149,"line":1469},[147,100719,3475],{"class":397},[147,100721,9774],{"class":157},[147,100723,26317],{"class":397},[147,100725,32717],{"class":448},[147,100727,401],{"class":157},[147,100729,471],{"class":448},[147,100731,31060],{"class":157},[147,100733,100734,100737,100739,100742,100744],{"class":149,"line":1475},[147,100735,100736],{"class":157},"        bb[i,j]",[147,100738,445],{"class":397},[147,100740,100741],{"class":157},"aa[i,j]",[147,100743,854],{"class":397},[147,100745,100746],{"class":157},"aa[i,j]\n",[147,100748,100749],{"class":149,"line":1489},[147,100750,100751],{"class":157},"bb\n",[14,100753,100755],{"id":100754},"_93-求各元素的符号","9.3 求各元素的符号",[19,100757,100758],{},[29,100759],{"alt":143,"src":100760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,100762,100764],{"id":100763},"_94-modf函数","9.4 modf函数",[19,100766,100767],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[138,100769,100771],{"className":30652,"code":100770,"language":30654,"meta":143,"style":143},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[51,100772,100773,100796],{"__ignoreMap":143},[147,100774,100775,100777,100779,100781,100783,100785,100787,100789,100791,100794],{"class":149,"line":150},[147,100776,637],{"class":157},[147,100778,445],{"class":397},[147,100780,93274],{"class":157},[147,100782,931],{"class":397},[147,100784,845],{"class":448},[147,100786,777],{"class":157},[147,100788,845],{"class":448},[147,100790,777],{"class":157},[147,100792,100793],{"class":448},"0.3",[147,100795,407],{"class":157},[147,100797,100798],{"class":149,"line":312},[147,100799,100800],{"class":157},"np.modf(a)\n",[19,100802,100803],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,100805,100807],{"id":100806},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,100809,100810],{},"np.cell()",[19,100812,100813],{},"np.floor()",[19,100815,100816],{},"np.rint()",[19,100818,100819],{},"对各元素分别向上取整、向下取整、四舍五入",[19,100821,100822],{},[29,100823],{"alt":143,"src":100824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,100826,100828],{"id":100827},"_96-around函数","9.6 around()函数",[19,100830,100831],{},"around()函数也可以实现对数的小数位数进行操作",[19,100833,100834],{},"其中的参数：",[19,100836,100837],{},"1.要传的数组",[19,100839,100840],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,100842,100843],{},[29,100844],{"alt":143,"src":100845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,100847,100849],{"id":100848},"_97-三角函数","9.7 三角函数",[19,100851,100852],{},[29,100853],{"alt":143,"src":100854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,100856,100857],{},"引入图像模块非常重要",[138,100859,100861],{"className":30652,"code":100860,"language":30654,"meta":143,"style":143},"from matplotlib import pyplot as plt\n",[51,100862,100863],{"__ignoreMap":143},[147,100864,100865,100867,100870,100872,100875,100877],{"class":149,"line":150},[147,100866,31011],{"class":397},[147,100868,100869],{"class":157}," matplotlib ",[147,100871,30666],{"class":397},[147,100873,100874],{"class":157}," pyplot ",[147,100876,31657],{"class":397},[147,100878,31711],{"class":157},[308,100880,100881],{},"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":143,"searchDepth":312,"depth":312,"links":100883},[100884,100885,100886,100887,100888,100889,100890],{"id":100432,"depth":312,"text":100433},{"id":100547,"depth":312,"text":100548},{"id":100754,"depth":312,"text":100755},{"id":100763,"depth":312,"text":100764},{"id":100806,"depth":312,"text":100807},{"id":100827,"depth":312,"text":100828},{"id":100848,"depth":312,"text":100849},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100396,"description":321},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100897,"title":100898,"body":100899,"description":321,"extension":322,"meta":100903,"navigation":324,"path":100904,"seo":100905,"stem":100906,"__hash__":100907},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100900,"toc":100901},[],{"title":143,"searchDepth":312,"depth":312,"links":100902},[],{"category":50694},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100898,"description":321},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100909,"title":100910,"body":100911,"description":143,"extension":322,"meta":102919,"navigation":324,"path":102920,"seo":102921,"stem":102922,"__hash__":102923},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100912,"toc":102895},[100913,100916,100920,100923,100926,100932,100935,100958,100961,100995,100998,101039,101043,101046,101139,101142,101186,101189,101206,101209,101223,101226,101229,101274,101277,101314,101318,101321,101327,101332,101352,101356,101359,101425,101428,101446,101450,101453,101482,101492,101498,101502,101505,101511,101522,101526,101529,101559,101562,101842,101845,101848,101859,101862,101865,101887,101894,101897,101915,101918,101921,101935,101943,101946,101972,101978,101981,101984,101994,102006,102026,102035,102055,102065,102089,102102,102116,102121,102162,102179,102204,102216,102236,102242,102287,102306,102323,102336,102352,102359,102371,102380,102415,102436,102461,102474,102498,102513,102538,102541,102562,102571,102574,102585,102589,102592,102598,102610,102617,102621,102624,102636,102639,102653,102656,102666,102676,102679,102719,102722,102726,102732,102735,102749,102753,102756,102789,102793,102796,102819,102827,102830,102836,102842,102845,102848,102876,102880,102883,102889,102892],[10,100914,100910],{"id":100915},"_1环境安装与第一个-mujoco-程序",[14,100917,100919],{"id":100918},"_1目标说明","1.目标说明",[19,100921,100922],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,100924,100925],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[138,100927,100930],{"className":100928,"code":100929,"language":5461,"meta":143},[5459],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[51,100931,100929],{"__ignoreMap":143},[19,100933,100934],{},"需要掌握:",[350,100936,100937,100940,100943,100948,100953],{},[353,100938,100939],{},"Fedora 44 下 MuJoCo 的系统依赖",[353,100941,100942],{},"Python 虚拟环境创建",[353,100944,100945],{},[51,100946,100947],{},"mujoco.MjModel",[353,100949,100950],{},[51,100951,100952],{},"mujoco.MjData",[353,100954,100955],{},[51,100956,100957],{},"mujoco.mj_step(model, data)",[19,100959,100960],{},"MuJoCo 中最重要的两个对象:",[537,100962,100963,100973],{},[540,100964,100965],{},[543,100966,100967,100970],{},[546,100968,100969],{"align":24009},"对象",[546,100971,100972],{"align":24009},"含义",[583,100974,100975,100985],{},[543,100976,100977,100982],{},[588,100978,100979],{"align":24009},[51,100980,100981],{},"MjModel",[588,100983,100984],{"align":24009},"模型结构，来自 XML，基本不随时间变化",[543,100986,100987,100992],{},[588,100988,100989],{"align":24009},[51,100990,100991],{},"MjData",[588,100993,100994],{"align":24009},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,100996,100997],{},"可以先用一个类比理解：",[537,100999,101000,101010],{},[540,101001,101002],{},[543,101003,101004,101007],{},[546,101005,101006],{"align":24009},"类比",[546,101008,101009],{"align":24009},"MuJoCo 对象",[583,101011,101012,101021,101030],{},[543,101013,101014,101017],{},[588,101015,101016],{"align":24009},"游戏地图和角色配置",[588,101018,101019],{"align":24009},[51,101020,100981],{},[543,101022,101023,101026],{},[588,101024,101025],{"align":24009},"游戏运行到当前帧的状态",[588,101027,101028],{"align":24009},[51,101029,100991],{},[543,101031,101032,101035],{},[588,101033,101034],{"align":24009},"前进一帧",[588,101036,101037],{"align":24009},[51,101038,100957],{},[14,101040,101042],{"id":101041},"_2环境与依赖安装","2.环境与依赖安装",[19,101044,101045],{},"Fedora 44 系统依赖:",[138,101047,101049],{"className":24095,"code":101048,"language":24097,"meta":143,"style":143},"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",[51,101050,101051,101063,101076,101089,101099,101109,101128],{"__ignoreMap":143},[147,101052,101053,101055,101057,101059,101061],{"class":149,"line":150},[147,101054,24850],{"class":2237},[147,101056,26589],{"class":504},[147,101058,24107],{"class":504},[147,101060,26674],{"class":448},[147,101062,24952],{"class":448},[147,101064,101065,101068,101071,101074],{"class":149,"line":312},[147,101066,101067],{"class":504},"  python3",[147,101069,101070],{"class":504}," python3-pip",[147,101072,101073],{"class":504}," python3-virtualenv",[147,101075,24952],{"class":448},[147,101077,101078,101081,101084,101087],{"class":149,"line":1454},[147,101079,101080],{"class":504},"  mesa-libGL",[147,101082,101083],{"class":504}," mesa-libGLU",[147,101085,101086],{"class":504}," mesa-dri-drivers",[147,101088,24952],{"class":448},[147,101090,101091,101094,101097],{"class":149,"line":1469},[147,101092,101093],{"class":504},"  libglvnd-glx",[147,101095,101096],{"class":504}," libglvnd-opengl",[147,101098,24952],{"class":448},[147,101100,101101,101104,101107],{"class":149,"line":1475},[147,101102,101103],{"class":504},"  glfw",[147,101105,101106],{"class":504}," glfw-devel",[147,101108,24952],{"class":448},[147,101110,101111,101114,101117,101120,101123,101126],{"class":149,"line":1489},[147,101112,101113],{"class":504},"  libX11",[147,101115,101116],{"class":504}," libXcursor",[147,101118,101119],{"class":504}," libXi",[147,101121,101122],{"class":504}," libXinerama",[147,101124,101125],{"class":504}," libXrandr",[147,101127,24952],{"class":448},[147,101129,101130,101133,101136],{"class":149,"line":1495},[147,101131,101132],{"class":504},"  gcc",[147,101134,101135],{"class":504}," gcc-c++",[147,101137,101138],{"class":504}," make\n",[19,101140,101141],{},"创建 Python 环境:",[138,101143,101145],{"className":24095,"code":101144,"language":24097,"meta":143,"style":143},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[51,101146,101147,101161,101169],{"__ignoreMap":143},[147,101148,101149,101152,101155,101158],{"class":149,"line":150},[147,101150,101151],{"class":2237},"python3",[147,101153,101154],{"class":448}," -m",[147,101156,101157],{"class":504}," venv",[147,101159,101160],{"class":504}," .venv\n",[147,101162,101163,101166],{"class":149,"line":312},[147,101164,101165],{"class":448},"source",[147,101167,101168],{"class":504}," .venv\u002Fbin\u002Factivate\n",[147,101170,101171,101173,101175,101178,101180,101183],{"class":149,"line":1454},[147,101172,30654],{"class":2237},[147,101174,101154],{"class":448},[147,101176,101177],{"class":504}," pip",[147,101179,24107],{"class":504},[147,101181,101182],{"class":448}," --upgrade",[147,101184,101185],{"class":504}," pip\n",[19,101187,101188],{},"pip 安装:",[138,101190,101192],{"className":24095,"code":101191,"language":24097,"meta":143,"style":143},"pip install \"mujoco>=2.3\" numpy\n",[51,101193,101194],{"__ignoreMap":143},[147,101195,101196,101198,101200,101203],{"class":149,"line":150},[147,101197,24104],{"class":2237},[147,101199,24107],{"class":504},[147,101201,101202],{"class":504}," \"mujoco>=2.3\"",[147,101204,101205],{"class":504}," numpy\n",[19,101207,101208],{},"安装完成后，先做最小检查：",[138,101210,101212],{"className":24095,"code":101211,"language":24097,"meta":143,"style":143},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[51,101213,101214],{"__ignoreMap":143},[147,101215,101216,101218,101220],{"class":149,"line":150},[147,101217,30654],{"class":2237},[147,101219,30632],{"class":448},[147,101221,101222],{"class":504}," \"import mujoco; print(mujoco.__version__)\"\n",[19,101224,101225],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,101227,101228],{},"conda 安装:",[138,101230,101232],{"className":24095,"code":101231,"language":24097,"meta":143,"style":143},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[51,101233,101234,101254,101264],{"__ignoreMap":143},[147,101235,101236,101238,101240,101242,101245,101248,101251],{"class":149,"line":150},[147,101237,30604],{"class":2237},[147,101239,29450],{"class":504},[147,101241,25389],{"class":448},[147,101243,101244],{"class":504}," mujoco-study",[147,101246,101247],{"class":504}," python=",[147,101249,101250],{"class":448},"3.10",[147,101252,101253],{"class":448}," -y\n",[147,101255,101256,101258,101261],{"class":149,"line":312},[147,101257,30604],{"class":2237},[147,101259,101260],{"class":504}," activate",[147,101262,101263],{"class":504}," mujoco-study\n",[147,101265,101266,101268,101270,101272],{"class":149,"line":1454},[147,101267,24104],{"class":2237},[147,101269,24107],{"class":504},[147,101271,101202],{"class":504},[147,101273,101205],{"class":504},[19,101275,101276],{},"版本冲突说明:",[350,101278,101279,101285,101295,101304],{},[353,101280,101281,101282,28659],{},"不要安装 ",[51,101283,101284],{},"mujoco-py",[353,101286,101287,101288,101290,101291,101294],{},"如果旧项目里同时安装了 ",[51,101289,101284],{}," 和 ",[51,101292,101293],{},"mujoco","，建议新建干净虚拟环境。",[353,101296,101297,101300,101301,28659],{},[51,101298,101299],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[51,101302,101303],{},"~\u002F.mujoco\u002Fmujoco210",[353,101305,101306,101307,82811,101310,101313],{},"离屏渲染可能涉及 OpenGL 后端，",[51,101308,101309],{},"MUJOCO_GL=egl",[51,101311,101312],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,101315,101317],{"id":101316},"_3核心概念解释","3.核心概念解释",[19,101319,101320],{},"MuJoCo 的基本执行流程:",[138,101322,101325],{"className":101323,"code":101324,"language":5461,"meta":143},[5459],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[51,101326,101324],{"__ignoreMap":143},[19,101328,101329,101331],{},[51,101330,100981],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,101333,101334,101336,101337,611,101340,611,101343,611,101346,611,101349,28659],{},[51,101335,100991],{}," 存放仿真运行时状态，例如 ",[51,101338,101339],{},"data.time",[51,101341,101342],{},"data.qpos",[51,101344,101345],{},"data.qvel",[51,101347,101348],{},"data.ctrl",[51,101350,101351],{},"data.xpos",[367,101353,101355],{"id":101354},"xml-是什么","XML 是什么",[19,101357,101358],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[138,101360,101362],{"className":53340,"code":101361,"language":53342,"meta":143,"style":143},"\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",[51,101363,101364,101386,101417],{"__ignoreMap":143},[147,101365,101366,101368,101370,101372,101374,101376,101379,101381,101384],{"class":149,"line":150},[147,101367,1309],{"class":157},[147,101369,52073],{"class":153},[147,101371,15193],{"class":2237},[147,101373,445],{"class":157},[147,101375,53764],{"class":504},[147,101377,101378],{"class":2237}," pos",[147,101380,445],{"class":157},[147,101382,101383],{"class":504},"\"0 0 1\"",[147,101385,51580],{"class":157},[147,101387,101388,101390,101393,101395,101397,101400,101402,101404,101406,101409,101411,101414],{"class":149,"line":312},[147,101389,52417],{"class":157},[147,101391,101392],{"class":153},"geom",[147,101394,15193],{"class":2237},[147,101396,445],{"class":157},[147,101398,101399],{"class":504},"\"box_geom\"",[147,101401,54097],{"class":2237},[147,101403,445],{"class":157},[147,101405,53764],{"class":504},[147,101407,101408],{"class":2237}," size",[147,101410,445],{"class":157},[147,101412,101413],{"class":504},"\"0.1 0.1 0.1\"",[147,101415,101416],{"class":157},"\u002F>\n",[147,101418,101419,101421,101423],{"class":149,"line":1454},[147,101420,52058],{"class":157},[147,101422,52073],{"class":153},[147,101424,51580],{"class":157},[19,101426,101427],{},"这段意思是：",[350,101429,101430,101436,101443],{},[353,101431,101432,101433,101435],{},"创建一个叫 ",[51,101434,53987],{}," 的刚体。",[353,101437,101438,101439,101442],{},"它初始放在 ",[51,101440,101441],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[353,101444,101445],{},"它里面有一个盒子形状的几何体。",[367,101447,101449],{"id":101448},"timestep-是什么","timestep 是什么",[19,101451,101452],{},"XML 里的：",[138,101454,101456],{"className":53340,"code":101455,"language":53342,"meta":143,"style":143},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[51,101457,101458],{"__ignoreMap":143},[147,101459,101460,101462,101464,101467,101469,101472,101475,101477,101480],{"class":149,"line":150},[147,101461,1309],{"class":157},[147,101463,69439],{"class":153},[147,101465,101466],{"class":2237}," timestep",[147,101468,445],{"class":157},[147,101470,101471],{"class":504},"\"0.01\"",[147,101473,101474],{"class":2237}," gravity",[147,101476,445],{"class":157},[147,101478,101479],{"class":504},"\"0 0 -9.81\"",[147,101481,101416],{"class":157},[19,101483,101484,101485,101488,101489,101491],{},"表示每调用一次 ",[51,101486,101487],{},"mj_step","，仿真时间前进 ",[51,101490,39260],{}," 秒。循环 100 次，大约就是 1 秒：",[138,101493,101496],{"className":101494,"code":101495,"language":5461,"meta":143},[5459],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[51,101497,101495],{"__ignoreMap":143},[367,101499,101501],{"id":101500},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,101503,101504],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[138,101506,101509],{"className":101507,"code":101508,"language":5461,"meta":143},[5459],"x y z qw qx qy qz\n",[51,101510,101508],{"__ignoreMap":143},[19,101512,101513,101514,101517,101518,101521],{},"表示一个自由刚体的位置和姿态。其中 ",[51,101515,101516],{},"x y z"," 是位置，",[51,101519,101520],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,101523,101525],{"id":101524},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,101527,101528],{},"新建文件:",[138,101530,101532],{"className":24095,"code":101531,"language":24097,"meta":143,"style":143},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[51,101533,101534,101544,101551],{"__ignoreMap":143},[147,101535,101536,101539,101541],{"class":149,"line":150},[147,101537,101538],{"class":2237},"mkdir",[147,101540,29490],{"class":448},[147,101542,101543],{"class":504}," mujoco_tutorial\n",[147,101545,101546,101549],{"class":149,"line":312},[147,101547,101548],{"class":448},"cd",[147,101550,101543],{"class":504},[147,101552,101553,101556],{"class":149,"line":1454},[147,101554,101555],{"class":2237},"touch",[147,101557,101558],{"class":504}," ch1_first_sim.py\n",[19,101560,101561],{},"写入:",[138,101563,101565],{"className":30652,"code":101564,"language":30654,"meta":143,"style":143},"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",[51,101566,101567,101574,101578,101582,101592,101597,101602,101606,101611,101616,101620,101625,101630,101635,101640,101645,101650,101654,101658,101662,101675,101689,101699,101703,101715,101727,101739,101751,101763,101767,101784,101789,101793,101804,101815,101819,101823,101837],{"__ignoreMap":143},[147,101568,101569,101571],{"class":149,"line":150},[147,101570,30666],{"class":397},[147,101572,101573],{"class":157}," mujoco\n",[147,101575,101576],{"class":149,"line":312},[147,101577,2674],{"emptyLinePlaceholder":324},[147,101579,101580],{"class":149,"line":1454},[147,101581,2674],{"emptyLinePlaceholder":324},[147,101583,101584,101587,101589],{"class":149,"line":1469},[147,101585,101586],{"class":448},"XML",[147,101588,13838],{"class":397},[147,101590,101591],{"class":504}," \"\"\"\n",[147,101593,101594],{"class":149,"line":1475},[147,101595,101596],{"class":504},"\u003Cmujoco model=\"first_sim\">\n",[147,101598,101599],{"class":149,"line":1489},[147,101600,101601],{"class":504},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[147,101603,101604],{"class":149,"line":1495},[147,101605,2674],{"emptyLinePlaceholder":324},[147,101607,101608],{"class":149,"line":1586},[147,101609,101610],{"class":504},"  \u003Cworldbody>\n",[147,101612,101613],{"class":149,"line":1592},[147,101614,101615],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[147,101617,101618],{"class":149,"line":1604},[147,101619,2674],{"emptyLinePlaceholder":324},[147,101621,101622],{"class":149,"line":1886},[147,101623,101624],{"class":504},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[147,101626,101627],{"class":149,"line":1891},[147,101628,101629],{"class":504},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[147,101631,101632],{"class":149,"line":1897},[147,101633,101634],{"class":504},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[147,101636,101637],{"class":149,"line":1902},[147,101638,101639],{"class":504},"    \u003C\u002Fbody>\n",[147,101641,101642],{"class":149,"line":1916},[147,101643,101644],{"class":504},"  \u003C\u002Fworldbody>\n",[147,101646,101647],{"class":149,"line":1921},[147,101648,101649],{"class":504},"\u003C\u002Fmujoco>\n",[147,101651,101652],{"class":149,"line":1927},[147,101653,95970],{"class":504},[147,101655,101656],{"class":149,"line":1948},[147,101657,2674],{"emptyLinePlaceholder":324},[147,101659,101660],{"class":149,"line":1953},[147,101661,2674],{"emptyLinePlaceholder":324},[147,101663,101664,101666,101668,101671,101673],{"class":149,"line":1967},[147,101665,32221],{"class":397},[147,101667,2247],{"class":2237},[147,101669,101670],{"class":157},"() -> ",[147,101672,95958],{"class":448},[147,101674,4013],{"class":157},[147,101676,101677,101680,101682,101685,101687],{"class":149,"line":1972},[147,101678,101679],{"class":157},"    model ",[147,101681,445],{"class":397},[147,101683,101684],{"class":157}," mujoco.MjModel.from_xml_string(",[147,101686,101586],{"class":448},[147,101688,407],{"class":157},[147,101690,101691,101694,101696],{"class":149,"line":2001},[147,101692,101693],{"class":157},"    data ",[147,101695,445],{"class":397},[147,101697,101698],{"class":157}," mujoco.MjData(model)\n",[147,101700,101701],{"class":149,"line":2006},[147,101702,2674],{"emptyLinePlaceholder":324},[147,101704,101705,101707,101709,101712],{"class":149,"line":2023},[147,101706,31573],{"class":448},[147,101708,401],{"class":157},[147,101710,101711],{"class":504},"\"nq:\"",[147,101713,101714],{"class":157},", model.nq)\n",[147,101716,101717,101719,101721,101724],{"class":149,"line":2028},[147,101718,31573],{"class":448},[147,101720,401],{"class":157},[147,101722,101723],{"class":504},"\"nv:\"",[147,101725,101726],{"class":157},", model.nv)\n",[147,101728,101729,101731,101733,101736],{"class":149,"line":2033},[147,101730,31573],{"class":448},[147,101732,401],{"class":157},[147,101734,101735],{"class":504},"\"nu:\"",[147,101737,101738],{"class":157},", model.nu)\n",[147,101740,101741,101743,101745,101748],{"class":149,"line":2038},[147,101742,31573],{"class":448},[147,101744,401],{"class":157},[147,101746,101747],{"class":504},"\"initial time:\"",[147,101749,101750],{"class":157},", data.time)\n",[147,101752,101753,101755,101757,101760],{"class":149,"line":2052},[147,101754,31573],{"class":448},[147,101756,401],{"class":157},[147,101758,101759],{"class":504},"\"initial qpos:\"",[147,101761,101762],{"class":157},", data.qpos.copy())\n",[147,101764,101765],{"class":149,"line":2057},[147,101766,2674],{"emptyLinePlaceholder":324},[147,101768,101769,101771,101774,101776,101778,101780,101782],{"class":149,"line":2851},[147,101770,3475],{"class":397},[147,101772,101773],{"class":157}," _ ",[147,101775,26317],{"class":397},[147,101777,32717],{"class":448},[147,101779,401],{"class":157},[147,101781,710],{"class":448},[147,101783,31060],{"class":157},[147,101785,101786],{"class":149,"line":2865},[147,101787,101788],{"class":157},"        mujoco.mj_step(model, data)\n",[147,101790,101791],{"class":149,"line":2873},[147,101792,2674],{"emptyLinePlaceholder":324},[147,101794,101795,101797,101799,101802],{"class":149,"line":2878},[147,101796,31573],{"class":448},[147,101798,401],{"class":157},[147,101800,101801],{"class":504},"\"final time:\"",[147,101803,101750],{"class":157},[147,101805,101806,101808,101810,101813],{"class":149,"line":2884},[147,101807,31573],{"class":448},[147,101809,401],{"class":157},[147,101811,101812],{"class":504},"\"final qpos:\"",[147,101814,101762],{"class":157},[147,101816,101817],{"class":149,"line":2890},[147,101818,2674],{"emptyLinePlaceholder":324},[147,101820,101821],{"class":149,"line":2895},[147,101822,2674],{"emptyLinePlaceholder":324},[147,101824,101825,101827,101829,101832,101835],{"class":149,"line":8222},[147,101826,1805],{"class":397},[147,101828,31494],{"class":448},[147,101830,101831],{"class":397}," ==",[147,101833,101834],{"class":504}," \"__main__\"",[147,101836,4013],{"class":157},[147,101838,101839],{"class":149,"line":8246},[147,101840,101841],{"class":157},"    main()\n",[367,101843,101844],{"id":101844},"代码逐段解释",[19,101846,101847],{},"导入库：",[138,101849,101851],{"className":30652,"code":101850,"language":30654,"meta":143,"style":143},"import mujoco\n",[51,101852,101853],{"__ignoreMap":143},[147,101854,101855,101857],{"class":149,"line":150},[147,101856,30666],{"class":397},[147,101858,101573],{"class":157},[19,101860,101861],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,101863,101864],{},"定义 XML：",[138,101866,101868],{"className":30652,"code":101867,"language":30654,"meta":143,"style":143},"XML = \"\"\"\n...\n\"\"\"\n",[51,101869,101870,101878,101883],{"__ignoreMap":143},[147,101871,101872,101874,101876],{"class":149,"line":150},[147,101873,101586],{"class":448},[147,101875,13838],{"class":397},[147,101877,101591],{"class":504},[147,101879,101880],{"class":149,"line":312},[147,101881,101882],{"class":504},"...\n",[147,101884,101885],{"class":149,"line":1454},[147,101886,95970],{"class":504},[19,101888,101889,101890,101893],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[51,101891,101892],{},"freejoint"," 的方块。",[19,101895,101896],{},"编译模型：",[138,101898,101900],{"className":30652,"code":101899,"language":30654,"meta":143,"style":143},"model = mujoco.MjModel.from_xml_string(XML)\n",[51,101901,101902],{"__ignoreMap":143},[147,101903,101904,101907,101909,101911,101913],{"class":149,"line":150},[147,101905,101906],{"class":157},"model ",[147,101908,445],{"class":397},[147,101910,101684],{"class":157},[147,101912,101586],{"class":448},[147,101914,407],{"class":157},[19,101916,101917],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,101919,101920],{},"创建数据：",[138,101922,101924],{"className":30652,"code":101923,"language":30654,"meta":143,"style":143},"data = mujoco.MjData(model)\n",[51,101925,101926],{"__ignoreMap":143},[147,101927,101928,101931,101933],{"class":149,"line":150},[147,101929,101930],{"class":157},"data ",[147,101932,445],{"class":397},[147,101934,101698],{"class":157},[19,101936,101937,101939,101940,101942],{},[51,101938,33675],{}," 会保存仿真当前状态。刚创建时，时间是 ",[51,101941,590],{},"，方块还在初始位置。",[19,101944,101945],{},"推进仿真：",[138,101947,101949],{"className":30652,"code":101948,"language":30654,"meta":143,"style":143},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[51,101950,101951,101967],{"__ignoreMap":143},[147,101952,101953,101955,101957,101959,101961,101963,101965],{"class":149,"line":150},[147,101954,3299],{"class":397},[147,101956,101773],{"class":157},[147,101958,26317],{"class":397},[147,101960,32717],{"class":448},[147,101962,401],{"class":157},[147,101964,710],{"class":448},[147,101966,31060],{"class":157},[147,101968,101969],{"class":149,"line":312},[147,101970,101971],{"class":157},"    mujoco.mj_step(model, data)\n",[19,101973,101974,101975,101977],{},"每次 ",[51,101976,101487],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[367,101979,101980],{"id":101980},"代码逐行细讲",[19,101982,101983],{},"下面把完整代码按新手视角拆开讲。",[138,101985,101986],{"className":30652,"code":101850,"language":30654,"meta":143,"style":143},[51,101987,101988],{"__ignoreMap":143},[147,101989,101990,101992],{"class":149,"line":150},[147,101991,30666],{"class":397},[147,101993,101573],{"class":157},[19,101995,101996,101998,101999,611,102001,611,102003,28659],{},[51,101997,30666],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[51,102000,100947],{},[51,102002,100952],{},[51,102004,102005],{},"mujoco.mj_step",[138,102007,102008],{"className":30652,"code":101867,"language":30654,"meta":143,"style":143},[51,102009,102010,102018,102022],{"__ignoreMap":143},[147,102011,102012,102014,102016],{"class":149,"line":150},[147,102013,101586],{"class":448},[147,102015,13838],{"class":397},[147,102017,101591],{"class":504},[147,102019,102020],{"class":149,"line":312},[147,102021,101882],{"class":504},[147,102023,102024],{"class":149,"line":1454},[147,102025,95970],{"class":504},[19,102027,102028,102030,102031,102034],{},[51,102029,101586],{}," 是一个变量名。右边的三引号 ",[51,102032,102033],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[138,102036,102037],{"className":53340,"code":101596,"language":53342,"meta":143,"style":143},[51,102038,102039],{"__ignoreMap":143},[147,102040,102041,102043,102045,102048,102050,102053],{"class":149,"line":150},[147,102042,1309],{"class":157},[147,102044,101293],{"class":153},[147,102046,102047],{"class":2237}," model",[147,102049,445],{"class":157},[147,102051,102052],{"class":504},"\"first_sim\"",[147,102054,51580],{"class":157},[19,102056,102057,102058,102061,102062,28659],{},"这是 XML 的根标签。",[51,102059,102060],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[51,102063,102064],{},"first_sim",[138,102066,102067],{"className":53340,"code":101455,"language":53342,"meta":143,"style":143},[51,102068,102069],{"__ignoreMap":143},[147,102070,102071,102073,102075,102077,102079,102081,102083,102085,102087],{"class":149,"line":150},[147,102072,1309],{"class":157},[147,102074,69439],{"class":153},[147,102076,101466],{"class":2237},[147,102078,445],{"class":157},[147,102080,101471],{"class":504},[147,102082,101474],{"class":2237},[147,102084,445],{"class":157},[147,102086,101479],{"class":504},[147,102088,101416],{"class":157},[19,102090,102091,102093,102094,102097,102098,102101],{},[51,102092,69439],{}," 用来设置仿真参数。",[51,102095,102096],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[51,102099,102100],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[138,102103,102105],{"className":53340,"code":102104,"language":53342,"meta":143,"style":143},"\u003Cworldbody>\n",[51,102106,102107],{"__ignoreMap":143},[147,102108,102109,102111,102114],{"class":149,"line":150},[147,102110,1309],{"class":157},[147,102112,102113],{"class":153},"worldbody",[147,102115,51580],{"class":157},[19,102117,102118,102120],{},[51,102119,102113],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[138,102122,102124],{"className":53340,"code":102123,"language":53342,"meta":143,"style":143},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[51,102125,102126],{"__ignoreMap":143},[147,102127,102128,102130,102132,102134,102136,102139,102141,102143,102146,102148,102150,102153,102155,102157,102160],{"class":149,"line":150},[147,102129,1309],{"class":157},[147,102131,101392],{"class":153},[147,102133,15193],{"class":2237},[147,102135,445],{"class":157},[147,102137,102138],{"class":504},"\"floor\"",[147,102140,54097],{"class":2237},[147,102142,445],{"class":157},[147,102144,102145],{"class":504},"\"plane\"",[147,102147,101408],{"class":2237},[147,102149,445],{"class":157},[147,102151,102152],{"class":504},"\"2 2 0.1\"",[147,102154,79039],{"class":2237},[147,102156,445],{"class":157},[147,102158,102159],{"class":504},"\"0.8 0.8 0.8 1\"",[147,102161,101416],{"class":157},[19,102163,102164,102165,102167,102168,102171,102172,102175,102176,102178],{},"这行创建地面。",[51,102166,101392],{}," 是几何体。",[51,102169,102170],{},"name=\"floor\""," 是名字。",[51,102173,102174],{},"type=\"plane\""," 表示平面。",[51,102177,55383],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[138,102180,102182],{"className":53340,"code":102181,"language":53342,"meta":143,"style":143},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[51,102183,102184],{"__ignoreMap":143},[147,102185,102186,102188,102190,102192,102194,102196,102198,102200,102202],{"class":149,"line":150},[147,102187,1309],{"class":157},[147,102189,52073],{"class":153},[147,102191,15193],{"class":2237},[147,102193,445],{"class":157},[147,102195,53764],{"class":504},[147,102197,101378],{"class":2237},[147,102199,445],{"class":157},[147,102201,101383],{"class":504},[147,102203,51580],{"class":157},[19,102205,102206,102207,28659,102209,102212,102213,102215],{},"这行创建一个刚体，名字叫 ",[51,102208,53987],{},[51,102210,102211],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[51,102214,101441],{},"，也就是离地面 1 米高。",[138,102217,102219],{"className":53340,"code":102218,"language":53342,"meta":143,"style":143},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[51,102220,102221],{"__ignoreMap":143},[147,102222,102223,102225,102227,102229,102231,102234],{"class":149,"line":150},[147,102224,1309],{"class":157},[147,102226,101892],{"class":153},[147,102228,15193],{"class":2237},[147,102230,445],{"class":157},[147,102232,102233],{"class":504},"\"box_free\"",[147,102235,101416],{"class":157},[19,102237,102238,102239,102241],{},"这行很重要。",[51,102240,101892],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[138,102243,102245],{"className":53340,"code":102244,"language":53342,"meta":143,"style":143},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[51,102246,102247],{"__ignoreMap":143},[147,102248,102249,102251,102253,102255,102257,102259,102261,102263,102265,102267,102269,102271,102274,102276,102278,102280,102282,102285],{"class":149,"line":150},[147,102250,1309],{"class":157},[147,102252,101392],{"class":153},[147,102254,15193],{"class":2237},[147,102256,445],{"class":157},[147,102258,101399],{"class":504},[147,102260,54097],{"class":2237},[147,102262,445],{"class":157},[147,102264,53764],{"class":504},[147,102266,101408],{"class":2237},[147,102268,445],{"class":157},[147,102270,101413],{"class":504},[147,102272,102273],{"class":2237}," mass",[147,102275,445],{"class":157},[147,102277,3952],{"class":504},[147,102279,79039],{"class":2237},[147,102281,445],{"class":157},[147,102283,102284],{"class":504},"\"1 0 0 1\"",[147,102286,101416],{"class":157},[19,102288,102289,102290,102293,102294,102297,102298,102301,102302,102305],{},"这行给 box body 添加一个盒子形状。",[51,102291,102292],{},"type=\"box\""," 表示形状是盒子。",[51,102295,102296],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[51,102299,102300],{},"mass=\"1\""," 表示质量是 1。",[51,102303,102304],{},"rgba=\"1 0 0 1\""," 表示红色。",[138,102307,102309],{"className":30652,"code":102308,"language":30654,"meta":143,"style":143},"def main() -> None:\n",[51,102310,102311],{"__ignoreMap":143},[147,102312,102313,102315,102317,102319,102321],{"class":149,"line":150},[147,102314,32221],{"class":397},[147,102316,2247],{"class":2237},[147,102318,101670],{"class":157},[147,102320,95958],{"class":448},[147,102322,4013],{"class":157},[19,102324,102325,102327,102328,102331,102332,102335],{},[51,102326,32221],{}," 用来定义函数。这里定义了一个叫 ",[51,102329,102330],{},"main"," 的函数。",[51,102333,102334],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[138,102337,102338],{"className":30652,"code":101899,"language":30654,"meta":143,"style":143},[51,102339,102340],{"__ignoreMap":143},[147,102341,102342,102344,102346,102348,102350],{"class":149,"line":150},[147,102343,101906],{"class":157},[147,102345,445],{"class":397},[147,102347,101684],{"class":157},[147,102349,101586],{"class":448},[147,102351,407],{"class":157},[19,102353,102354,102355,102358],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[51,102356,102357],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[138,102360,102361],{"className":30652,"code":101923,"language":30654,"meta":143,"style":143},[51,102362,102363],{"__ignoreMap":143},[147,102364,102365,102367,102369],{"class":149,"line":150},[147,102366,101930],{"class":157},[147,102368,445],{"class":397},[147,102370,101698],{"class":157},[19,102372,102373,102374,102376,102377,102379],{},"这行创建仿真数据。",[51,102375,33675],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[51,102378,33675],{}," 都会变化。",[138,102381,102383],{"className":30652,"code":102382,"language":30654,"meta":143,"style":143},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[51,102384,102385,102395,102405],{"__ignoreMap":143},[147,102386,102387,102389,102391,102393],{"class":149,"line":150},[147,102388,30689],{"class":448},[147,102390,401],{"class":157},[147,102392,101711],{"class":504},[147,102394,101714],{"class":157},[147,102396,102397,102399,102401,102403],{"class":149,"line":312},[147,102398,30689],{"class":448},[147,102400,401],{"class":157},[147,102402,101723],{"class":504},[147,102404,101726],{"class":157},[147,102406,102407,102409,102411,102413],{"class":149,"line":1454},[147,102408,30689],{"class":448},[147,102410,401],{"class":157},[147,102412,101735],{"class":504},[147,102414,101738],{"class":157},[19,102416,102417,102419,102420,102423,102424,102427,102428,102431,102432,102435],{},[51,102418,30689],{}," 用来输出信息。",[51,102421,102422],{},"model.nq"," 是位置变量数量，",[51,102425,102426],{},"model.nv"," 是速度变量数量，",[51,102429,102430],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[51,102433,102434],{},"nu"," 是 0。",[138,102437,102439],{"className":30652,"code":102438,"language":30654,"meta":143,"style":143},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[51,102440,102441,102451],{"__ignoreMap":143},[147,102442,102443,102445,102447,102449],{"class":149,"line":150},[147,102444,30689],{"class":448},[147,102446,401],{"class":157},[147,102448,101747],{"class":504},[147,102450,101750],{"class":157},[147,102452,102453,102455,102457,102459],{"class":149,"line":312},[147,102454,30689],{"class":448},[147,102456,401],{"class":157},[147,102458,101759],{"class":504},[147,102460,101762],{"class":157},[19,102462,102463,102464,102466,102467,102469,102470,102473],{},"这里打印初始时间和初始位置。",[51,102465,101339],{}," 一开始是 0。",[51,102468,101342],{}," 是位置数组。",[51,102471,102472],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[138,102475,102476],{"className":30652,"code":101948,"language":30654,"meta":143,"style":143},[51,102477,102478,102494],{"__ignoreMap":143},[147,102479,102480,102482,102484,102486,102488,102490,102492],{"class":149,"line":150},[147,102481,3299],{"class":397},[147,102483,101773],{"class":157},[147,102485,26317],{"class":397},[147,102487,32717],{"class":448},[147,102489,401],{"class":157},[147,102491,710],{"class":448},[147,102493,31060],{"class":157},[147,102495,102496],{"class":149,"line":312},[147,102497,101971],{"class":157},[19,102499,102500,102502,102503,102506,102507,102509,102510,102512],{},[51,102501,3299],{}," 是循环。",[51,102504,102505],{},"range(100)"," 表示循环 100 次。",[51,102508,1391],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[51,102511,101487],{},"，仿真就前进一步。",[138,102514,102516],{"className":30652,"code":102515,"language":30654,"meta":143,"style":143},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[51,102517,102518,102528],{"__ignoreMap":143},[147,102519,102520,102522,102524,102526],{"class":149,"line":150},[147,102521,30689],{"class":448},[147,102523,401],{"class":157},[147,102525,101801],{"class":504},[147,102527,101750],{"class":157},[147,102529,102530,102532,102534,102536],{"class":149,"line":312},[147,102531,30689],{"class":448},[147,102533,401],{"class":157},[147,102535,101812],{"class":504},[147,102537,101762],{"class":157},[19,102539,102540],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[138,102542,102544],{"className":30652,"code":102543,"language":30654,"meta":143,"style":143},"if __name__ == \"__main__\":\n    main()\n",[51,102545,102546,102558],{"__ignoreMap":143},[147,102547,102548,102550,102552,102554,102556],{"class":149,"line":150},[147,102549,1805],{"class":397},[147,102551,31494],{"class":448},[147,102553,101831],{"class":397},[147,102555,101834],{"class":504},[147,102557,4013],{"class":157},[147,102559,102560],{"class":149,"line":312},[147,102561,101841],{"class":157},[19,102563,102564,102565,102568,102569,28659],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[51,102566,102567],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[51,102570,102567],{},[19,102572,102573],{},"运行:",[138,102575,102577],{"className":24095,"code":102576,"language":24097,"meta":143,"style":143},"python ch1_first_sim.py\n",[51,102578,102579],{"__ignoreMap":143},[147,102580,102581,102583],{"class":149,"line":150},[147,102582,30654],{"class":2237},[147,102584,101558],{"class":504},[14,102586,102588],{"id":102587},"_5运行结果说明","5.运行结果说明",[19,102590,102591],{},"你应该看到类似输出:",[138,102593,102596],{"className":102594,"code":102595,"language":5461,"meta":143},[5459],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[51,102597,102595],{"__ignoreMap":143},[19,102599,102600,102602,102603,102606,102607,28659],{},[51,102601,101892],{}," 有 7 个位置变量: ",[51,102604,102605],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[51,102608,102609],{},"vx vy vz wx wy wz",[19,102611,102612,102613,102616],{},"你还会看到 ",[51,102614,102615],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,102618,102620],{"id":102619},"_6验证步骤","6.验证步骤",[19,102622,102623],{},"确认版本:",[138,102625,102626],{"className":24095,"code":101211,"language":24097,"meta":143,"style":143},[51,102627,102628],{"__ignoreMap":143},[147,102629,102630,102632,102634],{"class":149,"line":150},[147,102631,30654],{"class":2237},[147,102633,30632],{"class":448},[147,102635,101222],{"class":504},[19,102637,102638],{},"确认导入的是官方 bindings:",[138,102640,102642],{"className":24095,"code":102641,"language":24097,"meta":143,"style":143},"python -c \"import mujoco; print(mujoco)\"\n",[51,102643,102644],{"__ignoreMap":143},[147,102645,102646,102648,102650],{"class":149,"line":150},[147,102647,30654],{"class":2237},[147,102649,30632],{"class":448},[147,102651,102652],{"class":504}," \"import mujoco; print(mujoco)\"\n",[19,102654,102655],{},"运行程序:",[138,102657,102658],{"className":24095,"code":102576,"language":24097,"meta":143,"style":143},[51,102659,102660],{"__ignoreMap":143},[147,102661,102662,102664],{"class":149,"line":150},[147,102663,30654],{"class":2237},[147,102665,101558],{"class":504},[19,102667,102668,102669,102672,102673,28659],{},"检查 ",[51,102670,102671],{},"final time"," 是否约等于 ",[51,102674,102675],{},"1.0",[19,102677,102678],{},"再做几个小实验：",[350,102680,102681,102691,102699,102712],{},[353,102682,102683,102684,102686,102687,102690],{},"把 ",[51,102685,102211],{}," 改成 ",[51,102688,102689],{},"pos=\"0 0 2\"","，观察初始高度变化。",[353,102692,102683,102693,102686,102695,102698],{},[51,102694,102100],{},[51,102696,102697],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[353,102700,102683,102701,102686,102703,102706,102707,102709,102710,28659],{},[51,102702,102096],{},[51,102704,102705],{},"timestep=\"0.005\"","，观察 100 步后的 ",[51,102708,102671],{}," 是否变成约 ",[51,102711,35603],{},[353,102713,102714,102715,102718],{},"删除 ",[51,102716,102717],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,102720,102721],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,102723,102725],{"id":102724},"_7常见错误与解决方案","7.常见错误与解决方案",[367,102727,102729],{"id":102728},"modulenotfounderror-no-module-named-mujoco",[51,102730,102731],{},"ModuleNotFoundError: No module named 'mujoco'",[19,102733,102734],{},"解决:",[138,102736,102738],{"className":24095,"code":102737,"language":24097,"meta":143,"style":143},"pip install \"mujoco>=2.3\"\n",[51,102739,102740],{"__ignoreMap":143},[147,102741,102742,102744,102746],{"class":149,"line":150},[147,102743,24104],{"class":2237},[147,102745,24107],{"class":504},[147,102747,102748],{"class":504}," \"mujoco>=2.3\"\n",[367,102750,102752],{"id":102751},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,102754,102755],{},"先安装系统依赖:",[138,102757,102759],{"className":24095,"code":102758,"language":24097,"meta":143,"style":143},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[51,102760,102761],{"__ignoreMap":143},[147,102762,102763,102765,102767,102769,102771,102774,102776,102779,102781,102784,102786],{"class":149,"line":150},[147,102764,24850],{"class":2237},[147,102766,26589],{"class":504},[147,102768,24107],{"class":504},[147,102770,26674],{"class":448},[147,102772,102773],{"class":504}," mesa-libGL",[147,102775,101086],{"class":504},[147,102777,102778],{"class":504}," glfw",[147,102780,101106],{"class":504},[147,102782,102783],{"class":504}," libX11",[147,102785,101119],{"class":504},[147,102787,102788],{"class":504}," libXrandr\n",[367,102790,102792],{"id":102791},"xml-解析失败","XML 解析失败",[19,102794,102795],{},"检查:",[350,102797,102798,102801,102804,102810],{},[353,102799,102800],{},"标签是否闭合",[353,102802,102803],{},"属性是否带引号",[353,102805,102806,102807],{},"根节点是否是 ",[51,102808,102809],{},"\u003Cmujoco>",[353,102811,102812,102814,102815,102818],{},[51,102813,52073],{}," 是否放在 ",[51,102816,102817],{},"\u003Cworldbody>"," 内部",[367,102820,102822,102824,102825],{"id":102821},"final-time-不是严格等于-10",[51,102823,102671],{}," 不是严格等于 ",[51,102826,102675],{},[19,102828,102829],{},"这通常不是错误。浮点数计算可能得到：",[138,102831,102834],{"className":102832,"code":102833,"language":5461,"meta":143},[5459],"1.0000000000000007\n",[51,102835,102833],{"__ignoreMap":143},[19,102837,102838,102839,102841],{},"只要接近 ",[51,102840,102675],{}," 就正常。",[367,102843,102844],{"id":102844},"方块没有掉下来",[19,102846,102847],{},"检查：",[350,102849,102850,102856,102862,102867],{},[353,102851,102852,102853],{},"方块 body 里是否有 ",[51,102854,102855],{},"\u003Cfreejoint\u002F>",[353,102857,102858,102859],{},"重力是否是 ",[51,102860,102861],{},"0 0 -9.81",[353,102863,102864,102865],{},"是否真的调用了 ",[51,102866,100957],{},[353,102868,102869,102870,102872,102873],{},"你看的是否是 ",[51,102871,102615],{},"，不是 ",[51,102874,102875],{},"initial qpos",[14,102877,102879],{"id":102878},"_8本章小结","8.本章小结",[19,102881,102882],{},"本章你已经完成了 MuJoCo 的最小闭环：",[138,102884,102887],{"className":102885,"code":102886,"language":5461,"meta":143},[5459],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[51,102888,102886],{"__ignoreMap":143},[19,102890,102891],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[308,102893,102894],{},"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":143,"searchDepth":312,"depth":312,"links":102896},[102897,102898,102899,102904,102908,102909,102910,102918],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":102900},[102901,102902,102903],{"id":101354,"depth":1454,"text":101355},{"id":101448,"depth":1454,"text":101449},{"id":101500,"depth":1454,"text":101501},{"id":101524,"depth":312,"text":101525,"children":102905},[102906,102907],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":102911},[102912,102913,102914,102915,102917],{"id":102728,"depth":1454,"text":102731},{"id":102751,"depth":1454,"text":102752},{"id":102791,"depth":1454,"text":102792},{"id":102821,"depth":1454,"text":102916},"final time 不是严格等于 1.0",{"id":102844,"depth":1454,"text":102844},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100910,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102925,"title":102926,"body":102927,"description":143,"extension":322,"meta":104581,"navigation":324,"path":104582,"seo":104583,"stem":104584,"__hash__":104585},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102928,"toc":104557},[102929,102932,102934,102937,102940,102957,103050,103053,103059,103061,103063,103087,103090,103104,103107,103148,103150,103163,103165,103168,103216,103228,103231,103234,103240,103253,103320,103323,103342,103345,103348,103354,103356,103365,103368,103372,103381,103463,103472,103476,103482,103496,103506,103508,103838,103841,103853,103855,103866,103868,103871,103889,103892,103895,103913,103924,103927,103942,103952,103954,103975,103992,104012,104018,104058,104074,104090,104096,104099,104123,104139,104144,104174,104191,104216,104219,104234,104243,104258,104267,104282,104289,104291,104301,104314,104321,104324,104363,104370,104372,104424,104426,104432,104435,104442,104449,104452,104454,104472,104475,104478,104512,104524,104526,104529,104551,104554],[10,102930,102926],{"id":102931},"_2xml-与-mjcf-物理建模基础",[14,102933,100919],{"id":100918},[19,102935,102936],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,102938,102939],{},"本章结束后，你应该能看懂一个简单模型里：",[350,102941,102942,102945,102948,102951,102954],{},[353,102943,102944],{},"地面在哪里。",[353,102946,102947],{},"物体初始位置在哪里。",[353,102949,102950],{},"几何体是什么形状。",[353,102952,102953],{},"哪些 body 可以自由运动。",[353,102955,102956],{},"如何用名字在 Python 里找到 XML 中的对象。",[537,102958,102959,102968],{},[540,102960,102961],{},[543,102962,102963,102965],{},[546,102964,281],{"align":24009},[546,102966,102967],{"align":24009},"作用",[583,102969,102970,102979,102988,102997,103007,103017,103030,103040],{},[543,102971,102972,102976],{},[588,102973,102974],{"align":24009},[51,102975,102809],{},[588,102977,102978],{"align":24009},"根节点",[543,102980,102981,102985],{},[588,102982,102983],{"align":24009},[51,102984,256],{},[588,102986,102987],{"align":24009},"仿真参数",[543,102989,102990,102994],{},[588,102991,102992],{"align":24009},[51,102993,102817],{},[588,102995,102996],{"align":24009},"世界中的物体",[543,102998,102999,103004],{},[588,103000,103001],{"align":24009},[51,103002,103003],{},"\u003Cbody>",[588,103005,103006],{"align":24009},"刚体",[543,103008,103009,103014],{},[588,103010,103011],{"align":24009},[51,103012,103013],{},"\u003Cgeom>",[588,103015,103016],{"align":24009},"几何体、碰撞体、可视体",[543,103018,103019,103027],{},[588,103020,103021,25252,103024],{"align":24009},[51,103022,103023],{},"\u003Cjoint>",[51,103025,103026],{},"\u003Cfreejoint>",[588,103028,103029],{"align":24009},"关节",[543,103031,103032,103037],{},[588,103033,103034],{"align":24009},[51,103035,103036],{},"\u003Csite>",[588,103038,103039],{"align":24009},"标记点",[543,103041,103042,103047],{},[588,103043,103044],{"align":24009},[51,103045,103046],{},"\u003Cactuator>",[588,103048,103049],{"align":24009},"控制器",[19,103051,103052],{},"初学时可以先记住：",[138,103054,103057],{"className":103055,"code":103056,"language":5461,"meta":143},[5459],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[51,103058,103056],{"__ignoreMap":143},[14,103060,101042],{"id":101041},[19,103062,101045],{},[138,103064,103066],{"className":24095,"code":103065,"language":24097,"meta":143,"style":143},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[51,103067,103068],{"__ignoreMap":143},[147,103069,103070,103072,103074,103076,103078,103080,103082,103084],{"class":149,"line":150},[147,103071,24850],{"class":2237},[147,103073,26589],{"class":504},[147,103075,24107],{"class":504},[147,103077,26674],{"class":448},[147,103079,102773],{"class":504},[147,103081,101086],{"class":504},[147,103083,102778],{"class":504},[147,103085,103086],{"class":504}," glfw-devel\n",[19,103088,103089],{},"pip:",[138,103091,103092],{"className":24095,"code":101191,"language":24097,"meta":143,"style":143},[51,103093,103094],{"__ignoreMap":143},[147,103095,103096,103098,103100,103102],{"class":149,"line":150},[147,103097,24104],{"class":2237},[147,103099,24107],{"class":504},[147,103101,101202],{"class":504},[147,103103,101205],{"class":504},[19,103105,103106],{},"conda:",[138,103108,103110],{"className":24095,"code":103109,"language":24097,"meta":143,"style":143},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[51,103111,103112,103129,103138],{"__ignoreMap":143},[147,103113,103114,103116,103118,103120,103123,103125,103127],{"class":149,"line":150},[147,103115,30604],{"class":2237},[147,103117,29450],{"class":504},[147,103119,25389],{"class":448},[147,103121,103122],{"class":504}," mujoco-xml",[147,103124,101247],{"class":504},[147,103126,101250],{"class":448},[147,103128,101253],{"class":448},[147,103130,103131,103133,103135],{"class":149,"line":312},[147,103132,30604],{"class":2237},[147,103134,101260],{"class":504},[147,103136,103137],{"class":504}," mujoco-xml\n",[147,103139,103140,103142,103144,103146],{"class":149,"line":1454},[147,103141,24104],{"class":2237},[147,103143,24107],{"class":504},[147,103145,101202],{"class":504},[147,103147,101205],{"class":504},[19,103149,101276],{},[350,103151,103152,103155,103160],{},[353,103153,103154],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[353,103156,103157,103158,28659],{},"本章使用基础标签，适用于 ",[51,103159,101299],{},[353,103161,103162],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,103164,101317],{"id":101316},[19,103166,103167],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[138,103169,103171],{"className":53340,"code":103170,"language":53342,"meta":143,"style":143},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[51,103172,103173,103187,103195,103200,103208],{"__ignoreMap":143},[147,103174,103175,103177,103179,103181,103183,103185],{"class":149,"line":150},[147,103176,1309],{"class":157},[147,103178,101293],{"class":153},[147,103180,102047],{"class":2237},[147,103182,445],{"class":157},[147,103184,62952],{"class":504},[147,103186,51580],{"class":157},[147,103188,103189,103191,103193],{"class":149,"line":312},[147,103190,52417],{"class":157},[147,103192,102113],{"class":153},[147,103194,51580],{"class":157},[147,103196,103197],{"class":149,"line":1454},[147,103198,103199],{"class":157},"    ...\n",[147,103201,103202,103204,103206],{"class":149,"line":1469},[147,103203,52690],{"class":157},[147,103205,102113],{"class":153},[147,103207,51580],{"class":157},[147,103209,103210,103212,103214],{"class":149,"line":1475},[147,103211,52058],{"class":157},[147,103213,101293],{"class":153},[147,103215,51580],{"class":157},[19,103217,103218,103220,103221,103223,103224,103227],{},[51,103219,52073],{}," 表示刚体。",[51,103222,101392],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[51,103225,103226],{},"joint"," 表示刚体相对父刚体如何运动。",[367,103229,103230],{"id":103230},"层级结构非常重要",[19,103232,103233],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[138,103235,103238],{"className":103236,"code":103237,"language":5461,"meta":143},[5459],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[51,103239,103237],{"__ignoreMap":143},[19,103241,103242,101290,103245,103248,103249,103252],{},[51,103243,103244],{},"red_box_geom",[51,103246,103247],{},"box_center"," 都属于 ",[51,103250,103251],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[138,103254,103256],{"className":53340,"code":103255,"language":53342,"meta":143,"style":143},"\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",[51,103257,103258,103278,103292,103312],{"__ignoreMap":143},[147,103259,103260,103262,103264,103266,103268,103270,103272,103274,103276],{"class":149,"line":150},[147,103261,1309],{"class":157},[147,103263,52073],{"class":153},[147,103265,15193],{"class":2237},[147,103267,445],{"class":157},[147,103269,53764],{"class":504},[147,103271,101378],{"class":2237},[147,103273,445],{"class":157},[147,103275,101383],{"class":504},[147,103277,51580],{"class":157},[147,103279,103280,103282,103284,103286,103288,103290],{"class":149,"line":312},[147,103281,52417],{"class":157},[147,103283,101892],{"class":153},[147,103285,15193],{"class":2237},[147,103287,445],{"class":157},[147,103289,102233],{"class":504},[147,103291,101416],{"class":157},[147,103293,103294,103296,103298,103300,103302,103304,103306,103308,103310],{"class":149,"line":1454},[147,103295,52417],{"class":157},[147,103297,101392],{"class":153},[147,103299,54097],{"class":2237},[147,103301,445],{"class":157},[147,103303,53764],{"class":504},[147,103305,101408],{"class":2237},[147,103307,445],{"class":157},[147,103309,101413],{"class":504},[147,103311,101416],{"class":157},[147,103313,103314,103316,103318],{"class":149,"line":1469},[147,103315,52058],{"class":157},[147,103317,52073],{"class":153},[147,103319,51580],{"class":157},[19,103321,103322],{},"含义:",[350,103324,103325,103331,103336,103339],{},[353,103326,103327,103328,103330],{},"创建名为 ",[51,103329,53987],{}," 的刚体",[353,103332,103333,103334],{},"初始位置在世界坐标 ",[51,103335,101441],{},[353,103337,103338],{},"它有一个自由关节",[353,103340,103341],{},"它有一个盒子几何体",[367,103343,103344],{"id":103344},"坐标怎么理解",[19,103346,103347],{},"MuJoCo 默认使用三维坐标：",[138,103349,103352],{"className":103350,"code":103351,"language":5461,"meta":143},[5459],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[51,103353,103351],{"__ignoreMap":143},[19,103355,14906],{},[138,103357,103359],{"className":53340,"code":103358,"language":53342,"meta":143,"style":143},"pos=\"0 0 1\"\n",[51,103360,103361],{"__ignoreMap":143},[147,103362,103363],{"class":149,"line":150},[147,103364,103358],{"class":157},[19,103366,103367],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[367,103369,103371],{"id":103370},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,103373,103374,103375,82802,103378,103380],{},"不同 ",[51,103376,103377],{},"type",[51,103379,31770],{}," 含义不同：",[537,103382,103383,103398],{},[540,103384,103385],{},[543,103386,103387,103391,103396],{},[546,103388,103389],{"align":24009},[51,103390,103377],{},[546,103392,103393,103395],{"align":24009},[51,103394,31770],{}," 示例",[546,103397,100972],{"align":24009},[583,103399,103400,103414,103429,103448],{},[543,103401,103402,103406,103411],{},[588,103403,103404],{"align":24009},[51,103405,53987],{},[588,103407,103408],{"align":24009},[51,103409,103410],{},"size=\"0.1 0.2 0.3\"",[588,103412,103413],{"align":24009},"x\u002Fy\u002Fz 半边长，不是完整长度",[543,103415,103416,103421,103426],{},[588,103417,103418],{"align":24009},[51,103419,103420],{},"sphere",[588,103422,103423],{"align":24009},[51,103424,103425],{},"size=\"0.1\"",[588,103427,103428],{"align":24009},"球半径",[543,103430,103431,103436,103441],{},[588,103432,103433],{"align":24009},[51,103434,103435],{},"capsule",[588,103437,103438],{"align":24009},[51,103439,103440],{},"size=\"0.03\"",[588,103442,103443,103444,103447],{"align":24009},"胶囊半径，长度常用 ",[51,103445,103446],{},"fromto"," 指定",[543,103449,103450,103455,103460],{},[588,103451,103452],{"align":24009},[51,103453,103454],{},"plane",[588,103456,103457],{"align":24009},[51,103458,103459],{},"size=\"3 3 0.1\"",[588,103461,103462],{"align":24009},"可视平面大小，通常当地面",[19,103464,103465,103466,103468,103469,103471],{},"最容易踩坑的是 box：",[51,103467,102296],{}," 表示边长大约是 ",[51,103470,32311],{},"，因为 MuJoCo 用的是半边长。",[367,103473,103475],{"id":103474},"site-是什么","site 是什么",[19,103477,103478,103481],{},[51,103479,103480],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[350,103483,103484,103487,103490,103493],{},[353,103485,103486],{},"标记机械臂末端。",[353,103488,103489],{},"标记目标位置。",[353,103491,103492],{},"放传感器或相机参考点。",[353,103494,103495],{},"在 Python 中读取某个关键点的世界坐标。",[19,103497,103498,103499,101290,103502,103505],{},"在后面的 Reacher 任务中，",[51,103500,103501],{},"tip",[51,103503,103504],{},"target"," 就会用 site 表示。",[14,103507,101525],{"id":101524},[138,103509,103511],{"className":30652,"code":103510,"language":30654,"meta":143,"style":143},"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",[51,103512,103513,103519,103529,103533,103537,103545,103550,103554,103558,103562,103567,103571,103576,103581,103586,103591,103595,103599,103603,103607,103611,103615,103627,103639,103647,103651,103666,103681,103685,103698,103713,103726,103739,103743,103759,103763,103767,103778,103790,103802,103814,103818,103822,103834],{"__ignoreMap":143},[147,103514,103515,103517],{"class":149,"line":150},[147,103516,30666],{"class":397},[147,103518,101573],{"class":157},[147,103520,103521,103523,103525,103527],{"class":149,"line":312},[147,103522,30666],{"class":397},[147,103524,31654],{"class":157},[147,103526,31657],{"class":397},[147,103528,31660],{"class":157},[147,103530,103531],{"class":149,"line":1454},[147,103532,2674],{"emptyLinePlaceholder":324},[147,103534,103535],{"class":149,"line":1469},[147,103536,2674],{"emptyLinePlaceholder":324},[147,103538,103539,103541,103543],{"class":149,"line":1475},[147,103540,101586],{"class":448},[147,103542,13838],{"class":397},[147,103544,101591],{"class":504},[147,103546,103547],{"class":149,"line":1489},[147,103548,103549],{"class":504},"\u003Cmujoco model=\"xml_basic\">\n",[147,103551,103552],{"class":149,"line":1495},[147,103553,101601],{"class":504},[147,103555,103556],{"class":149,"line":1586},[147,103557,2674],{"emptyLinePlaceholder":324},[147,103559,103560],{"class":149,"line":1592},[147,103561,101610],{"class":504},[147,103563,103564],{"class":149,"line":1604},[147,103565,103566],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[147,103568,103569],{"class":149,"line":1886},[147,103570,2674],{"emptyLinePlaceholder":324},[147,103572,103573],{"class":149,"line":1891},[147,103574,103575],{"class":504},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[147,103577,103578],{"class":149,"line":1897},[147,103579,103580],{"class":504},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[147,103582,103583],{"class":149,"line":1902},[147,103584,103585],{"class":504},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[147,103587,103588],{"class":149,"line":1916},[147,103589,103590],{"class":504},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[147,103592,103593],{"class":149,"line":1921},[147,103594,101639],{"class":504},[147,103596,103597],{"class":149,"line":1927},[147,103598,101644],{"class":504},[147,103600,103601],{"class":149,"line":1948},[147,103602,101649],{"class":504},[147,103604,103605],{"class":149,"line":1953},[147,103606,95970],{"class":504},[147,103608,103609],{"class":149,"line":1967},[147,103610,2674],{"emptyLinePlaceholder":324},[147,103612,103613],{"class":149,"line":1972},[147,103614,2674],{"emptyLinePlaceholder":324},[147,103616,103617,103619,103621,103623,103625],{"class":149,"line":2001},[147,103618,32221],{"class":397},[147,103620,2247],{"class":2237},[147,103622,101670],{"class":157},[147,103624,95958],{"class":448},[147,103626,4013],{"class":157},[147,103628,103629,103631,103633,103635,103637],{"class":149,"line":2006},[147,103630,101679],{"class":157},[147,103632,445],{"class":397},[147,103634,101684],{"class":157},[147,103636,101586],{"class":448},[147,103638,407],{"class":157},[147,103640,103641,103643,103645],{"class":149,"line":2023},[147,103642,101693],{"class":157},[147,103644,445],{"class":397},[147,103646,101698],{"class":157},[147,103648,103649],{"class":149,"line":2028},[147,103650,2674],{"emptyLinePlaceholder":324},[147,103652,103653,103656,103658,103661,103664],{"class":149,"line":2033},[147,103654,103655],{"class":157},"    box_body_id ",[147,103657,445],{"class":397},[147,103659,103660],{"class":157}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[147,103662,103663],{"class":504},"\"red_box\"",[147,103665,407],{"class":157},[147,103667,103668,103671,103673,103676,103679],{"class":149,"line":2038},[147,103669,103670],{"class":157},"    site_id ",[147,103672,445],{"class":397},[147,103674,103675],{"class":157}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[147,103677,103678],{"class":504},"\"box_center\"",[147,103680,407],{"class":157},[147,103682,103683],{"class":149,"line":2052},[147,103684,2674],{"emptyLinePlaceholder":324},[147,103686,103687,103689,103692,103694,103696],{"class":149,"line":2057},[147,103688,3375],{"class":397},[147,103690,103691],{"class":157}," box_body_id ",[147,103693,1309],{"class":397},[147,103695,4367],{"class":448},[147,103697,4013],{"class":157},[147,103699,103700,103703,103706,103708,103711],{"class":149,"line":2851},[147,103701,103702],{"class":397},"        raise",[147,103704,103705],{"class":448}," RuntimeError",[147,103707,401],{"class":157},[147,103709,103710],{"class":504},"\"body red_box not found\"",[147,103712,407],{"class":157},[147,103714,103715,103717,103720,103722,103724],{"class":149,"line":2865},[147,103716,3375],{"class":397},[147,103718,103719],{"class":157}," site_id ",[147,103721,1309],{"class":397},[147,103723,4367],{"class":448},[147,103725,4013],{"class":157},[147,103727,103728,103730,103732,103734,103737],{"class":149,"line":2873},[147,103729,103702],{"class":397},[147,103731,103705],{"class":448},[147,103733,401],{"class":157},[147,103735,103736],{"class":504},"\"site box_center not found\"",[147,103738,407],{"class":157},[147,103740,103741],{"class":149,"line":2878},[147,103742,2674],{"emptyLinePlaceholder":324},[147,103744,103745,103747,103749,103751,103753,103755,103757],{"class":149,"line":2884},[147,103746,3475],{"class":397},[147,103748,101773],{"class":157},[147,103750,26317],{"class":397},[147,103752,32717],{"class":448},[147,103754,401],{"class":157},[147,103756,1996],{"class":448},[147,103758,31060],{"class":157},[147,103760,103761],{"class":149,"line":2890},[147,103762,101788],{"class":157},[147,103764,103765],{"class":149,"line":2895},[147,103766,2674],{"emptyLinePlaceholder":324},[147,103768,103769,103771,103773,103776],{"class":149,"line":8222},[147,103770,31573],{"class":448},[147,103772,401],{"class":157},[147,103774,103775],{"class":504},"\"simulation time:\"",[147,103777,101750],{"class":157},[147,103779,103780,103782,103784,103787],{"class":149,"line":8246},[147,103781,31573],{"class":448},[147,103783,401],{"class":157},[147,103785,103786],{"class":504},"\"box body position:\"",[147,103788,103789],{"class":157},", data.xpos[box_body_id].copy())\n",[147,103791,103792,103794,103796,103799],{"class":149,"line":8251},[147,103793,31573],{"class":448},[147,103795,401],{"class":157},[147,103797,103798],{"class":504},"\"site position:\"",[147,103800,103801],{"class":157},", data.site_xpos[site_id].copy())\n",[147,103803,103804,103806,103808,103811],{"class":149,"line":8257},[147,103805,31573],{"class":448},[147,103807,401],{"class":157},[147,103809,103810],{"class":504},"\"box qpos:\"",[147,103812,103813],{"class":157},", np.array(data.qpos))\n",[147,103815,103816],{"class":149,"line":8284},[147,103817,2674],{"emptyLinePlaceholder":324},[147,103819,103820],{"class":149,"line":8289},[147,103821,2674],{"emptyLinePlaceholder":324},[147,103823,103824,103826,103828,103830,103832],{"class":149,"line":8295},[147,103825,1805],{"class":397},[147,103827,31494],{"class":448},[147,103829,101831],{"class":397},[147,103831,101834],{"class":504},[147,103833,4013],{"class":157},[147,103835,103836],{"class":149,"line":8307},[147,103837,101841],{"class":157},[19,103839,103840],{},"保存为：",[138,103842,103844],{"className":24095,"code":103843,"language":24097,"meta":143,"style":143},"touch ch2_xml_basic.py\n",[51,103845,103846],{"__ignoreMap":143},[147,103847,103848,103850],{"class":149,"line":150},[147,103849,101555],{"class":2237},[147,103851,103852],{"class":504}," ch2_xml_basic.py\n",[19,103854,102573],{},[138,103856,103858],{"className":24095,"code":103857,"language":24097,"meta":143,"style":143},"python ch2_xml_basic.py\n",[51,103859,103860],{"__ignoreMap":143},[147,103861,103862,103864],{"class":149,"line":150},[147,103863,30654],{"class":2237},[147,103865,103852],{"class":504},[367,103867,101844],{"id":101844},[19,103869,103870],{},"用名字查找 body：",[138,103872,103874],{"className":30652,"code":103873,"language":30654,"meta":143,"style":143},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[51,103875,103876],{"__ignoreMap":143},[147,103877,103878,103881,103883,103885,103887],{"class":149,"line":150},[147,103879,103880],{"class":157},"box_body_id ",[147,103882,445],{"class":397},[147,103884,103660],{"class":157},[147,103886,103663],{"class":504},[147,103888,407],{"class":157},[19,103890,103891],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,103893,103894],{},"用名字查找 site：",[138,103896,103898],{"className":30652,"code":103897,"language":30654,"meta":143,"style":143},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[51,103899,103900],{"__ignoreMap":143},[147,103901,103902,103905,103907,103909,103911],{"class":149,"line":150},[147,103903,103904],{"class":157},"site_id ",[147,103906,445],{"class":397},[147,103908,103675],{"class":157},[147,103910,103678],{"class":504},[147,103912,407],{"class":157},[19,103914,103915,103916,103919,103920,103923],{},"注意第二个参数是对象类型。查 body 就用 ",[51,103917,103918],{},"mjOBJ_BODY","，查 site 就用 ",[51,103921,103922],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,103925,103926],{},"读取世界坐标：",[138,103928,103930],{"className":30652,"code":103929,"language":30654,"meta":143,"style":143},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[51,103931,103932,103937],{"__ignoreMap":143},[147,103933,103934],{"class":149,"line":150},[147,103935,103936],{"class":157},"data.xpos[box_body_id]\n",[147,103938,103939],{"class":149,"line":312},[147,103940,103941],{"class":157},"data.site_xpos[site_id]\n",[19,103943,103944,103947,103948,103951],{},[51,103945,103946],{},"xpos"," 是 body 的世界坐标，",[51,103949,103950],{},"site_xpos"," 是 site 的世界坐标。",[367,103953,101980],{"id":101980},[138,103955,103957],{"className":30652,"code":103956,"language":30654,"meta":143,"style":143},"import mujoco\nimport numpy as np\n",[51,103958,103959,103965],{"__ignoreMap":143},[147,103960,103961,103963],{"class":149,"line":150},[147,103962,30666],{"class":397},[147,103964,101573],{"class":157},[147,103966,103967,103969,103971,103973],{"class":149,"line":312},[147,103968,30666],{"class":397},[147,103970,31654],{"class":157},[147,103972,31657],{"class":397},[147,103974,31660],{"class":157},[19,103976,103977,103978,103981,103982,103985,103986,611,103989,28659],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[51,103979,103980],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[51,103983,103984],{},"as np"," 是习惯写法，后面就可以写 ",[51,103987,103988],{},"np.array(...)",[51,103990,103991],{},"np.round(...)",[138,103993,103994],{"className":30652,"code":101867,"language":30654,"meta":143,"style":143},[51,103995,103996,104004,104008],{"__ignoreMap":143},[147,103997,103998,104000,104002],{"class":149,"line":150},[147,103999,101586],{"class":448},[147,104001,13838],{"class":397},[147,104003,101591],{"class":504},[147,104005,104006],{"class":149,"line":312},[147,104007,101882],{"class":504},[147,104009,104010],{"class":149,"line":1454},[147,104011,95970],{"class":504},[19,104013,104014,104015,28659],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[51,104016,104017],{},"mujoco.MjModel.from_xml_string(XML)",[138,104019,104021],{"className":53340,"code":104020,"language":53342,"meta":143,"style":143},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[51,104022,104023],{"__ignoreMap":143},[147,104024,104025,104027,104029,104031,104033,104035,104037,104039,104042,104044,104046,104049,104051,104053,104056],{"class":149,"line":150},[147,104026,1309],{"class":157},[147,104028,103480],{"class":153},[147,104030,15193],{"class":2237},[147,104032,445],{"class":157},[147,104034,103678],{"class":504},[147,104036,101378],{"class":2237},[147,104038,445],{"class":157},[147,104040,104041],{"class":504},"\"0 0 0\"",[147,104043,101408],{"class":2237},[147,104045,445],{"class":157},[147,104047,104048],{"class":504},"\"0.03\"",[147,104050,79039],{"class":2237},[147,104052,445],{"class":157},[147,104054,104055],{"class":504},"\"0 1 0 1\"",[147,104057,101416],{"class":157},[19,104059,104060,104062,104063,104066,104067,104069,104070,104073],{},[51,104061,103480],{}," 是标记点。",[51,104064,104065],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[51,104068,103440],{}," 表示显示出来的小球大小。",[51,104071,104072],{},"rgba=\"0 1 0 1\""," 表示绿色。",[138,104075,104076],{"className":30652,"code":103873,"language":30654,"meta":143,"style":143},[51,104077,104078],{"__ignoreMap":143},[147,104079,104080,104082,104084,104086,104088],{"class":149,"line":150},[147,104081,103880],{"class":157},[147,104083,445],{"class":397},[147,104085,103660],{"class":157},[147,104087,103663],{"class":504},[147,104089,407],{"class":157},[19,104091,104092,104093,104095],{},"这行的作用是：根据名字 ",[51,104094,103663],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,104097,104098],{},"拆开看：",[350,104100,104101,104107,104112,104118],{},[353,104102,104103,104106],{},[51,104104,104105],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[353,104108,104109,104111],{},[51,104110,102357],{}," 是被查询的模型。",[353,104113,104114,104117],{},[51,104115,104116],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[353,104119,104120,104122],{},[51,104121,103663],{}," 是 XML 里写的名字。",[138,104124,104125],{"className":30652,"code":103897,"language":30654,"meta":143,"style":143},[51,104126,104127],{"__ignoreMap":143},[147,104128,104129,104131,104133,104135,104137],{"class":149,"line":150},[147,104130,103904],{"class":157},[147,104132,445],{"class":397},[147,104134,103675],{"class":157},[147,104136,103678],{"class":504},[147,104138,407],{"class":157},[19,104140,104141,104142,28659],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[51,104143,103678],{},[138,104145,104147],{"className":30652,"code":104146,"language":30654,"meta":143,"style":143},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[51,104148,104149,104161],{"__ignoreMap":143},[147,104150,104151,104153,104155,104157,104159],{"class":149,"line":150},[147,104152,1805],{"class":397},[147,104154,103691],{"class":157},[147,104156,1309],{"class":397},[147,104158,4367],{"class":448},[147,104160,4013],{"class":157},[147,104162,104163,104166,104168,104170,104172],{"class":149,"line":312},[147,104164,104165],{"class":397},"    raise",[147,104167,103705],{"class":448},[147,104169,401],{"class":157},[147,104171,103710],{"class":504},[147,104173,407],{"class":157},[19,104175,104176,104178,104179,104182,104183,104186,104187,104190],{},[51,104177,1805],{}," 是条件判断。",[51,104180,104181],{},"mj_name2id"," 找不到对象时会返回 ",[51,104184,104185],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[51,104188,104189],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[138,104192,104194],{"className":30652,"code":104193,"language":30654,"meta":143,"style":143},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[51,104195,104196,104212],{"__ignoreMap":143},[147,104197,104198,104200,104202,104204,104206,104208,104210],{"class":149,"line":150},[147,104199,3299],{"class":397},[147,104201,101773],{"class":157},[147,104203,26317],{"class":397},[147,104205,32717],{"class":448},[147,104207,401],{"class":157},[147,104209,1996],{"class":448},[147,104211,31060],{"class":157},[147,104213,104214],{"class":149,"line":312},[147,104215,101971],{"class":157},[19,104217,104218],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[138,104220,104222],{"className":30652,"code":104221,"language":30654,"meta":143,"style":143},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[51,104223,104224],{"__ignoreMap":143},[147,104225,104226,104228,104230,104232],{"class":149,"line":150},[147,104227,30689],{"class":448},[147,104229,401],{"class":157},[147,104231,103786],{"class":504},[147,104233,103789],{"class":157},[19,104235,104236,104238,104239,104242],{},[51,104237,101351],{}," 保存所有 body 的世界坐标。",[51,104240,104241],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[138,104244,104246],{"className":30652,"code":104245,"language":30654,"meta":143,"style":143},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[51,104247,104248],{"__ignoreMap":143},[147,104249,104250,104252,104254,104256],{"class":149,"line":150},[147,104251,30689],{"class":448},[147,104253,401],{"class":157},[147,104255,103798],{"class":504},[147,104257,103801],{"class":157},[19,104259,104260,104263,104264,104266],{},[51,104261,104262],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[51,104265,103247],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[138,104268,104270],{"className":30652,"code":104269,"language":30654,"meta":143,"style":143},"print(\"box qpos:\", np.array(data.qpos))\n",[51,104271,104272],{"__ignoreMap":143},[147,104273,104274,104276,104278,104280],{"class":149,"line":150},[147,104275,30689],{"class":448},[147,104277,401],{"class":157},[147,104279,103810],{"class":504},[147,104281,103813],{"class":157},[19,104283,104284,104285,104288],{},"这里打印广义位置数组。",[51,104286,104287],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,104290,102588],{"id":102587},[19,104292,104293,104294,104297,104298,28659],{},"程序会输出 ",[51,104295,104296],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[51,104299,104300],{},"qpos",[19,104302,104303,104305,104306,104309,104310,104313],{},[51,104304,104241],{}," 是 body 的世界坐标位置。",[51,104307,104308],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[51,104311,104312],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,104315,82494,104316,82802,104318,104320],{},[51,104317,103247],{},[51,104319,104065],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,104322,104323],{},"如果你把 site 改成：",[138,104325,104327],{"className":53340,"code":104326,"language":53342,"meta":143,"style":143},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[51,104328,104329],{"__ignoreMap":143},[147,104330,104331,104333,104335,104337,104339,104342,104344,104346,104349,104351,104353,104355,104357,104359,104361],{"class":149,"line":150},[147,104332,1309],{"class":157},[147,104334,103480],{"class":153},[147,104336,15193],{"class":2237},[147,104338,445],{"class":157},[147,104340,104341],{"class":504},"\"box_top\"",[147,104343,101378],{"class":2237},[147,104345,445],{"class":157},[147,104347,104348],{"class":504},"\"0 0 0.15\"",[147,104350,101408],{"class":2237},[147,104352,445],{"class":157},[147,104354,104048],{"class":504},[147,104356,79039],{"class":2237},[147,104358,445],{"class":157},[147,104360,104055],{"class":504},[147,104362,101416],{"class":157},[19,104364,104365,104366,104369],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[51,104367,104368],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,104371,102620],{"id":102619},[350,104373,104374,104383,104386,104393,104399,104410],{},[353,104375,102683,104376,104378,104379,102686,104381,28659],{},[51,104377,103251],{}," 的初始高度从 ",[51,104380,616],{},[51,104382,477],{},[353,104384,104385],{},"重新运行程序。",[353,104387,104388,104389,104392],{},"观察 ",[51,104390,104391],{},"box qpos"," 和最终位置是否变化。",[353,104394,104395,104396,104398],{},"故意把 ",[51,104397,103480],{}," 名称改错，确认程序能报错。",[353,104400,102683,104401,104403,104404,102686,104406,104409],{},[51,104402,101392],{}," 的颜色 ",[51,104405,102304],{},[51,104407,104408],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[353,104411,102683,104412,82802,104414,102686,104417,104420,104421,104423],{},[51,104413,103247],{},[51,104415,104416],{},"pos",[51,104418,104419],{},"0 0 0.2","，观察 ",[51,104422,104368],{}," 如何变化。",[14,104425,102725],{"id":102724},[367,104427,104429],{"id":104428},"xml-error-schema-violation",[51,104430,104431],{},"XML Error: Schema violation",[19,104433,104434],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[367,104436,104438,81562,104440],{"id":104437},"mj_name2id-返回-1",[51,104439,104181],{},[51,104441,104185],{},[19,104443,104444,104445,104448],{},"说明名字没有找到。检查 XML 中 ",[51,104446,104447],{},"name=\"...\"","，并确认对象类型正确。",[367,104450,104451],{"id":104451},"物体不下落",[19,104453,102795],{},[350,104455,104456,104461,104466],{},[353,104457,104458,104459],{},"body 是否有 ",[51,104460,101892],{},[353,104462,104463,104464],{},"gravity 是否为 ",[51,104465,102861],{},[353,104467,104468,104469,104471],{},"body 是否被固定在 ",[51,104470,102113],{}," 中",[367,104473,104474],{"id":104474},"坐标看起来不符合预期",[19,104476,104477],{},"先区分两种坐标：",[537,104479,104480,104489],{},[540,104481,104482],{},[543,104483,104484,104487],{},[546,104485,104486],{"align":24009},"坐标",[546,104488,100972],{"align":24009},[583,104490,104491,104501],{},[543,104492,104493,104498],{},[588,104494,104495,104496],{"align":24009},"XML 里的 ",[51,104497,104416],{},[588,104499,104500],{"align":24009},"相对父 body 的局部坐标",[543,104502,104503,104509],{},[588,104504,104505,25252,104507],{"align":24009},[51,104506,101351],{},[51,104508,104262],{},[588,104510,104511],{"align":24009},"仿真更新后的世界坐标",[19,104513,104514,104515,104517,104518,82811,104521,104523],{},"如果你修改了 ",[51,104516,101342],{},"，但还没调用 ",[51,104519,104520],{},"mj_forward",[51,104522,101487],{},"，世界坐标可能还没有更新。",[14,104525,102879],{"id":102878},[19,104527,104528],{},"MJCF 建模先掌握四件事：",[350,104530,104531,104536,104541,104546],{},[353,104532,104533,104535],{},[51,104534,52073],{}," 表示刚体层级。",[353,104537,104538,104540],{},[51,104539,101392],{}," 表示形状、碰撞和质量。",[353,104542,104543,104545],{},[51,104544,103226],{}," 决定 body 能不能动、怎么动。",[353,104547,104548,104550],{},[51,104549,103480],{}," 用来标记关键点，方便 Python 读取位置。",[19,104552,104553],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[308,104555,104556],{},"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":143,"searchDepth":312,"depth":312,"links":104558},[104559,104560,104561,104567,104571,104572,104573,104580],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":104562},[104563,104564,104565,104566],{"id":103230,"depth":1454,"text":103230},{"id":103344,"depth":1454,"text":103344},{"id":103370,"depth":1454,"text":103371},{"id":103474,"depth":1454,"text":103475},{"id":101524,"depth":312,"text":101525,"children":104568},[104569,104570],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":104574},[104575,104576,104578,104579],{"id":104428,"depth":1454,"text":104431},{"id":104437,"depth":1454,"text":104577},"mj_name2id 返回 -1",{"id":104451,"depth":1454,"text":104451},{"id":104474,"depth":1454,"text":104474},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102926,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104587,"title":104588,"body":104589,"description":143,"extension":322,"meta":106084,"navigation":324,"path":106085,"seo":106086,"stem":106087,"__hash__":106088},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104590,"toc":106056},[104591,104594,104596,104599,104602,104640,104643,104649,104652,104654,104656,104683,104685,104699,104701,104742,104744,104768,104770,104773,104782,104791,104794,104803,104811,104820,104823,104833,104836,104888,104895,104901,104909,104957,104960,104979,104982,104990,104994,105003,105036,105038,105386,105388,105400,105402,105413,105415,105418,105439,105445,105448,105473,105483,105486,105494,105497,105500,105521,105532,105534,105554,105557,105578,105587,105606,105612,105637,105640,105654,105661,105685,105688,105696,105705,105721,105733,105741,105750,105752,105755,105779,105784,105787,105809,105811,105850,105852,105859,105861,105869,105872,105875,105887,105928,105935,105946,105953,105956,106005,106008,106011,106017,106019,106024,106050,106053],[10,104592,104588],{"id":104593},"_3python-控制接口读取状态与推进仿真",[14,104595,100919],{"id":100918},[19,104597,104598],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,104600,104601],{},"你将学习:",[350,104603,104604,104609,104614,104618,104623,104634],{},[353,104605,104606],{},[51,104607,104608],{},"MjModel.from_xml_string",[353,104610,104611],{},[51,104612,104613],{},"MjData(model)",[353,104615,104616],{},[51,104617,101487],{},[353,104619,104620],{},[51,104621,104622],{},"mj_resetData",[353,104624,104625,104626,611,104628,611,104631],{},"读取 ",[51,104627,104300],{},[51,104629,104630],{},"qvel",[51,104632,104633],{},"ctrl",[353,104635,104636,104637],{},"使用 ",[51,104638,104639],{},"model.opt.timestep",[19,104641,104642],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[138,104644,104647],{"className":104645,"code":104646,"language":5461,"meta":143},[5459],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[51,104648,104646],{"__ignoreMap":143},[19,104650,104651],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,104653,101042],{"id":101041},[19,104655,101045],{},[138,104657,104659],{"className":24095,"code":104658,"language":24097,"meta":143,"style":143},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[51,104660,104661],{"__ignoreMap":143},[147,104662,104663,104665,104667,104669,104671,104674,104676,104678,104680],{"class":149,"line":150},[147,104664,24850],{"class":2237},[147,104666,26589],{"class":504},[147,104668,24107],{"class":504},[147,104670,26674],{"class":448},[147,104672,104673],{"class":504}," python3",[147,104675,101070],{"class":504},[147,104677,102773],{"class":504},[147,104679,101086],{"class":504},[147,104681,104682],{"class":504}," glfw\n",[19,104684,103089],{},[138,104686,104687],{"className":24095,"code":101191,"language":24097,"meta":143,"style":143},[51,104688,104689],{"__ignoreMap":143},[147,104690,104691,104693,104695,104697],{"class":149,"line":150},[147,104692,24104],{"class":2237},[147,104694,24107],{"class":504},[147,104696,101202],{"class":504},[147,104698,101205],{"class":504},[19,104700,103106],{},[138,104702,104704],{"className":24095,"code":104703,"language":24097,"meta":143,"style":143},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[51,104705,104706,104723,104732],{"__ignoreMap":143},[147,104707,104708,104710,104712,104714,104717,104719,104721],{"class":149,"line":150},[147,104709,30604],{"class":2237},[147,104711,29450],{"class":504},[147,104713,25389],{"class":448},[147,104715,104716],{"class":504}," mujoco-python-api",[147,104718,101247],{"class":504},[147,104720,101250],{"class":448},[147,104722,101253],{"class":448},[147,104724,104725,104727,104729],{"class":149,"line":312},[147,104726,30604],{"class":2237},[147,104728,101260],{"class":504},[147,104730,104731],{"class":504}," mujoco-python-api\n",[147,104733,104734,104736,104738,104740],{"class":149,"line":1454},[147,104735,24104],{"class":2237},[147,104737,24107],{"class":504},[147,104739,101202],{"class":504},[147,104741,101205],{"class":504},[19,104743,101276],{},[350,104745,104746,104753,104762],{},[353,104747,104748,101290,104750,104752],{},[51,104749,100947],{},[51,104751,100952],{}," 是官方 Python bindings 的类名。",[353,104754,104755,104756,104759,104760,28659],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[51,104757,104758],{},"mjModel"," 在 Python 中是 ",[51,104761,100981],{},[353,104763,104764,104765,28659],{},"不要使用 ",[51,104766,104767],{},"sim = mujoco_py.MjSim(...)",[14,104769,101317],{"id":101316},[19,104771,104772],{},"仿真推进核心代码:",[138,104774,104776],{"className":30652,"code":104775,"language":30654,"meta":143,"style":143},"mujoco.mj_step(model, data)\n",[51,104777,104778],{"__ignoreMap":143},[147,104779,104780],{"class":149,"line":150},[147,104781,104775],{"class":157},[19,104783,104784,104785,611,104787,611,104789,28659],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[51,104786,101342],{},[51,104788,101345],{},[51,104790,101339],{},[19,104792,104793],{},"重置仿真:",[138,104795,104797],{"className":30652,"code":104796,"language":30654,"meta":143,"style":143},"mujoco.mj_resetData(model, data)\n",[51,104798,104799],{"__ignoreMap":143},[147,104800,104801],{"class":149,"line":150},[147,104802,104796],{"class":157},[19,104804,104805,104806,82811,104808,104810],{},"如果手动修改了 ",[51,104807,101342],{},[51,104809,101345],{},"，通常应调用:",[138,104812,104814],{"className":30652,"code":104813,"language":30654,"meta":143,"style":143},"mujoco.mj_forward(model, data)\n",[51,104815,104816],{"__ignoreMap":143},[147,104817,104818],{"class":149,"line":150},[147,104819,104813],{"class":157},[19,104821,104822],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[367,104824,104826,611,104828,611,104830,104832],{"id":104825},"qposqvelctrl-是什么",[51,104827,104300],{},[51,104829,104630],{},[51,104831,104633],{}," 是什么",[19,104834,104835],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[537,104837,104838,104850],{},[540,104839,104840],{},[543,104841,104842,104845,104847],{},[546,104843,104844],{"align":24009},"字段",[546,104846,100972],{"align":24009},[546,104848,104849],{"align":24009},"谁来修改",[583,104851,104852,104864,104876],{},[543,104853,104854,104858,104861],{},[588,104855,104856],{"align":24009},[51,104857,101342],{},[588,104859,104860],{"align":24009},"广义位置，例如小车位置、关节角、自由物体位置姿态",[588,104862,104863],{"align":24009},"MuJoCo 更新，也可以手动设置初始状态",[543,104865,104866,104870,104873],{},[588,104867,104868],{"align":24009},[51,104869,101345],{},[588,104871,104872],{"align":24009},"广义速度，例如小车速度、关节角速度",[588,104874,104875],{"align":24009},"MuJoCo 更新，也可以手动清零",[543,104877,104878,104882,104885],{},[588,104879,104880],{"align":24009},[51,104881,101348],{},[588,104883,104884],{"align":24009},"actuator 的控制输入",[588,104886,104887],{"align":24009},"主要由你的控制代码写入",[19,104889,9299,104890,101290,104892,104894],{},[51,104891,104300],{},[51,104893,104630],{}," 不一定同维。自由刚体就是典型例子：",[138,104896,104899],{"className":104897,"code":104898,"language":5461,"meta":143},[5459],"freejoint: qpos 7 维，qvel 6 维\n",[51,104900,104898],{"__ignoreMap":143},[367,104902,104904,101290,104906,104908],{"id":104903},"mj_step-和-mj_forward-的区别",[51,104905,101487],{},[51,104907,104520],{}," 的区别",[537,104910,104911,104924],{},[540,104912,104913],{},[543,104914,104915,104918,104921],{},[546,104916,104917],{"align":24009},"函数",[546,104919,104920],{"align":24009},"是否推进时间",[546,104922,104923],{"align":24009},"什么时候用",[583,104925,104926,104939],{},[543,104927,104928,104933,104936],{},[588,104929,104930],{"align":24009},[51,104931,104932],{},"mj_step(model, data)",[588,104934,104935],{"align":24009},"是",[588,104937,104938],{"align":24009},"正常仿真循环，每调用一次前进一步",[543,104940,104941,104946,104949],{},[588,104942,104943],{"align":24009},[51,104944,104945],{},"mj_forward(model, data)",[588,104947,104948],{"align":24009},"否",[588,104950,104951,104952,611,104954,104956],{"align":24009},"手动改了 ",[51,104953,104300],{},[51,104955,104630],{}," 后，刷新派生量",[19,104958,104959],{},"例如你写：",[138,104961,104963],{"className":30652,"code":104962,"language":30654,"meta":143,"style":143},"data.qpos[2] = 2.0\n",[51,104964,104965],{"__ignoreMap":143},[147,104966,104967,104970,104972,104974,104976],{"class":149,"line":150},[147,104968,104969],{"class":157},"data.qpos[",[147,104971,477],{"class":448},[147,104973,4717],{"class":157},[147,104975,445],{"class":397},[147,104977,104978],{"class":448}," 2.0\n",[19,104980,104981],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[138,104983,104984],{"className":30652,"code":104813,"language":30654,"meta":143,"style":143},[51,104985,104986],{"__ignoreMap":143},[147,104987,104988],{"class":149,"line":150},[147,104989,104813],{"class":157},[367,104991,104993],{"id":104992},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,104995,104996,104999,105000,105002],{},[51,104997,104998],{},"mujoco.mj_resetData(model, data)"," 会把 ",[51,105001,33675],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[138,105004,105006],{"className":30652,"code":105005,"language":30654,"meta":143,"style":143},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[51,105007,105008,105012,105022,105032],{"__ignoreMap":143},[147,105009,105010],{"class":149,"line":150},[147,105011,104796],{"class":157},[147,105013,105014,105017,105019],{"class":149,"line":312},[147,105015,105016],{"class":157},"data.qpos[:] ",[147,105018,445],{"class":397},[147,105020,105021],{"class":157}," random_qpos\n",[147,105023,105024,105027,105029],{"class":149,"line":1454},[147,105025,105026],{"class":157},"data.qvel[:] ",[147,105028,445],{"class":397},[147,105030,105031],{"class":448}," 0.0\n",[147,105033,105034],{"class":149,"line":1469},[147,105035,104813],{"class":157},[14,105037,101525],{"id":101524},[138,105039,105041],{"className":30652,"code":105040,"language":30654,"meta":143,"style":143},"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",[51,105042,105043,105049,105059,105063,105067,105075,105080,105084,105088,105092,105097,105101,105106,105111,105116,105120,105124,105128,105132,105136,105140,105159,105166,105178,105189,105205,105221,105225,105229,105241,105253,105261,105265,105276,105280,105296,105300,105304,105313,105317,105322,105331,105335,105348,105353,105362,105366,105370,105382],{"__ignoreMap":143},[147,105044,105045,105047],{"class":149,"line":150},[147,105046,30666],{"class":397},[147,105048,101573],{"class":157},[147,105050,105051,105053,105055,105057],{"class":149,"line":312},[147,105052,30666],{"class":397},[147,105054,31654],{"class":157},[147,105056,31657],{"class":397},[147,105058,31660],{"class":157},[147,105060,105061],{"class":149,"line":1454},[147,105062,2674],{"emptyLinePlaceholder":324},[147,105064,105065],{"class":149,"line":1469},[147,105066,2674],{"emptyLinePlaceholder":324},[147,105068,105069,105071,105073],{"class":149,"line":1475},[147,105070,101586],{"class":448},[147,105072,13838],{"class":397},[147,105074,101591],{"class":504},[147,105076,105077],{"class":149,"line":1489},[147,105078,105079],{"class":504},"\u003Cmujoco model=\"state_api\">\n",[147,105081,105082],{"class":149,"line":1495},[147,105083,101601],{"class":504},[147,105085,105086],{"class":149,"line":1586},[147,105087,2674],{"emptyLinePlaceholder":324},[147,105089,105090],{"class":149,"line":1592},[147,105091,101610],{"class":504},[147,105093,105094],{"class":149,"line":1604},[147,105095,105096],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[147,105098,105099],{"class":149,"line":1886},[147,105100,2674],{"emptyLinePlaceholder":324},[147,105102,105103],{"class":149,"line":1891},[147,105104,105105],{"class":504},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[147,105107,105108],{"class":149,"line":1897},[147,105109,105110],{"class":504},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[147,105112,105113],{"class":149,"line":1902},[147,105114,105115],{"class":504},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[147,105117,105118],{"class":149,"line":1916},[147,105119,101639],{"class":504},[147,105121,105122],{"class":149,"line":1921},[147,105123,101644],{"class":504},[147,105125,105126],{"class":149,"line":1927},[147,105127,101649],{"class":504},[147,105129,105130],{"class":149,"line":1948},[147,105131,95970],{"class":504},[147,105133,105134],{"class":149,"line":1953},[147,105135,2674],{"emptyLinePlaceholder":324},[147,105137,105138],{"class":149,"line":1967},[147,105139,2674],{"emptyLinePlaceholder":324},[147,105141,105142,105144,105147,105150,105152,105155,105157],{"class":149,"line":1972},[147,105143,32221],{"class":397},[147,105145,105146],{"class":2237}," print_state",[147,105148,105149],{"class":157},"(prefix: ",[147,105151,1574],{"class":448},[147,105153,105154],{"class":157},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[147,105156,95958],{"class":448},[147,105158,4013],{"class":157},[147,105160,105161,105163],{"class":149,"line":2001},[147,105162,31573],{"class":448},[147,105164,105165],{"class":157},"(prefix)\n",[147,105167,105168,105170,105172,105175],{"class":149,"line":2006},[147,105169,31573],{"class":448},[147,105171,401],{"class":157},[147,105173,105174],{"class":504},"\"  timestep:\"",[147,105176,105177],{"class":157},", model.opt.timestep)\n",[147,105179,105180,105182,105184,105187],{"class":149,"line":2023},[147,105181,31573],{"class":448},[147,105183,401],{"class":157},[147,105185,105186],{"class":504},"\"  time:\"",[147,105188,101750],{"class":157},[147,105190,105191,105193,105195,105198,105201,105203],{"class":149,"line":2028},[147,105192,31573],{"class":448},[147,105194,401],{"class":157},[147,105196,105197],{"class":504},"\"  qpos:\"",[147,105199,105200],{"class":157},", np.round(data.qpos.copy(), ",[147,105202,692],{"class":448},[147,105204,30771],{"class":157},[147,105206,105207,105209,105211,105214,105217,105219],{"class":149,"line":2033},[147,105208,31573],{"class":448},[147,105210,401],{"class":157},[147,105212,105213],{"class":504},"\"  qvel:\"",[147,105215,105216],{"class":157},", np.round(data.qvel.copy(), ",[147,105218,692],{"class":448},[147,105220,30771],{"class":157},[147,105222,105223],{"class":149,"line":2038},[147,105224,2674],{"emptyLinePlaceholder":324},[147,105226,105227],{"class":149,"line":2052},[147,105228,2674],{"emptyLinePlaceholder":324},[147,105230,105231,105233,105235,105237,105239],{"class":149,"line":2057},[147,105232,32221],{"class":397},[147,105234,2247],{"class":2237},[147,105236,101670],{"class":157},[147,105238,95958],{"class":448},[147,105240,4013],{"class":157},[147,105242,105243,105245,105247,105249,105251],{"class":149,"line":2851},[147,105244,101679],{"class":157},[147,105246,445],{"class":397},[147,105248,101684],{"class":157},[147,105250,101586],{"class":448},[147,105252,407],{"class":157},[147,105254,105255,105257,105259],{"class":149,"line":2865},[147,105256,101693],{"class":157},[147,105258,445],{"class":397},[147,105260,101698],{"class":157},[147,105262,105263],{"class":149,"line":2873},[147,105264,2674],{"emptyLinePlaceholder":324},[147,105266,105267,105270,105273],{"class":149,"line":2878},[147,105268,105269],{"class":157},"    print_state(",[147,105271,105272],{"class":504},"\"initial\"",[147,105274,105275],{"class":157},", model, data)\n",[147,105277,105278],{"class":149,"line":2884},[147,105279,2674],{"emptyLinePlaceholder":324},[147,105281,105282,105284,105286,105288,105290,105292,105294],{"class":149,"line":2890},[147,105283,3475],{"class":397},[147,105285,101773],{"class":157},[147,105287,26317],{"class":397},[147,105289,32717],{"class":448},[147,105291,401],{"class":157},[147,105293,1055],{"class":448},[147,105295,31060],{"class":157},[147,105297,105298],{"class":149,"line":2895},[147,105299,101788],{"class":157},[147,105301,105302],{"class":149,"line":8222},[147,105303,2674],{"emptyLinePlaceholder":324},[147,105305,105306,105308,105311],{"class":149,"line":8246},[147,105307,105269],{"class":157},[147,105309,105310],{"class":504},"\"after 50 steps\"",[147,105312,105275],{"class":157},[147,105314,105315],{"class":149,"line":8251},[147,105316,2674],{"emptyLinePlaceholder":324},[147,105318,105319],{"class":149,"line":8257},[147,105320,105321],{"class":157},"    mujoco.mj_resetData(model, data)\n",[147,105323,105324,105326,105329],{"class":149,"line":8284},[147,105325,105269],{"class":157},[147,105327,105328],{"class":504},"\"after reset\"",[147,105330,105275],{"class":157},[147,105332,105333],{"class":149,"line":8289},[147,105334,2674],{"emptyLinePlaceholder":324},[147,105336,105337,105340,105342,105344,105346],{"class":149,"line":8295},[147,105338,105339],{"class":157},"    data.qpos[",[147,105341,477],{"class":448},[147,105343,4717],{"class":157},[147,105345,445],{"class":397},[147,105347,104978],{"class":448},[147,105349,105350],{"class":149,"line":8307},[147,105351,105352],{"class":157},"    mujoco.mj_forward(model, data)\n",[147,105354,105355,105357,105360],{"class":149,"line":8319},[147,105356,105269],{"class":157},[147,105358,105359],{"class":504},"\"after manual qpos edit\"",[147,105361,105275],{"class":157},[147,105363,105364],{"class":149,"line":8331},[147,105365,2674],{"emptyLinePlaceholder":324},[147,105367,105368],{"class":149,"line":9990},[147,105369,2674],{"emptyLinePlaceholder":324},[147,105371,105372,105374,105376,105378,105380],{"class":149,"line":10015},[147,105373,1805],{"class":397},[147,105375,31494],{"class":448},[147,105377,101831],{"class":397},[147,105379,101834],{"class":504},[147,105381,4013],{"class":157},[147,105383,105384],{"class":149,"line":10038},[147,105385,101841],{"class":157},[19,105387,103840],{},[138,105389,105391],{"className":24095,"code":105390,"language":24097,"meta":143,"style":143},"touch ch3_python_state.py\n",[51,105392,105393],{"__ignoreMap":143},[147,105394,105395,105397],{"class":149,"line":150},[147,105396,101555],{"class":2237},[147,105398,105399],{"class":504}," ch3_python_state.py\n",[19,105401,102573],{},[138,105403,105405],{"className":24095,"code":105404,"language":24097,"meta":143,"style":143},"python ch3_python_state.py\n",[51,105406,105407],{"__ignoreMap":143},[147,105408,105409,105411],{"class":149,"line":150},[147,105410,30654],{"class":2237},[147,105412,105399],{"class":504},[367,105414,101844],{"id":101844},[19,105416,105417],{},"打印状态的函数：",[138,105419,105421],{"className":30652,"code":105420,"language":30654,"meta":143,"style":143},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[51,105422,105423],{"__ignoreMap":143},[147,105424,105425,105427,105429,105431,105433,105435,105437],{"class":149,"line":150},[147,105426,32221],{"class":397},[147,105428,105146],{"class":2237},[147,105430,105149],{"class":157},[147,105432,1574],{"class":448},[147,105434,105154],{"class":157},[147,105436,95958],{"class":448},[147,105438,4013],{"class":157},[19,105440,105441,105442,105444],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[51,105443,33675],{}," 里发生了什么。",[19,105446,105447],{},"推进 50 步：",[138,105449,105451],{"className":30652,"code":105450,"language":30654,"meta":143,"style":143},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[51,105452,105453,105469],{"__ignoreMap":143},[147,105454,105455,105457,105459,105461,105463,105465,105467],{"class":149,"line":150},[147,105456,3299],{"class":397},[147,105458,101773],{"class":157},[147,105460,26317],{"class":397},[147,105462,32717],{"class":448},[147,105464,401],{"class":157},[147,105466,1055],{"class":448},[147,105468,31060],{"class":157},[147,105470,105471],{"class":149,"line":312},[147,105472,101971],{"class":157},[19,105474,105475,105476,105479,105480,105482],{},"由于 ",[51,105477,105478],{},"timestep=0.01","，所以 50 步后时间约为 ",[51,105481,35603],{}," 秒。",[19,105484,105485],{},"重置：",[138,105487,105488],{"className":30652,"code":104796,"language":30654,"meta":143,"style":143},[51,105489,105490],{"__ignoreMap":143},[147,105491,105492],{"class":149,"line":150},[147,105493,104796],{"class":157},[19,105495,105496],{},"这会把时间、位置、速度恢复到初始状态。",[19,105498,105499],{},"手动改高度：",[138,105501,105503],{"className":30652,"code":105502,"language":30654,"meta":143,"style":143},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[51,105504,105505,105517],{"__ignoreMap":143},[147,105506,105507,105509,105511,105513,105515],{"class":149,"line":150},[147,105508,104969],{"class":157},[147,105510,477],{"class":448},[147,105512,4717],{"class":157},[147,105514,445],{"class":397},[147,105516,104978],{"class":448},[147,105518,105519],{"class":149,"line":312},[147,105520,104813],{"class":157},[19,105522,105523,105524,105527,105528,105531],{},"这个例子里 ",[51,105525,105526],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[51,105529,105530],{},"2.0"," 表示把小球放到更高的位置。",[367,105533,101980],{"id":101980},[138,105535,105536],{"className":30652,"code":105420,"language":30654,"meta":143,"style":143},[51,105537,105538],{"__ignoreMap":143},[147,105539,105540,105542,105544,105546,105548,105550,105552],{"class":149,"line":150},[147,105541,32221],{"class":397},[147,105543,105146],{"class":2237},[147,105545,105149],{"class":157},[147,105547,1574],{"class":448},[147,105549,105154],{"class":157},[147,105551,95958],{"class":448},[147,105553,4013],{"class":157},[19,105555,105556],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[350,105558,105559,105568,105573],{},[353,105560,105561,105564,105565,105567],{},[51,105562,105563],{},"prefix","：一段文字，比如 ",[51,105566,105272],{},"，用来说明现在打印的是哪个阶段。",[353,105569,105570,105572],{},[51,105571,102357],{},"：MuJoCo 模型。",[353,105574,105575,105577],{},[51,105576,33675],{},"：MuJoCo 当前状态。",[19,105579,105580,611,105583,105586],{},[51,105581,105582],{},"prefix: str",[51,105584,105585],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[138,105588,105590],{"className":30652,"code":105589,"language":30654,"meta":143,"style":143},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[51,105591,105592],{"__ignoreMap":143},[147,105593,105594,105596,105598,105600,105602,105604],{"class":149,"line":150},[147,105595,30689],{"class":448},[147,105597,401],{"class":157},[147,105599,105197],{"class":504},[147,105601,105200],{"class":157},[147,105603,692],{"class":448},[147,105605,30771],{"class":157},[19,105607,105608,105611],{},[51,105609,105610],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[138,105613,105615],{"className":30652,"code":105614,"language":30654,"meta":143,"style":143},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[51,105616,105617,105629],{"__ignoreMap":143},[147,105618,105619,105621,105623,105625,105627],{"class":149,"line":150},[147,105620,101906],{"class":157},[147,105622,445],{"class":397},[147,105624,101684],{"class":157},[147,105626,101586],{"class":448},[147,105628,407],{"class":157},[147,105630,105631,105633,105635],{"class":149,"line":312},[147,105632,101930],{"class":157},[147,105634,445],{"class":397},[147,105636,101698],{"class":157},[19,105638,105639],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[138,105641,105643],{"className":30652,"code":105642,"language":30654,"meta":143,"style":143},"print_state(\"initial\", model, data)\n",[51,105644,105645],{"__ignoreMap":143},[147,105646,105647,105650,105652],{"class":149,"line":150},[147,105648,105649],{"class":157},"print_state(",[147,105651,105272],{"class":504},[147,105653,105275],{"class":157},[19,105655,105656,105657,105660],{},"调用刚才定义的 ",[51,105658,105659],{},"print_state"," 函数，打印初始状态。",[138,105662,105663],{"className":30652,"code":105450,"language":30654,"meta":143,"style":143},[51,105664,105665,105681],{"__ignoreMap":143},[147,105666,105667,105669,105671,105673,105675,105677,105679],{"class":149,"line":150},[147,105668,3299],{"class":397},[147,105670,101773],{"class":157},[147,105672,26317],{"class":397},[147,105674,32717],{"class":448},[147,105676,401],{"class":157},[147,105678,1055],{"class":448},[147,105680,31060],{"class":157},[147,105682,105683],{"class":149,"line":312},[147,105684,101971],{"class":157},[19,105686,105687],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[138,105689,105690],{"className":30652,"code":104796,"language":30654,"meta":143,"style":143},[51,105691,105692],{"__ignoreMap":143},[147,105693,105694],{"class":149,"line":150},[147,105695,104796],{"class":157},[19,105697,105698,105699,105701,105702,105704],{},"重置 ",[51,105700,33675],{},"。注意它不会重新创建 ",[51,105703,102357],{},"，因为模型结构没有变，只是状态回到初始值。",[138,105706,105707],{"className":30652,"code":104962,"language":30654,"meta":143,"style":143},[51,105708,105709],{"__ignoreMap":143},[147,105710,105711,105713,105715,105717,105719],{"class":149,"line":150},[147,105712,104969],{"class":157},[147,105714,477],{"class":448},[147,105716,4717],{"class":157},[147,105718,445],{"class":397},[147,105720,104978],{"class":448},[19,105722,105723,105724,611,105727,611,105730,105732],{},"这行是“手动改状态”。在 freejoint 中，",[51,105725,105726],{},"qpos[0]",[51,105728,105729],{},"qpos[1]",[51,105731,105526],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[138,105734,105735],{"className":30652,"code":104813,"language":30654,"meta":143,"style":143},[51,105736,105737],{"__ignoreMap":143},[147,105738,105739],{"class":149,"line":150},[147,105740,104813],{"class":157},[19,105742,105743,105744,105746,105747,105749],{},"手动改完 ",[51,105745,104300],{}," 后，调用 ",[51,105748,104520],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,105751,102588],{"id":102587},[19,105753,105754],{},"你会看到:",[350,105756,105757,105762,105767,105770],{},[353,105758,105759,105760],{},"初始时间为 ",[51,105761,590],{},[353,105763,105764,105765],{},"50 步后时间约为 ",[51,105766,35603],{},[353,105768,105769],{},"reset 后状态恢复",[353,105771,105772,105773,105776,105777],{},"手动修改 ",[51,105774,105775],{},"data.qpos[2]"," 后，小球高度变为 ",[51,105778,105530],{},[19,105780,105781,105783],{},[51,105782,105526],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,105785,105786],{},"输出里可以重点看三件事：",[350,105788,105789,105797,105802],{},[353,105790,105791,105793,105794,105796],{},[51,105792,2661],{}," 是否随着 ",[51,105795,101487],{}," 增加。",[353,105798,105799,105801],{},[51,105800,104300],{}," 的 z 坐标是否因为下落而变化。",[353,105803,105804,105806,105807,28659],{},[51,105805,104622],{}," 后时间是否回到 ",[51,105808,590],{},[14,105810,102620],{"id":102619},[350,105812,105813,105819,105825,105831,105834,105843],{},[353,105814,105815,105816,28659],{},"修改 timestep 为 ",[51,105817,105818],{},"0.005",[353,105820,105821,105822,28659],{},"重新运行，检查 50 步后时间是否约为 ",[51,105823,105824],{},"0.25",[353,105826,105827,105828,28659],{},"修改重力为 ",[51,105829,105830],{},"0 0 -1.0",[353,105832,105833],{},"观察小球下降速度是否变慢。",[353,105835,102683,105836,102686,105839,105842],{},[51,105837,105838],{},"data.qpos[2] = 2.0",[51,105840,105841],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[353,105844,105845,105846,105849],{},"注释掉 ",[51,105847,105848],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,105851,102725],{"id":102724},[367,105853,105855,105856,105858],{"id":105854},"修改-dataqpos-后位置没有更新","修改 ",[51,105857,101342],{}," 后位置没有更新",[19,105860,102734],{},[138,105862,105863],{"className":30652,"code":104813,"language":30654,"meta":143,"style":143},[51,105864,105865],{"__ignoreMap":143},[147,105866,105867],{"class":149,"line":150},[147,105868,104813],{"class":157},[367,105870,105871],{"id":105871},"数组维度看不懂",[19,105873,105874],{},"打印模型维度:",[138,105876,105878],{"className":30652,"code":105877,"language":30654,"meta":143,"style":143},"print(model.nq, model.nv, model.nu)\n",[51,105879,105880],{"__ignoreMap":143},[147,105881,105882,105884],{"class":149,"line":150},[147,105883,30689],{"class":448},[147,105885,105886],{"class":157},"(model.nq, model.nv, model.nu)\n",[537,105888,105889,105897],{},[540,105890,105891],{},[543,105892,105893,105895],{},[546,105894,104844],{"align":24009},[546,105896,100972],{"align":24009},[583,105898,105899,105909,105919],{},[543,105900,105901,105906],{},[588,105902,105903],{"align":24009},[51,105904,105905],{},"nq",[588,105907,105908],{"align":24009},"位置变量数量",[543,105910,105911,105916],{},[588,105912,105913],{"align":24009},[51,105914,105915],{},"nv",[588,105917,105918],{"align":24009},"速度变量数量",[543,105920,105921,105925],{},[588,105922,105923],{"align":24009},[51,105924,102434],{},[588,105926,105927],{"align":24009},"控制输入数量",[367,105929,105931,105932,105934],{"id":105930},"误以为-qpos-一定等于关节数","误以为 ",[51,105933,104300],{}," 一定等于关节数",[19,105936,105937,105938,82802,105940,105942,105943,105945],{},"不是。例如 ",[51,105939,101892],{},[51,105941,104300],{}," 是 7 维，但 ",[51,105944,104630],{}," 是 6 维。",[367,105947,105949,105950,105952],{"id":105948},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[51,105951,104300],{}," 的第几位",[19,105954,105955],{},"初学时可以先打印：",[138,105957,105959],{"className":30652,"code":105958,"language":30654,"meta":143,"style":143},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[51,105960,105961,105971,105981,105993],{"__ignoreMap":143},[147,105962,105963,105965,105967,105969],{"class":149,"line":150},[147,105964,30689],{"class":448},[147,105966,401],{"class":157},[147,105968,101711],{"class":504},[147,105970,101714],{"class":157},[147,105972,105973,105975,105977,105979],{"class":149,"line":312},[147,105974,30689],{"class":448},[147,105976,401],{"class":157},[147,105978,101723],{"class":504},[147,105980,101726],{"class":157},[147,105982,105983,105985,105987,105990],{"class":149,"line":1454},[147,105984,30689],{"class":448},[147,105986,401],{"class":157},[147,105988,105989],{"class":504},"\"qpos:\"",[147,105991,105992],{"class":157},", data.qpos)\n",[147,105994,105995,105997,105999,106002],{"class":149,"line":1469},[147,105996,30689],{"class":448},[147,105998,401],{"class":157},[147,106000,106001],{"class":504},"\"qvel:\"",[147,106003,106004],{"class":157},", data.qvel)\n",[19,106006,106007],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[367,106009,106010],{"id":106010},"仿真结果每次都一样",[19,106012,106013,106014,106016],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[51,106015,104300],{},"、目标点或控制输入。",[14,106018,102879],{"id":102878},[19,106020,106021,106022,24892],{},"Python 控制 MuJoCo 的核心就是读写 ",[51,106023,33675],{},[350,106025,106026,106034,106039,106044],{},[353,106027,106028,106029,101290,106031,106033],{},"用 ",[51,106030,101342],{},[51,106032,101345],{}," 读取状态。",[353,106035,106028,106036,106038],{},[51,106037,101348],{}," 写入控制。",[353,106040,106028,106041,106043],{},[51,106042,101487],{}," 推进时间。",[353,106045,106046,106047,106049],{},"手动改状态后用 ",[51,106048,104520],{}," 刷新派生量。",[19,106051,106052],{},"理解这一章后，就可以进入关节和 actuator 控制。",[308,106054,106055],{},"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":143,"searchDepth":312,"depth":312,"links":106057},[106058,106059,106060,106067,106071,106072,106073,106083],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":106061},[106062,106064,106066],{"id":104825,"depth":1454,"text":106063},"qpos、qvel、ctrl 是什么",{"id":104903,"depth":1454,"text":106065},"mj_step 和 mj_forward 的区别",{"id":104992,"depth":1454,"text":104993},{"id":101524,"depth":312,"text":101525,"children":106068},[106069,106070],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":106074},[106075,106077,106078,106080,106082],{"id":105854,"depth":1454,"text":106076},"修改 data.qpos 后位置没有更新",{"id":105871,"depth":1454,"text":105871},{"id":105930,"depth":1454,"text":106079},"误以为 qpos 一定等于关节数",{"id":105948,"depth":1454,"text":106081},"不知道某个元素在 qpos 的第几位",{"id":106010,"depth":1454,"text":106010},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104588,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":106090,"title":106091,"body":106092,"description":143,"extension":322,"meta":107782,"navigation":324,"path":107783,"seo":107784,"stem":107785,"__hash__":107786},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":106093,"toc":107758},[106094,106097,106099,106102,106104,106129,106132,106151,106154,106156,106158,106182,106184,106198,106200,106241,106243,106267,106269,106272,106306,106308,106321,106324,106392,106401,106405,106408,106442,106448,106451,106455,106494,106497,106517,106521,106564,106566,106595,106598,106604,106607,106609,107003,107005,107017,107019,107030,107032,107035,107064,107072,107075,107110,107113,107115,107123,107126,107128,107139,107149,107169,107172,107208,107220,107268,107287,107329,107342,107370,107375,107396,107406,107424,107427,107461,107464,107484,107487,107506,107512,107514,107517,107523,107529,107539,107542,107548,107557,107559,107605,107607,107613,107619,107622,107625,107645,107648,107654,107660,107662,107685,107688,107691,107700,107703,107741,107743,107746,107752,107755],[10,106095,106091],{"id":106096},"_4关节actuator-与力控制",[14,106098,100919],{"id":100918},[19,106100,106101],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,106103,104601],{},[350,106105,106106,106112,106117,106121,106126],{},[353,106107,106108,106111],{},[51,106109,106110],{},"hinge"," 关节",[353,106113,106114],{},[51,106115,106116],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[353,106118,106119],{},[51,106120,101348],{},[353,106122,106123],{},[51,106124,106125],{},"ctrlrange",[353,106127,106128],{},"读取关节角和角速度",[19,106130,106131],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[138,106133,106135],{"className":30652,"code":106134,"language":30654,"meta":143,"style":143},"data.ctrl[0] = ...\n",[51,106136,106137],{"__ignoreMap":143},[147,106138,106139,106142,106144,106146,106148],{"class":149,"line":150},[147,106140,106141],{"class":157},"data.ctrl[",[147,106143,590],{"class":448},[147,106145,4717],{"class":157},[147,106147,445],{"class":397},[147,106149,106150],{"class":448}," ...\n",[19,106152,106153],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,106155,101042],{"id":101041},[19,106157,101045],{},[138,106159,106160],{"className":24095,"code":104658,"language":24097,"meta":143,"style":143},[51,106161,106162],{"__ignoreMap":143},[147,106163,106164,106166,106168,106170,106172,106174,106176,106178,106180],{"class":149,"line":150},[147,106165,24850],{"class":2237},[147,106167,26589],{"class":504},[147,106169,24107],{"class":504},[147,106171,26674],{"class":448},[147,106173,104673],{"class":504},[147,106175,101070],{"class":504},[147,106177,102773],{"class":504},[147,106179,101086],{"class":504},[147,106181,104682],{"class":504},[19,106183,103089],{},[138,106185,106186],{"className":24095,"code":101191,"language":24097,"meta":143,"style":143},[51,106187,106188],{"__ignoreMap":143},[147,106189,106190,106192,106194,106196],{"class":149,"line":150},[147,106191,24104],{"class":2237},[147,106193,24107],{"class":504},[147,106195,101202],{"class":504},[147,106197,101205],{"class":504},[19,106199,103106],{},[138,106201,106203],{"className":24095,"code":106202,"language":24097,"meta":143,"style":143},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[51,106204,106205,106222,106231],{"__ignoreMap":143},[147,106206,106207,106209,106211,106213,106216,106218,106220],{"class":149,"line":150},[147,106208,30604],{"class":2237},[147,106210,29450],{"class":504},[147,106212,25389],{"class":448},[147,106214,106215],{"class":504}," mujoco-control",[147,106217,101247],{"class":504},[147,106219,101250],{"class":448},[147,106221,101253],{"class":448},[147,106223,106224,106226,106228],{"class":149,"line":312},[147,106225,30604],{"class":2237},[147,106227,101260],{"class":504},[147,106229,106230],{"class":504}," mujoco-control\n",[147,106232,106233,106235,106237,106239],{"class":149,"line":1454},[147,106234,24104],{"class":2237},[147,106236,24107],{"class":504},[147,106238,101202],{"class":504},[147,106240,101205],{"class":504},[19,106242,101276],{},[350,106244,106245,106251,106258,106264],{},[353,106246,106247,106250],{},[51,106248,106249],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[353,106252,106253,106255,106256,28659],{},[51,106254,101348],{}," 长度等于 ",[51,106257,102430],{},[353,106259,82494,106260,106263],{},[51,106261,106262],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[353,106265,106266],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,106268,101317],{"id":101316},[19,106270,106271],{},"关节决定 body 如何运动:",[138,106273,106275],{"className":53340,"code":106274,"language":53342,"meta":143,"style":143},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[51,106276,106277],{"__ignoreMap":143},[147,106278,106279,106281,106283,106285,106287,106290,106292,106294,106296,106299,106301,106304],{"class":149,"line":150},[147,106280,1309],{"class":157},[147,106282,103226],{"class":153},[147,106284,15193],{"class":2237},[147,106286,445],{"class":157},[147,106288,106289],{"class":504},"\"hinge\"",[147,106291,54097],{"class":2237},[147,106293,445],{"class":157},[147,106295,106289],{"class":504},[147,106297,106298],{"class":2237}," axis",[147,106300,445],{"class":157},[147,106302,106303],{"class":504},"\"0 1 0\"",[147,106305,101416],{"class":157},[19,106307,103322],{},[350,106309,106310,106315,106318],{},[353,106311,106312,106313],{},"名字是 ",[51,106314,106110],{},[353,106316,106317],{},"类型是旋转关节",[353,106319,106320],{},"绕 y 轴旋转",[19,106322,106323],{},"actuator 决定如何施加控制:",[138,106325,106327],{"className":53340,"code":106326,"language":53342,"meta":143,"style":143},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[51,106328,106329,106338,106384],{"__ignoreMap":143},[147,106330,106331,106333,106336],{"class":149,"line":150},[147,106332,1309],{"class":157},[147,106334,106335],{"class":153},"actuator",[147,106337,51580],{"class":157},[147,106339,106340,106342,106345,106347,106349,106352,106355,106357,106359,106362,106364,106366,106369,106371,106374,106377,106379,106382],{"class":149,"line":312},[147,106341,52417],{"class":157},[147,106343,106344],{"class":153},"motor",[147,106346,15193],{"class":2237},[147,106348,445],{"class":157},[147,106350,106351],{"class":504},"\"hinge_motor\"",[147,106353,106354],{"class":2237}," joint",[147,106356,445],{"class":157},[147,106358,106289],{"class":504},[147,106360,106361],{"class":2237}," gear",[147,106363,445],{"class":157},[147,106365,3952],{"class":504},[147,106367,106368],{"class":2237}," ctrlrange",[147,106370,445],{"class":157},[147,106372,106373],{"class":504},"\"-2 2\"",[147,106375,106376],{"class":2237}," ctrllimited",[147,106378,445],{"class":157},[147,106380,106381],{"class":504},"\"true\"",[147,106383,101416],{"class":157},[147,106385,106386,106388,106390],{"class":149,"line":1454},[147,106387,52058],{"class":157},[147,106389,106335],{"class":153},[147,106391,51580],{"class":157},[19,106393,106394,106397,106398,28659],{},[51,106395,106396],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[51,106399,106400],{},"[-2, 2]",[367,106402,106404],{"id":106403},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,106406,106407],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[537,106409,106410,106420],{},[540,106411,106412],{},[543,106413,106414,106416,106418],{},[546,106415,26027],{"align":24009},[546,106417,102967],{"align":24009},[546,106419,101006],{"align":24009},[583,106421,106422,106432],{},[543,106423,106424,106426,106429],{},[588,106425,103226],{"align":24009},[588,106427,106428],{"align":24009},"定义能怎么动",[588,106430,106431],{"align":24009},"门轴允许门旋转",[543,106433,106434,106436,106439],{},[588,106435,106335],{"align":24009},[588,106437,106438],{"align":24009},"定义怎么施力或控制",[588,106440,106441],{"align":24009},"人推门、马达带动门",[19,106443,106444,106445,106447],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[51,106446,101348],{}," 主动控制它。",[19,106449,106450],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[367,106452,106454],{"id":106453},"hinge-joint","hinge joint",[138,106456,106458],{"className":53340,"code":106457,"language":53342,"meta":143,"style":143},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[51,106459,106460],{"__ignoreMap":143},[147,106461,106462,106464,106466,106468,106470,106472,106474,106476,106478,106480,106482,106484,106487,106489,106492],{"class":149,"line":150},[147,106463,1309],{"class":157},[147,106465,103226],{"class":153},[147,106467,15193],{"class":2237},[147,106469,445],{"class":157},[147,106471,106289],{"class":504},[147,106473,54097],{"class":2237},[147,106475,445],{"class":157},[147,106477,106289],{"class":504},[147,106479,106298],{"class":2237},[147,106481,445],{"class":157},[147,106483,106303],{"class":504},[147,106485,106486],{"class":2237}," damping",[147,106488,445],{"class":157},[147,106490,106491],{"class":504},"\"0.1\"",[147,106493,101416],{"class":157},[19,106495,106496],{},"含义：",[350,106498,106499,106505,106511],{},[353,106500,106501,106504],{},[51,106502,106503],{},"type=\"hinge\"","：只能绕一个轴旋转。",[353,106506,106507,106510],{},[51,106508,106509],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[353,106512,106513,106516],{},[51,106514,106515],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[367,106518,106520],{"id":106519},"motor-actuator","motor actuator",[138,106522,106524],{"className":53340,"code":106523,"language":53342,"meta":143,"style":143},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[51,106525,106526],{"__ignoreMap":143},[147,106527,106528,106530,106532,106534,106536,106538,106540,106542,106544,106546,106548,106550,106552,106554,106556,106558,106560,106562],{"class":149,"line":150},[147,106529,1309],{"class":157},[147,106531,106344],{"class":153},[147,106533,15193],{"class":2237},[147,106535,445],{"class":157},[147,106537,106351],{"class":504},[147,106539,106354],{"class":2237},[147,106541,445],{"class":157},[147,106543,106289],{"class":504},[147,106545,106361],{"class":2237},[147,106547,445],{"class":157},[147,106549,3952],{"class":504},[147,106551,106368],{"class":2237},[147,106553,445],{"class":157},[147,106555,106373],{"class":504},[147,106557,106376],{"class":2237},[147,106559,445],{"class":157},[147,106561,106381],{"class":504},[147,106563,101416],{"class":157},[19,106565,106496],{},[350,106567,106568,106577,106583,106589],{},[353,106569,106570,106573,106574,106576],{},[51,106571,106572],{},"joint=\"hinge\"","：这个电机作用在名为 ",[51,106575,106110],{}," 的关节上。",[353,106578,106579,106582],{},[51,106580,106581],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[353,106584,106585,106588],{},[51,106586,106587],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[353,106590,106591,106594],{},[51,106592,106593],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,106596,106597],{},"简单理解：",[138,106599,106602],{"className":106600,"code":106601,"language":5461,"meta":143},[5459],"实际施加效果 ≈ data.ctrl[0] * gear\n",[51,106603,106601],{"__ignoreMap":143},[19,106605,106606],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,106608,101525],{"id":101524},[138,106610,106612],{"className":30652,"code":106611,"language":30654,"meta":143,"style":143},"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",[51,106613,106614,106621,106625,106631,106641,106645,106649,106657,106662,106667,106671,106675,106680,106685,106689,106694,106699,106704,106709,106713,106717,106721,106726,106731,106736,106740,106744,106748,106752,106764,106776,106784,106788,106798,106808,106818,106822,106835,106848,106852,106869,106883,106918,106922,106926,106937,106952,106967,106979,106983,106987,106999],{"__ignoreMap":143},[147,106615,106616,106618],{"class":149,"line":150},[147,106617,30666],{"class":397},[147,106619,106620],{"class":157}," math\n",[147,106622,106623],{"class":149,"line":312},[147,106624,2674],{"emptyLinePlaceholder":324},[147,106626,106627,106629],{"class":149,"line":1454},[147,106628,30666],{"class":397},[147,106630,101573],{"class":157},[147,106632,106633,106635,106637,106639],{"class":149,"line":1469},[147,106634,30666],{"class":397},[147,106636,31654],{"class":157},[147,106638,31657],{"class":397},[147,106640,31660],{"class":157},[147,106642,106643],{"class":149,"line":1475},[147,106644,2674],{"emptyLinePlaceholder":324},[147,106646,106647],{"class":149,"line":1489},[147,106648,2674],{"emptyLinePlaceholder":324},[147,106650,106651,106653,106655],{"class":149,"line":1495},[147,106652,101586],{"class":448},[147,106654,13838],{"class":397},[147,106656,101591],{"class":504},[147,106658,106659],{"class":149,"line":1586},[147,106660,106661],{"class":504},"\u003Cmujoco model=\"one_link_motor\">\n",[147,106663,106664],{"class":149,"line":1592},[147,106665,106666],{"class":504},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[147,106668,106669],{"class":149,"line":1604},[147,106670,2674],{"emptyLinePlaceholder":324},[147,106672,106673],{"class":149,"line":1886},[147,106674,101610],{"class":504},[147,106676,106677],{"class":149,"line":1891},[147,106678,106679],{"class":504},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[147,106681,106682],{"class":149,"line":1897},[147,106683,106684],{"class":504},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[147,106686,106687],{"class":149,"line":1902},[147,106688,2674],{"emptyLinePlaceholder":324},[147,106690,106691],{"class":149,"line":1916},[147,106692,106693],{"class":504},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[147,106695,106696],{"class":149,"line":1921},[147,106697,106698],{"class":504},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[147,106700,106701],{"class":149,"line":1927},[147,106702,106703],{"class":504},"        \u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\" rgba=\"0.1 0.4 1 1\"\u002F>\n",[147,106705,106706],{"class":149,"line":1948},[147,106707,106708],{"class":504},"      \u003C\u002Fbody>\n",[147,106710,106711],{"class":149,"line":1953},[147,106712,101639],{"class":504},[147,106714,106715],{"class":149,"line":1967},[147,106716,101644],{"class":504},[147,106718,106719],{"class":149,"line":1972},[147,106720,2674],{"emptyLinePlaceholder":324},[147,106722,106723],{"class":149,"line":2001},[147,106724,106725],{"class":504},"  \u003Cactuator>\n",[147,106727,106728],{"class":149,"line":2006},[147,106729,106730],{"class":504},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[147,106732,106733],{"class":149,"line":2023},[147,106734,106735],{"class":504},"  \u003C\u002Factuator>\n",[147,106737,106738],{"class":149,"line":2028},[147,106739,101649],{"class":504},[147,106741,106742],{"class":149,"line":2033},[147,106743,95970],{"class":504},[147,106745,106746],{"class":149,"line":2038},[147,106747,2674],{"emptyLinePlaceholder":324},[147,106749,106750],{"class":149,"line":2052},[147,106751,2674],{"emptyLinePlaceholder":324},[147,106753,106754,106756,106758,106760,106762],{"class":149,"line":2057},[147,106755,32221],{"class":397},[147,106757,2247],{"class":2237},[147,106759,101670],{"class":157},[147,106761,95958],{"class":448},[147,106763,4013],{"class":157},[147,106765,106766,106768,106770,106772,106774],{"class":149,"line":2851},[147,106767,101679],{"class":157},[147,106769,445],{"class":397},[147,106771,101684],{"class":157},[147,106773,101586],{"class":448},[147,106775,407],{"class":157},[147,106777,106778,106780,106782],{"class":149,"line":2865},[147,106779,101693],{"class":157},[147,106781,445],{"class":397},[147,106783,101698],{"class":157},[147,106785,106786],{"class":149,"line":2873},[147,106787,2674],{"emptyLinePlaceholder":324},[147,106789,106790,106792,106794,106796],{"class":149,"line":2878},[147,106791,31573],{"class":448},[147,106793,401],{"class":157},[147,106795,101711],{"class":504},[147,106797,101714],{"class":157},[147,106799,106800,106802,106804,106806],{"class":149,"line":2884},[147,106801,31573],{"class":448},[147,106803,401],{"class":157},[147,106805,101723],{"class":504},[147,106807,101726],{"class":157},[147,106809,106810,106812,106814,106816],{"class":149,"line":2890},[147,106811,31573],{"class":448},[147,106813,401],{"class":157},[147,106815,101735],{"class":504},[147,106817,101738],{"class":157},[147,106819,106820],{"class":149,"line":2895},[147,106821,2674],{"emptyLinePlaceholder":324},[147,106823,106824,106826,106829,106831,106833],{"class":149,"line":8222},[147,106825,3375],{"class":397},[147,106827,106828],{"class":157}," model.nu ",[147,106830,21221],{"class":397},[147,106832,25392],{"class":448},[147,106834,4013],{"class":157},[147,106836,106837,106839,106841,106843,106846],{"class":149,"line":8246},[147,106838,103702],{"class":397},[147,106840,103705],{"class":448},[147,106842,401],{"class":157},[147,106844,106845],{"class":504},"\"expected exactly one actuator\"",[147,106847,407],{"class":157},[147,106849,106850],{"class":149,"line":8251},[147,106851,2674],{"emptyLinePlaceholder":324},[147,106853,106854,106856,106858,106860,106862,106864,106867],{"class":149,"line":8257},[147,106855,3475],{"class":397},[147,106857,31890],{"class":157},[147,106859,26317],{"class":397},[147,106861,32717],{"class":448},[147,106863,401],{"class":157},[147,106865,106866],{"class":448},"2000",[147,106868,31060],{"class":157},[147,106870,106871,106874,106876,106878,106880],{"class":149,"line":8284},[147,106872,106873],{"class":157},"        t ",[147,106875,445],{"class":397},[147,106877,31890],{"class":157},[147,106879,854],{"class":397},[147,106881,106882],{"class":157}," model.opt.timestep\n",[147,106884,106885,106888,106890,106892,106894,106897,106899,106902,106904,106906,106909,106911,106913,106915],{"class":149,"line":8289},[147,106886,106887],{"class":157},"        data.ctrl[",[147,106889,590],{"class":448},[147,106891,4717],{"class":157},[147,106893,445],{"class":397},[147,106895,106896],{"class":448}," 1.5",[147,106898,6792],{"class":397},[147,106900,106901],{"class":157}," math.sin(",[147,106903,105530],{"class":448},[147,106905,6792],{"class":397},[147,106907,106908],{"class":157}," math.pi ",[147,106910,854],{"class":397},[147,106912,62140],{"class":448},[147,106914,6792],{"class":397},[147,106916,106917],{"class":157}," t)\n",[147,106919,106920],{"class":149,"line":8295},[147,106921,101788],{"class":157},[147,106923,106924],{"class":149,"line":8307},[147,106925,2674],{"emptyLinePlaceholder":324},[147,106927,106928,106930,106932,106935],{"class":149,"line":8319},[147,106929,31573],{"class":448},[147,106931,401],{"class":157},[147,106933,106934],{"class":504},"\"time:\"",[147,106936,101750],{"class":157},[147,106938,106939,106941,106943,106946,106948,106950],{"class":149,"line":8331},[147,106940,31573],{"class":448},[147,106942,401],{"class":157},[147,106944,106945],{"class":504},"\"joint qpos:\"",[147,106947,105200],{"class":157},[147,106949,692],{"class":448},[147,106951,30771],{"class":157},[147,106953,106954,106956,106958,106961,106963,106965],{"class":149,"line":9990},[147,106955,31573],{"class":448},[147,106957,401],{"class":157},[147,106959,106960],{"class":504},"\"joint qvel:\"",[147,106962,105216],{"class":157},[147,106964,692],{"class":448},[147,106966,30771],{"class":157},[147,106968,106969,106971,106973,106976],{"class":149,"line":10015},[147,106970,31573],{"class":448},[147,106972,401],{"class":157},[147,106974,106975],{"class":504},"\"last ctrl:\"",[147,106977,106978],{"class":157},", data.ctrl.copy())\n",[147,106980,106981],{"class":149,"line":10038},[147,106982,2674],{"emptyLinePlaceholder":324},[147,106984,106985],{"class":149,"line":10062},[147,106986,2674],{"emptyLinePlaceholder":324},[147,106988,106989,106991,106993,106995,106997],{"class":149,"line":10067},[147,106990,1805],{"class":397},[147,106992,31494],{"class":448},[147,106994,101831],{"class":397},[147,106996,101834],{"class":504},[147,106998,4013],{"class":157},[147,107000,107001],{"class":149,"line":10072},[147,107002,101841],{"class":157},[19,107004,103840],{},[138,107006,107008],{"className":24095,"code":107007,"language":24097,"meta":143,"style":143},"touch ch4_joint_motor.py\n",[51,107009,107010],{"__ignoreMap":143},[147,107011,107012,107014],{"class":149,"line":150},[147,107013,101555],{"class":2237},[147,107015,107016],{"class":504}," ch4_joint_motor.py\n",[19,107018,102573],{},[138,107020,107022],{"className":24095,"code":107021,"language":24097,"meta":143,"style":143},"python ch4_joint_motor.py\n",[51,107023,107024],{"__ignoreMap":143},[147,107025,107026,107028],{"class":149,"line":150},[147,107027,30654],{"class":2237},[147,107029,107016],{"class":504},[367,107031,101844],{"id":101844},[19,107033,107034],{},"检查 actuator 数量：",[138,107036,107038],{"className":30652,"code":107037,"language":30654,"meta":143,"style":143},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[51,107039,107040,107052],{"__ignoreMap":143},[147,107041,107042,107044,107046,107048,107050],{"class":149,"line":150},[147,107043,1805],{"class":397},[147,107045,106828],{"class":157},[147,107047,21221],{"class":397},[147,107049,25392],{"class":448},[147,107051,4013],{"class":157},[147,107053,107054,107056,107058,107060,107062],{"class":149,"line":312},[147,107055,104165],{"class":397},[147,107057,103705],{"class":448},[147,107059,401],{"class":157},[147,107061,106845],{"class":504},[147,107063,407],{"class":157},[19,107065,107066,107068,107069,107071],{},[51,107067,102430],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[51,107070,101348],{}," 长度应该是 1。",[19,107073,107074],{},"产生正弦控制信号：",[138,107076,107078],{"className":30652,"code":107077,"language":30654,"meta":143,"style":143},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[51,107079,107080],{"__ignoreMap":143},[147,107081,107082,107084,107086,107088,107090,107092,107094,107096,107098,107100,107102,107104,107106,107108],{"class":149,"line":150},[147,107083,106141],{"class":157},[147,107085,590],{"class":448},[147,107087,4717],{"class":157},[147,107089,445],{"class":397},[147,107091,106896],{"class":448},[147,107093,6792],{"class":397},[147,107095,106901],{"class":157},[147,107097,105530],{"class":448},[147,107099,6792],{"class":397},[147,107101,106908],{"class":157},[147,107103,854],{"class":397},[147,107105,62140],{"class":448},[147,107107,6792],{"class":397},[147,107109,106917],{"class":157},[19,107111,107112],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,107114,101945],{},[138,107116,107117],{"className":30652,"code":104775,"language":30654,"meta":143,"style":143},[51,107118,107119],{"__ignoreMap":143},[147,107120,107121],{"class":149,"line":150},[147,107122,104775],{"class":157},[19,107124,107125],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[367,107127,101980],{"id":101980},[138,107129,107131],{"className":30652,"code":107130,"language":30654,"meta":143,"style":143},"import math\n",[51,107132,107133],{"__ignoreMap":143},[147,107134,107135,107137],{"class":149,"line":150},[147,107136,30666],{"class":397},[147,107138,106620],{"class":157},[19,107140,107141,107142,101290,107145,107148],{},"导入 Python 标准库里的数学模块。后面要用 ",[51,107143,107144],{},"math.sin",[51,107146,107147],{},"math.pi"," 生成周期变化的控制信号。",[138,107150,107151],{"className":30652,"code":103956,"language":30654,"meta":143,"style":143},[51,107152,107153,107159],{"__ignoreMap":143},[147,107154,107155,107157],{"class":149,"line":150},[147,107156,30666],{"class":397},[147,107158,101573],{"class":157},[147,107160,107161,107163,107165,107167],{"class":149,"line":312},[147,107162,30666],{"class":397},[147,107164,31654],{"class":157},[147,107166,31657],{"class":397},[147,107168,31660],{"class":157},[19,107170,107171],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[138,107173,107174],{"className":53340,"code":106457,"language":53342,"meta":143,"style":143},[51,107175,107176],{"__ignoreMap":143},[147,107177,107178,107180,107182,107184,107186,107188,107190,107192,107194,107196,107198,107200,107202,107204,107206],{"class":149,"line":150},[147,107179,1309],{"class":157},[147,107181,103226],{"class":153},[147,107183,15193],{"class":2237},[147,107185,445],{"class":157},[147,107187,106289],{"class":504},[147,107189,54097],{"class":2237},[147,107191,445],{"class":157},[147,107193,106289],{"class":504},[147,107195,106298],{"class":2237},[147,107197,445],{"class":157},[147,107199,106303],{"class":504},[147,107201,106486],{"class":2237},[147,107203,445],{"class":157},[147,107205,106491],{"class":504},[147,107207,101416],{"class":157},[19,107209,107210,107211,107213,107214,107216,107217,107219],{},"这行定义关节。",[51,107212,106110],{}," 表示旋转关节。",[51,107215,106509],{}," 表示绕 y 轴旋转。",[51,107218,106515],{}," 表示有一点阻尼，运动不会完全无损耗。",[138,107221,107223],{"className":53340,"code":107222,"language":53342,"meta":143,"style":143},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[51,107224,107225],{"__ignoreMap":143},[147,107226,107227,107229,107231,107233,107235,107238,107240,107242,107245,107248,107250,107253,107255,107257,107259,107261,107263,107266],{"class":149,"line":150},[147,107228,1309],{"class":157},[147,107230,101392],{"class":153},[147,107232,15193],{"class":2237},[147,107234,445],{"class":157},[147,107236,107237],{"class":504},"\"link_geom\"",[147,107239,54097],{"class":2237},[147,107241,445],{"class":157},[147,107243,107244],{"class":504},"\"capsule\"",[147,107246,107247],{"class":2237}," fromto",[147,107249,445],{"class":157},[147,107251,107252],{"class":504},"\"0 0 0 0 0 0.5\"",[147,107254,101408],{"class":2237},[147,107256,445],{"class":157},[147,107258,104048],{"class":504},[147,107260,102273],{"class":2237},[147,107262,445],{"class":157},[147,107264,107265],{"class":504},"\"0.5\"",[147,107267,101416],{"class":157},[19,107269,107270,107271,107273,107274,107276,107277,107280,107281,28659,107284,107286],{},"这行定义摆杆的形状。",[51,107272,103435],{}," 是胶囊体，适合表示杆子。",[51,107275,103446],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[51,107278,107279],{},"(0,0,0)"," 延伸到 ",[51,107282,107283],{},"(0,0,0.5)",[51,107285,103440],{}," 是半径。",[138,107288,107289],{"className":53340,"code":106523,"language":53342,"meta":143,"style":143},[51,107290,107291],{"__ignoreMap":143},[147,107292,107293,107295,107297,107299,107301,107303,107305,107307,107309,107311,107313,107315,107317,107319,107321,107323,107325,107327],{"class":149,"line":150},[147,107294,1309],{"class":157},[147,107296,106344],{"class":153},[147,107298,15193],{"class":2237},[147,107300,445],{"class":157},[147,107302,106351],{"class":504},[147,107304,106354],{"class":2237},[147,107306,445],{"class":157},[147,107308,106289],{"class":504},[147,107310,106361],{"class":2237},[147,107312,445],{"class":157},[147,107314,3952],{"class":504},[147,107316,106368],{"class":2237},[147,107318,445],{"class":157},[147,107320,106373],{"class":504},[147,107322,106376],{"class":2237},[147,107324,445],{"class":157},[147,107326,106381],{"class":504},[147,107328,101416],{"class":157},[19,107330,107331,107332,107334,107335,107338,107339,107341],{},"这行定义电机。它作用在 ",[51,107333,106110],{}," 关节上。",[51,107336,107337],{},"gear"," 可以理解成放大倍数。",[51,107340,106125],{}," 限制控制输入范围。",[138,107343,107344],{"className":30652,"code":107037,"language":30654,"meta":143,"style":143},[51,107345,107346,107358],{"__ignoreMap":143},[147,107347,107348,107350,107352,107354,107356],{"class":149,"line":150},[147,107349,1805],{"class":397},[147,107351,106828],{"class":157},[147,107353,21221],{"class":397},[147,107355,25392],{"class":448},[147,107357,4013],{"class":157},[147,107359,107360,107362,107364,107366,107368],{"class":149,"line":312},[147,107361,104165],{"class":397},[147,107363,103705],{"class":448},[147,107365,401],{"class":157},[147,107367,106845],{"class":504},[147,107369,407],{"class":157},[19,107371,107372,107374],{},[51,107373,102430],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[138,107376,107378],{"className":30652,"code":107377,"language":30654,"meta":143,"style":143},"for step in range(2000):\n",[51,107379,107380],{"__ignoreMap":143},[147,107381,107382,107384,107386,107388,107390,107392,107394],{"class":149,"line":150},[147,107383,3299],{"class":397},[147,107385,31890],{"class":157},[147,107387,26317],{"class":397},[147,107389,32717],{"class":448},[147,107391,401],{"class":157},[147,107393,106866],{"class":448},[147,107395,31060],{"class":157},[19,107397,107398,107399,107401,107402,107405],{},"循环 2000 步。这里没有用 ",[51,107400,1391],{},"，而是用 ",[51,107403,107404],{},"step","，因为后面要用当前步数计算时间。",[138,107407,107409],{"className":30652,"code":107408,"language":30654,"meta":143,"style":143},"t = step * model.opt.timestep\n",[51,107410,107411],{"__ignoreMap":143},[147,107412,107413,107416,107418,107420,107422],{"class":149,"line":150},[147,107414,107415],{"class":157},"t ",[147,107417,445],{"class":397},[147,107419,31890],{"class":157},[147,107421,854],{"class":397},[147,107423,106882],{"class":157},[19,107425,107426],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[138,107428,107429],{"className":30652,"code":107077,"language":30654,"meta":143,"style":143},[51,107430,107431],{"__ignoreMap":143},[147,107432,107433,107435,107437,107439,107441,107443,107445,107447,107449,107451,107453,107455,107457,107459],{"class":149,"line":150},[147,107434,106141],{"class":157},[147,107436,590],{"class":448},[147,107438,4717],{"class":157},[147,107440,445],{"class":397},[147,107442,106896],{"class":448},[147,107444,6792],{"class":397},[147,107446,106901],{"class":157},[147,107448,105530],{"class":448},[147,107450,6792],{"class":397},[147,107452,106908],{"class":157},[147,107454,854],{"class":397},[147,107456,62140],{"class":448},[147,107458,6792],{"class":397},[147,107460,106917],{"class":157},[19,107462,107463],{},"这行给电机输入一个正弦波。拆开看：",[350,107465,107466,107472,107478],{},[353,107467,107468,107471],{},[51,107469,107470],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[353,107473,107474,107477],{},[51,107475,107476],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[353,107479,107480,107483],{},[51,107481,107482],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,107485,107486],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[138,107488,107490],{"className":30652,"code":107489,"language":30654,"meta":143,"style":143},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[51,107491,107492],{"__ignoreMap":143},[147,107493,107494,107496,107498,107500,107502,107504],{"class":149,"line":150},[147,107495,30689],{"class":448},[147,107497,401],{"class":157},[147,107499,106945],{"class":504},[147,107501,105200],{"class":157},[147,107503,692],{"class":448},[147,107505,30771],{"class":157},[19,107507,107508,107509,107511],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[51,107510,101342],{}," 只有一个数。",[14,107513,102588],{"id":102587},[19,107515,107516],{},"输出类似:",[138,107518,107521],{"className":107519,"code":107520,"language":5461,"meta":143},[5459],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[51,107522,107520],{"__ignoreMap":143},[19,107524,107525,107526,107528],{},"这里 ",[51,107527,106396],{}," 是电机输入。",[19,107530,107531,107534,107535,107538],{},[51,107532,107533],{},"joint qpos"," 是关节角度，单位通常是弧度。",[51,107536,107537],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,107540,107541],{},"角度单位提示：",[138,107543,107546],{"className":107544,"code":107545,"language":5461,"meta":143},[5459],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[51,107547,107545],{"__ignoreMap":143},[19,107549,107550,107551,107553,107554,107556],{},"如果你看到 ",[51,107552,104300],{}," 是 ",[51,107555,35603],{},"，大约就是 28.6 度。",[14,107558,102620],{"id":102619},[350,107560,107561,107568,107571,107578,107581,107589,107597],{},[353,107562,102683,107563,102686,107565,28659],{},[51,107564,106581],{},[51,107566,107567],{},"gear=\"5\"",[353,107569,107570],{},"重新运行，观察关节运动是否更剧烈。",[353,107572,102683,107573,102686,107575,28659],{},[51,107574,106125],{},[51,107576,107577],{},"-0.2 0.2",[353,107579,107580],{},"重新运行，观察控制能力是否变弱。",[353,107582,107583,107584,107586,107587,28659],{},"去掉 actuator，确认 ",[51,107585,102430],{}," 变成 ",[51,107588,590],{},[353,107590,102683,107591,102686,107593,107596],{},[51,107592,106515],{},[51,107594,107595],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[353,107598,102683,107599,102686,107601,107604],{},[51,107600,106509],{},[51,107602,107603],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,107606,102725],{"id":102724},[367,107608,107610],{"id":107609},"indexerror-index-0-is-out-of-bounds",[51,107611,107612],{},"IndexError: index 0 is out of bounds",[19,107614,107615,107616,107618],{},"原因是 ",[51,107617,106262],{},"，没有 actuator。",[367,107620,107621],{"id":107621},"关节几乎不动",[19,107623,107624],{},"可能原因:",[350,107626,107627,107632,107636,107642],{},[353,107628,107629,107631],{},[51,107630,107337],{}," 太小",[353,107633,107634,107631],{},[51,107635,106125],{},[353,107637,107638,107641],{},[51,107639,107640],{},"damping"," 太大",[353,107643,107644],{},"重力方向导致运动不明显",[367,107646,107647],{"id":107647},"模型编译失败",[19,107649,107650,107651,107653],{},"检查 actuator 引用的 ",[51,107652,106572],{}," 是否存在，joint 名称是否拼写一致。",[367,107655,107657,107659],{"id":107656},"datactrl0-写了但没有效果",[51,107658,106396],{}," 写了但没有效果",[19,107661,102847],{},[350,107663,107664,107669,107672,107677,107682],{},[353,107665,107666,107668],{},[51,107667,102430],{}," 是否大于 0。",[353,107670,107671],{},"motor 是否引用了正确 joint。",[353,107673,107674,107676],{},[51,107675,107337],{}," 是否太小。",[353,107678,107679,107681],{},[51,107680,106125],{}," 是否把输入限制得太小。",[353,107683,107684],{},"body 是否真的有可动 joint。",[367,107686,107687],{"id":107687},"控制输入超过范围会怎样",[19,107689,107690],{},"如果设置了：",[138,107692,107694],{"className":53340,"code":107693,"language":53342,"meta":143,"style":143},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[51,107695,107696],{"__ignoreMap":143},[147,107697,107698],{"class":149,"line":150},[147,107699,107693],{"class":157},[19,107701,107702],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[138,107704,107706],{"className":30652,"code":107705,"language":30654,"meta":143,"style":143},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[51,107707,107708,107728],{"__ignoreMap":143},[147,107709,107710,107713,107715,107718,107720,107722,107724,107726],{"class":149,"line":150},[147,107711,107712],{"class":157},"action ",[147,107714,445],{"class":397},[147,107716,107717],{"class":157}," np.clip(action, ",[147,107719,931],{"class":397},[147,107721,105530],{"class":448},[147,107723,12709],{"class":157},[147,107725,105530],{"class":448},[147,107727,407],{"class":157},[147,107729,107730,107732,107734,107736,107738],{"class":149,"line":312},[147,107731,106141],{"class":157},[147,107733,590],{"class":448},[147,107735,4717],{"class":157},[147,107737,445],{"class":397},[147,107739,107740],{"class":157}," action\n",[14,107742,102879],{"id":102878},[19,107744,107745],{},"这一章建立了控制任务的基本形式：",[138,107747,107750],{"className":107748,"code":107749,"language":5461,"meta":143},[5459],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[51,107751,107749],{"__ignoreMap":143},[19,107753,107754],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[308,107756,107757],{},"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":143,"searchDepth":312,"depth":312,"links":107759},[107760,107761,107762,107767,107771,107772,107773,107781],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":107763},[107764,107765,107766],{"id":106403,"depth":1454,"text":106404},{"id":106453,"depth":1454,"text":106454},{"id":106519,"depth":1454,"text":106520},{"id":101524,"depth":312,"text":101525,"children":107768},[107769,107770],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":107774},[107775,107776,107777,107778,107780],{"id":107609,"depth":1454,"text":107612},{"id":107621,"depth":1454,"text":107621},{"id":107647,"depth":1454,"text":107647},{"id":107656,"depth":1454,"text":107779},"data.ctrl[0] 写了但没有效果",{"id":107687,"depth":1454,"text":107687},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":106091,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107788,"title":107789,"body":107790,"description":143,"extension":322,"meta":109699,"navigation":324,"path":109700,"seo":109701,"stem":109702,"__hash__":109703},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107791,"toc":109675},[107792,107795,107797,107800,107808,107811,107828,107831,107856,107859,107905,107907,107909,107964,107966,107985,107987,108030,108033,108050,108053,108069,108079,108086,108088,108091,108094,108128,108131,108179,108183,108186,108200,108209,108213,108216,108241,108244,108248,108261,108264,108270,108273,108288,108290,108293,108553,108555,108567,108570,108882,108884,108896,108898,108901,108916,108921,108924,108946,108949,108952,108986,108989,108993,109004,109007,109024,109027,109041,109048,109068,109075,109089,109092,109104,109119,109139,109142,109164,109167,109171,109186,109197,109212,109215,109245,109261,109290,109298,109322,109325,109343,109353,109365,109372,109381,109387,109396,109399,109401,109410,109413,109428,109430,109433,109444,109447,109458,109461,109479,109481,109498,109501,109529,109531,109535,109538,109568,109574,109577,109581,109589,109592,109594,109615,109618,109621,109637,109640,109656,109658,109661,109672],[10,107793,107789],{"id":107794},"_5viewer-可视化与-renderer-离屏渲染",[14,107796,100919],{"id":100918},[19,107798,107799],{},"本章掌握两类可视化方式:",[350,107801,107802,107805],{},[353,107803,107804],{},"交互式 viewer: 适合人工观察仿真",[353,107806,107807],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,107809,107810],{},"使用官方接口:",[138,107812,107814],{"className":30652,"code":107813,"language":30654,"meta":143,"style":143},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[51,107815,107816,107823],{"__ignoreMap":143},[147,107817,107818,107820],{"class":149,"line":150},[147,107819,30666],{"class":397},[147,107821,107822],{"class":157}," mujoco.viewer\n",[147,107824,107825],{"class":149,"line":312},[147,107826,107827],{"class":157},"mujoco.viewer.launch_passive(model, data)\n",[19,107829,107830],{},"以及:",[138,107832,107834],{"className":30652,"code":107833,"language":30654,"meta":143,"style":143},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[51,107835,107836,107846],{"__ignoreMap":143},[147,107837,107838,107841,107843],{"class":149,"line":150},[147,107839,107840],{"class":157},"renderer ",[147,107842,445],{"class":397},[147,107844,107845],{"class":157}," mujoco.Renderer(model)\n",[147,107847,107848,107851,107853],{"class":149,"line":312},[147,107849,107850],{"class":157},"image ",[147,107852,445],{"class":397},[147,107854,107855],{"class":157}," renderer.render()\n",[19,107857,107858],{},"新手建议先理解二者区别：",[537,107860,107861,107877],{},[540,107862,107863],{},[543,107864,107865,107868,107871,107874],{},[546,107866,107867],{"align":24009},"工具",[546,107869,107870],{"align":24009},"用途",[546,107872,107873],{"align":24009},"是否打开窗口",[546,107875,107876],{"align":24009},"常见场景",[583,107878,107879,107892],{},[543,107880,107881,107884,107887,107889],{},[588,107882,107883],{"align":24009},"Viewer",[588,107885,107886],{"align":24009},"人眼实时观察仿真",[588,107888,104935],{"align":24009},[588,107890,107891],{"align":24009},"调试模型、看控制效果",[543,107893,107894,107897,107900,107902],{},[588,107895,107896],{"align":24009},"Renderer",[588,107898,107899],{"align":24009},"生成图像数组",[588,107901,104948],{"align":24009},[588,107903,107904],{"align":24009},"保存图片、训练视觉策略、服务器批量采集",[14,107906,101042],{"id":101041},[19,107908,101045],{},[138,107910,107912],{"className":24095,"code":107911,"language":24097,"meta":143,"style":143},"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",[51,107913,107914,107926,107936,107944,107952],{"__ignoreMap":143},[147,107915,107916,107918,107920,107922,107924],{"class":149,"line":150},[147,107917,24850],{"class":2237},[147,107919,26589],{"class":504},[147,107921,24107],{"class":504},[147,107923,26674],{"class":448},[147,107925,24952],{"class":448},[147,107927,107928,107930,107932,107934],{"class":149,"line":312},[147,107929,101080],{"class":504},[147,107931,101083],{"class":504},[147,107933,101086],{"class":504},[147,107935,24952],{"class":448},[147,107937,107938,107940,107942],{"class":149,"line":1454},[147,107939,101093],{"class":504},[147,107941,101096],{"class":504},[147,107943,24952],{"class":448},[147,107945,107946,107948,107950],{"class":149,"line":1469},[147,107947,101103],{"class":504},[147,107949,101106],{"class":504},[147,107951,24952],{"class":448},[147,107953,107954,107956,107958,107960,107962],{"class":149,"line":1475},[147,107955,101113],{"class":504},[147,107957,101116],{"class":504},[147,107959,101119],{"class":504},[147,107961,101122],{"class":504},[147,107963,102788],{"class":504},[19,107965,103089],{},[138,107967,107969],{"className":24095,"code":107968,"language":24097,"meta":143,"style":143},"pip install \"mujoco>=2.3\" numpy pillow\n",[51,107970,107971],{"__ignoreMap":143},[147,107972,107973,107975,107977,107979,107982],{"class":149,"line":150},[147,107974,24104],{"class":2237},[147,107976,24107],{"class":504},[147,107978,101202],{"class":504},[147,107980,107981],{"class":504}," numpy",[147,107983,107984],{"class":504}," pillow\n",[19,107986,103106],{},[138,107988,107990],{"className":24095,"code":107989,"language":24097,"meta":143,"style":143},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[51,107991,107992,108009,108018],{"__ignoreMap":143},[147,107993,107994,107996,107998,108000,108003,108005,108007],{"class":149,"line":150},[147,107995,30604],{"class":2237},[147,107997,29450],{"class":504},[147,107999,25389],{"class":448},[147,108001,108002],{"class":504}," mujoco-render",[147,108004,101247],{"class":504},[147,108006,101250],{"class":448},[147,108008,101253],{"class":448},[147,108010,108011,108013,108015],{"class":149,"line":312},[147,108012,30604],{"class":2237},[147,108014,101260],{"class":504},[147,108016,108017],{"class":504}," mujoco-render\n",[147,108019,108020,108022,108024,108026,108028],{"class":149,"line":1454},[147,108021,24104],{"class":2237},[147,108023,24107],{"class":504},[147,108025,101202],{"class":504},[147,108027,107981],{"class":504},[147,108029,107984],{"class":504},[19,108031,108032],{},"离屏渲染后端:",[138,108034,108036],{"className":24095,"code":108035,"language":24097,"meta":143,"style":143},"export MUJOCO_GL=egl\n",[51,108037,108038],{"__ignoreMap":143},[147,108039,108040,108042,108045,108047],{"class":149,"line":150},[147,108041,25316],{"class":397},[147,108043,108044],{"class":157}," MUJOCO_GL",[147,108046,445],{"class":397},[147,108048,108049],{"class":157},"egl\n",[19,108051,108052],{},"或:",[138,108054,108056],{"className":24095,"code":108055,"language":24097,"meta":143,"style":143},"export MUJOCO_GL=osmesa\n",[51,108057,108058],{"__ignoreMap":143},[147,108059,108060,108062,108064,108066],{"class":149,"line":150},[147,108061,25316],{"class":397},[147,108063,108044],{"class":157},[147,108065,445],{"class":397},[147,108067,108068],{"class":157},"osmesa\n",[19,108070,108071,108072,108075,108076,28659],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[51,108073,108074],{},"egl"," 失败，再尝试 ",[51,108077,108078],{},"osmesa",[19,108080,108081,108082,108085],{},"如果你在本机桌面环境运行，通常先不要设置 ",[51,108083,108084],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,108087,101317],{"id":101316},[19,108089,108090],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,108092,108093],{},"典型 viewer 流程:",[138,108095,108097],{"className":30652,"code":108096,"language":30654,"meta":143,"style":143},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[51,108098,108099,108112,108119,108123],{"__ignoreMap":143},[147,108100,108101,108104,108107,108109],{"class":149,"line":150},[147,108102,108103],{"class":397},"with",[147,108105,108106],{"class":157}," mujoco.viewer.launch_passive(model, data) ",[147,108108,31657],{"class":397},[147,108110,108111],{"class":157}," viewer:\n",[147,108113,108114,108116],{"class":149,"line":312},[147,108115,2525],{"class":397},[147,108117,108118],{"class":157}," viewer.is_running():\n",[147,108120,108121],{"class":149,"line":1454},[147,108122,101788],{"class":157},[147,108124,108125],{"class":149,"line":1469},[147,108126,108127],{"class":157},"        viewer.sync()\n",[19,108129,108130],{},"典型 renderer 流程:",[138,108132,108134],{"className":30652,"code":108133,"language":30654,"meta":143,"style":143},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[51,108135,108136,108162,108166,108171],{"__ignoreMap":143},[147,108137,108138,108140,108142,108145,108147,108149,108151,108153,108155,108157,108160],{"class":149,"line":150},[147,108139,107840],{"class":157},[147,108141,445],{"class":397},[147,108143,108144],{"class":157}," mujoco.Renderer(model, ",[147,108146,25255],{"class":5490},[147,108148,445],{"class":397},[147,108150,42616],{"class":448},[147,108152,12709],{"class":157},[147,108154,25251],{"class":5490},[147,108156,445],{"class":397},[147,108158,108159],{"class":448},"640",[147,108161,407],{"class":157},[147,108163,108164],{"class":149,"line":312},[147,108165,104775],{"class":157},[147,108167,108168],{"class":149,"line":1454},[147,108169,108170],{"class":157},"renderer.update_scene(data)\n",[147,108172,108173,108175,108177],{"class":149,"line":1469},[147,108174,107850],{"class":157},[147,108176,445],{"class":397},[147,108178,107855],{"class":157},[367,108180,108182],{"id":108181},"viewer-的同步逻辑","viewer 的同步逻辑",[19,108184,108185],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[138,108187,108189],{"className":30652,"code":108188,"language":30654,"meta":143,"style":143},"mujoco.mj_step(model, data)\nviewer.sync()\n",[51,108190,108191,108195],{"__ignoreMap":143},[147,108192,108193],{"class":149,"line":150},[147,108194,104775],{"class":157},[147,108196,108197],{"class":149,"line":312},[147,108198,108199],{"class":157},"viewer.sync()\n",[19,108201,108202,108204,108205,108208],{},[51,108203,101487],{}," 负责算物理，",[51,108206,108207],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[367,108210,108212],{"id":108211},"为什么要-sleep","为什么要 sleep",[19,108214,108215],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[138,108217,108219],{"className":30652,"code":108218,"language":30654,"meta":143,"style":143},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[51,108220,108221],{"__ignoreMap":143},[147,108222,108223,108226,108228,108231,108233,108236,108238],{"class":149,"line":150},[147,108224,108225],{"class":157},"sleep_time ",[147,108227,445],{"class":397},[147,108229,108230],{"class":157}," model.opt.timestep ",[147,108232,931],{"class":397},[147,108234,108235],{"class":157}," (time.time() ",[147,108237,931],{"class":397},[147,108239,108240],{"class":157}," step_start)\n",[19,108242,108243],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[367,108245,108247],{"id":108246},"renderer-输出是什么","renderer 输出是什么",[138,108249,108251],{"className":30652,"code":108250,"language":30654,"meta":143,"style":143},"image = renderer.render()\n",[51,108252,108253],{"__ignoreMap":143},[147,108254,108255,108257,108259],{"class":149,"line":150},[147,108256,107850],{"class":157},[147,108258,445],{"class":397},[147,108260,107855],{"class":157},[19,108262,108263],{},"得到的是 NumPy 数组，形状通常是：",[138,108265,108268],{"className":108266,"code":108267,"language":5461,"meta":143},[5459],"(height, width, 3)\n",[51,108269,108267],{"__ignoreMap":143},[19,108271,108272],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[138,108274,108276],{"className":30652,"code":108275,"language":30654,"meta":143,"style":143},"Image.fromarray(image).save(\"render_output.png\")\n",[51,108277,108278],{"__ignoreMap":143},[147,108279,108280,108283,108286],{"class":149,"line":150},[147,108281,108282],{"class":157},"Image.fromarray(image).save(",[147,108284,108285],{"class":504},"\"render_output.png\"",[147,108287,407],{"class":157},[14,108289,101525],{"id":101524},[19,108291,108292],{},"交互式 Viewer:",[138,108294,108296],{"className":30652,"code":108295,"language":30654,"meta":143,"style":143},"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",[51,108297,108298,108304,108308,108314,108320,108324,108328,108336,108341,108345,108349,108353,108358,108363,108367,108371,108375,108380,108384,108388,108392,108396,108400,108404,108416,108428,108436,108440,108450,108470,108480,108485,108490,108494,108511,108524,108529,108533,108537,108549],{"__ignoreMap":143},[147,108299,108300,108302],{"class":149,"line":150},[147,108301,30666],{"class":397},[147,108303,32103],{"class":157},[147,108305,108306],{"class":149,"line":312},[147,108307,2674],{"emptyLinePlaceholder":324},[147,108309,108310,108312],{"class":149,"line":1454},[147,108311,30666],{"class":397},[147,108313,101573],{"class":157},[147,108315,108316,108318],{"class":149,"line":1469},[147,108317,30666],{"class":397},[147,108319,107822],{"class":157},[147,108321,108322],{"class":149,"line":1475},[147,108323,2674],{"emptyLinePlaceholder":324},[147,108325,108326],{"class":149,"line":1489},[147,108327,2674],{"emptyLinePlaceholder":324},[147,108329,108330,108332,108334],{"class":149,"line":1495},[147,108331,101586],{"class":448},[147,108333,13838],{"class":397},[147,108335,101591],{"class":504},[147,108337,108338],{"class":149,"line":1586},[147,108339,108340],{"class":504},"\u003Cmujoco model=\"viewer_demo\">\n",[147,108342,108343],{"class":149,"line":1592},[147,108344,101601],{"class":504},[147,108346,108347],{"class":149,"line":1604},[147,108348,2674],{"emptyLinePlaceholder":324},[147,108350,108351],{"class":149,"line":1886},[147,108352,101610],{"class":504},[147,108354,108355],{"class":149,"line":1891},[147,108356,108357],{"class":504},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[147,108359,108360],{"class":149,"line":1897},[147,108361,108362],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[147,108364,108365],{"class":149,"line":1902},[147,108366,2674],{"emptyLinePlaceholder":324},[147,108368,108369],{"class":149,"line":1916},[147,108370,101624],{"class":504},[147,108372,108373],{"class":149,"line":1921},[147,108374,101629],{"class":504},[147,108376,108377],{"class":149,"line":1927},[147,108378,108379],{"class":504},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[147,108381,108382],{"class":149,"line":1948},[147,108383,101639],{"class":504},[147,108385,108386],{"class":149,"line":1953},[147,108387,101644],{"class":504},[147,108389,108390],{"class":149,"line":1967},[147,108391,101649],{"class":504},[147,108393,108394],{"class":149,"line":1972},[147,108395,95970],{"class":504},[147,108397,108398],{"class":149,"line":2001},[147,108399,2674],{"emptyLinePlaceholder":324},[147,108401,108402],{"class":149,"line":2006},[147,108403,2674],{"emptyLinePlaceholder":324},[147,108405,108406,108408,108410,108412,108414],{"class":149,"line":2023},[147,108407,32221],{"class":397},[147,108409,2247],{"class":2237},[147,108411,101670],{"class":157},[147,108413,95958],{"class":448},[147,108415,4013],{"class":157},[147,108417,108418,108420,108422,108424,108426],{"class":149,"line":2028},[147,108419,101679],{"class":157},[147,108421,445],{"class":397},[147,108423,101684],{"class":157},[147,108425,101586],{"class":448},[147,108427,407],{"class":157},[147,108429,108430,108432,108434],{"class":149,"line":2033},[147,108431,101693],{"class":157},[147,108433,445],{"class":397},[147,108435,101698],{"class":157},[147,108437,108438],{"class":149,"line":2038},[147,108439,2674],{"emptyLinePlaceholder":324},[147,108441,108442,108444,108446,108448],{"class":149,"line":2052},[147,108443,34452],{"class":397},[147,108445,108106],{"class":157},[147,108447,31657],{"class":397},[147,108449,108111],{"class":157},[147,108451,108452,108455,108458,108460,108463,108465,108468],{"class":149,"line":2057},[147,108453,108454],{"class":397},"        while",[147,108456,108457],{"class":157}," viewer.is_running() ",[147,108459,30736],{"class":397},[147,108461,108462],{"class":157}," data.time ",[147,108464,1309],{"class":397},[147,108466,108467],{"class":448}," 5.0",[147,108469,4013],{"class":157},[147,108471,108472,108475,108477],{"class":149,"line":2851},[147,108473,108474],{"class":157},"            step_start ",[147,108476,445],{"class":397},[147,108478,108479],{"class":157}," time.time()\n",[147,108481,108482],{"class":149,"line":2865},[147,108483,108484],{"class":157},"            mujoco.mj_step(model, data)\n",[147,108486,108487],{"class":149,"line":2873},[147,108488,108489],{"class":157},"            viewer.sync()\n",[147,108491,108492],{"class":149,"line":2878},[147,108493,2674],{"emptyLinePlaceholder":324},[147,108495,108496,108499,108501,108503,108505,108507,108509],{"class":149,"line":2884},[147,108497,108498],{"class":157},"            sleep_time ",[147,108500,445],{"class":397},[147,108502,108230],{"class":157},[147,108504,931],{"class":397},[147,108506,108235],{"class":157},[147,108508,931],{"class":397},[147,108510,108240],{"class":157},[147,108512,108513,108515,108518,108520,108522],{"class":149,"line":2890},[147,108514,4916],{"class":397},[147,108516,108517],{"class":157}," sleep_time ",[147,108519,1359],{"class":397},[147,108521,4367],{"class":448},[147,108523,4013],{"class":157},[147,108525,108526],{"class":149,"line":2895},[147,108527,108528],{"class":157},"                time.sleep(sleep_time)\n",[147,108530,108531],{"class":149,"line":8222},[147,108532,2674],{"emptyLinePlaceholder":324},[147,108534,108535],{"class":149,"line":8246},[147,108536,2674],{"emptyLinePlaceholder":324},[147,108538,108539,108541,108543,108545,108547],{"class":149,"line":8251},[147,108540,1805],{"class":397},[147,108542,31494],{"class":448},[147,108544,101831],{"class":397},[147,108546,101834],{"class":504},[147,108548,4013],{"class":157},[147,108550,108551],{"class":149,"line":8257},[147,108552,101841],{"class":157},[19,108554,103840],{},[138,108556,108558],{"className":24095,"code":108557,"language":24097,"meta":143,"style":143},"touch ch5_viewer.py\n",[51,108559,108560],{"__ignoreMap":143},[147,108561,108562,108564],{"class":149,"line":150},[147,108563,101555],{"class":2237},[147,108565,108566],{"class":504}," ch5_viewer.py\n",[19,108568,108569],{},"离屏 Renderer 保存图片:",[138,108571,108573],{"className":30652,"code":108572,"language":30654,"meta":143,"style":143},"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",[51,108574,108575,108587,108591,108597,108607,108611,108615,108623,108628,108632,108636,108640,108644,108649,108653,108657,108661,108665,108669,108673,108677,108681,108685,108689,108693,108705,108717,108725,108750,108754,108770,108774,108778,108793,108802,108806,108820,108825,108830,108834,108846,108858,108862,108866,108878],{"__ignoreMap":143},[147,108576,108577,108579,108582,108584],{"class":149,"line":150},[147,108578,31011],{"class":397},[147,108580,108581],{"class":157}," pathlib ",[147,108583,30666],{"class":397},[147,108585,108586],{"class":157}," Path\n",[147,108588,108589],{"class":149,"line":312},[147,108590,2674],{"emptyLinePlaceholder":324},[147,108592,108593,108595],{"class":149,"line":1454},[147,108594,30666],{"class":397},[147,108596,101573],{"class":157},[147,108598,108599,108601,108603,108605],{"class":149,"line":1469},[147,108600,31011],{"class":397},[147,108602,47537],{"class":448},[147,108604,47540],{"class":397},[147,108606,47543],{"class":157},[147,108608,108609],{"class":149,"line":1475},[147,108610,2674],{"emptyLinePlaceholder":324},[147,108612,108613],{"class":149,"line":1489},[147,108614,2674],{"emptyLinePlaceholder":324},[147,108616,108617,108619,108621],{"class":149,"line":1495},[147,108618,101586],{"class":448},[147,108620,13838],{"class":397},[147,108622,101591],{"class":504},[147,108624,108625],{"class":149,"line":1586},[147,108626,108627],{"class":504},"\u003Cmujoco model=\"renderer_demo\">\n",[147,108629,108630],{"class":149,"line":1592},[147,108631,101601],{"class":504},[147,108633,108634],{"class":149,"line":1604},[147,108635,2674],{"emptyLinePlaceholder":324},[147,108637,108638],{"class":149,"line":1886},[147,108639,101610],{"class":504},[147,108641,108642],{"class":149,"line":1891},[147,108643,108357],{"class":504},[147,108645,108646],{"class":149,"line":1897},[147,108647,108648],{"class":504},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[147,108650,108651],{"class":149,"line":1902},[147,108652,108362],{"class":504},[147,108654,108655],{"class":149,"line":1916},[147,108656,2674],{"emptyLinePlaceholder":324},[147,108658,108659],{"class":149,"line":1921},[147,108660,101624],{"class":504},[147,108662,108663],{"class":149,"line":1927},[147,108664,101629],{"class":504},[147,108666,108667],{"class":149,"line":1948},[147,108668,108379],{"class":504},[147,108670,108671],{"class":149,"line":1953},[147,108672,101639],{"class":504},[147,108674,108675],{"class":149,"line":1967},[147,108676,101644],{"class":504},[147,108678,108679],{"class":149,"line":1972},[147,108680,101649],{"class":504},[147,108682,108683],{"class":149,"line":2001},[147,108684,95970],{"class":504},[147,108686,108687],{"class":149,"line":2006},[147,108688,2674],{"emptyLinePlaceholder":324},[147,108690,108691],{"class":149,"line":2023},[147,108692,2674],{"emptyLinePlaceholder":324},[147,108694,108695,108697,108699,108701,108703],{"class":149,"line":2028},[147,108696,32221],{"class":397},[147,108698,2247],{"class":2237},[147,108700,101670],{"class":157},[147,108702,95958],{"class":448},[147,108704,4013],{"class":157},[147,108706,108707,108709,108711,108713,108715],{"class":149,"line":2033},[147,108708,101679],{"class":157},[147,108710,445],{"class":397},[147,108712,101684],{"class":157},[147,108714,101586],{"class":448},[147,108716,407],{"class":157},[147,108718,108719,108721,108723],{"class":149,"line":2038},[147,108720,101693],{"class":157},[147,108722,445],{"class":397},[147,108724,101698],{"class":157},[147,108726,108727,108730,108732,108734,108736,108738,108740,108742,108744,108746,108748],{"class":149,"line":2052},[147,108728,108729],{"class":157},"    renderer ",[147,108731,445],{"class":397},[147,108733,108144],{"class":157},[147,108735,25255],{"class":5490},[147,108737,445],{"class":397},[147,108739,42616],{"class":448},[147,108741,12709],{"class":157},[147,108743,25251],{"class":5490},[147,108745,445],{"class":397},[147,108747,108159],{"class":448},[147,108749,407],{"class":157},[147,108751,108752],{"class":149,"line":2057},[147,108753,2674],{"emptyLinePlaceholder":324},[147,108755,108756,108758,108760,108762,108764,108766,108768],{"class":149,"line":2851},[147,108757,3475],{"class":397},[147,108759,101773],{"class":157},[147,108761,26317],{"class":397},[147,108763,32717],{"class":448},[147,108765,401],{"class":157},[147,108767,710],{"class":448},[147,108769,31060],{"class":157},[147,108771,108772],{"class":149,"line":2865},[147,108773,101788],{"class":157},[147,108775,108776],{"class":149,"line":2873},[147,108777,2674],{"emptyLinePlaceholder":324},[147,108779,108780,108783,108786,108788,108791],{"class":149,"line":2878},[147,108781,108782],{"class":157},"    renderer.update_scene(data, ",[147,108784,108785],{"class":5490},"camera",[147,108787,445],{"class":397},[147,108789,108790],{"class":504},"\"fixed_camera\"",[147,108792,407],{"class":157},[147,108794,108795,108798,108800],{"class":149,"line":2884},[147,108796,108797],{"class":157},"    image ",[147,108799,445],{"class":397},[147,108801,107855],{"class":157},[147,108803,108804],{"class":149,"line":2890},[147,108805,2674],{"emptyLinePlaceholder":324},[147,108807,108808,108811,108813,108816,108818],{"class":149,"line":2895},[147,108809,108810],{"class":157},"    output_path ",[147,108812,445],{"class":397},[147,108814,108815],{"class":157}," Path(",[147,108817,108285],{"class":504},[147,108819,407],{"class":157},[147,108821,108822],{"class":149,"line":8222},[147,108823,108824],{"class":157},"    Image.fromarray(image).save(output_path)\n",[147,108826,108827],{"class":149,"line":8246},[147,108828,108829],{"class":157},"    renderer.close()\n",[147,108831,108832],{"class":149,"line":8251},[147,108833,2674],{"emptyLinePlaceholder":324},[147,108835,108836,108838,108840,108843],{"class":149,"line":8257},[147,108837,31573],{"class":448},[147,108839,401],{"class":157},[147,108841,108842],{"class":504},"\"saved:\"",[147,108844,108845],{"class":157},", output_path.resolve())\n",[147,108847,108848,108850,108852,108855],{"class":149,"line":8284},[147,108849,31573],{"class":448},[147,108851,401],{"class":157},[147,108853,108854],{"class":504},"\"image shape:\"",[147,108856,108857],{"class":157},", image.shape)\n",[147,108859,108860],{"class":149,"line":8289},[147,108861,2674],{"emptyLinePlaceholder":324},[147,108863,108864],{"class":149,"line":8295},[147,108865,2674],{"emptyLinePlaceholder":324},[147,108867,108868,108870,108872,108874,108876],{"class":149,"line":8307},[147,108869,1805],{"class":397},[147,108871,31494],{"class":448},[147,108873,101831],{"class":397},[147,108875,101834],{"class":504},[147,108877,4013],{"class":157},[147,108879,108880],{"class":149,"line":8319},[147,108881,101841],{"class":157},[19,108883,103840],{},[138,108885,108887],{"className":24095,"code":108886,"language":24097,"meta":143,"style":143},"touch ch5_renderer.py\n",[51,108888,108889],{"__ignoreMap":143},[147,108890,108891,108893],{"class":149,"line":150},[147,108892,101555],{"class":2237},[147,108894,108895],{"class":504}," ch5_renderer.py\n",[367,108897,101844],{"id":101844},[19,108899,108900],{},"viewer 上下文：",[138,108902,108904],{"className":30652,"code":108903,"language":30654,"meta":143,"style":143},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[51,108905,108906],{"__ignoreMap":143},[147,108907,108908,108910,108912,108914],{"class":149,"line":150},[147,108909,108103],{"class":397},[147,108911,108106],{"class":157},[147,108913,31657],{"class":397},[147,108915,108111],{"class":157},[19,108917,108918,108920],{},[51,108919,108103],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,108922,108923],{},"窗口循环：",[138,108925,108927],{"className":30652,"code":108926,"language":30654,"meta":143,"style":143},"while viewer.is_running() and data.time \u003C 5.0:\n",[51,108928,108929],{"__ignoreMap":143},[147,108930,108931,108934,108936,108938,108940,108942,108944],{"class":149,"line":150},[147,108932,108933],{"class":397},"while",[147,108935,108457],{"class":157},[147,108937,30736],{"class":397},[147,108939,108462],{"class":157},[147,108941,1309],{"class":397},[147,108943,108467],{"class":448},[147,108945,4013],{"class":157},[19,108947,108948],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,108950,108951],{},"固定相机：",[138,108953,108955],{"className":53340,"code":108954,"language":53342,"meta":143,"style":143},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[51,108956,108957],{"__ignoreMap":143},[147,108958,108959,108961,108963,108965,108967,108969,108971,108973,108976,108979,108981,108984],{"class":149,"line":150},[147,108960,1309],{"class":157},[147,108962,108785],{"class":153},[147,108964,15193],{"class":2237},[147,108966,445],{"class":157},[147,108968,108790],{"class":504},[147,108970,101378],{"class":2237},[147,108972,445],{"class":157},[147,108974,108975],{"class":504},"\"1.5 -2.0 1.2\"",[147,108977,108978],{"class":2237}," xyaxes",[147,108980,445],{"class":157},[147,108982,108983],{"class":504},"\"1 0.75 0 0 0 1\"",[147,108985,101416],{"class":157},[19,108987,108988],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[367,108990,108992],{"id":108991},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[138,108994,108996],{"className":30652,"code":108995,"language":30654,"meta":143,"style":143},"import time\n",[51,108997,108998],{"__ignoreMap":143},[147,108999,109000,109002],{"class":149,"line":150},[147,109001,30666],{"class":397},[147,109003,32103],{"class":157},[19,109005,109006],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[138,109008,109010],{"className":30652,"code":109009,"language":30654,"meta":143,"style":143},"import mujoco\nimport mujoco.viewer\n",[51,109011,109012,109018],{"__ignoreMap":143},[147,109013,109014,109016],{"class":149,"line":150},[147,109015,30666],{"class":397},[147,109017,101573],{"class":157},[147,109019,109020,109022],{"class":149,"line":312},[147,109021,30666],{"class":397},[147,109023,107822],{"class":157},[19,109025,109026],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[138,109028,109029],{"className":30652,"code":108903,"language":30654,"meta":143,"style":143},[51,109030,109031],{"__ignoreMap":143},[147,109032,109033,109035,109037,109039],{"class":149,"line":150},[147,109034,108103],{"class":397},[147,109036,108106],{"class":157},[147,109038,31657],{"class":397},[147,109040,108111],{"class":157},[19,109042,109043,109044,109047],{},"打开一个 viewer 窗口。",[51,109045,109046],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[138,109049,109050],{"className":30652,"code":108926,"language":30654,"meta":143,"style":143},[51,109051,109052],{"__ignoreMap":143},[147,109053,109054,109056,109058,109060,109062,109064,109066],{"class":149,"line":150},[147,109055,108933],{"class":397},[147,109057,108457],{"class":157},[147,109059,30736],{"class":397},[147,109061,108462],{"class":157},[147,109063,1309],{"class":397},[147,109065,108467],{"class":448},[147,109067,4013],{"class":157},[19,109069,109070,109071,109074],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[51,109072,109073],{},"viewer.is_running()"," 会变成 false，循环结束。",[138,109076,109078],{"className":30652,"code":109077,"language":30654,"meta":143,"style":143},"step_start = time.time()\n",[51,109079,109080],{"__ignoreMap":143},[147,109081,109082,109085,109087],{"class":149,"line":150},[147,109083,109084],{"class":157},"step_start ",[147,109086,445],{"class":397},[147,109088,108479],{"class":157},[19,109090,109091],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[138,109093,109094],{"className":30652,"code":108188,"language":30654,"meta":143,"style":143},[51,109095,109096,109100],{"__ignoreMap":143},[147,109097,109098],{"class":149,"line":150},[147,109099,104775],{"class":157},[147,109101,109102],{"class":149,"line":312},[147,109103,108199],{"class":157},[19,109105,109106,109108,109109,109111,109112,109114,109115,109118],{},[51,109107,101487],{}," 推进物理仿真。",[51,109110,108207],{}," 把最新的 ",[51,109113,33675],{}," 同步到窗口里显示。没有 ",[51,109116,109117],{},"sync()","，窗口可能看不到最新状态。",[138,109120,109121],{"className":30652,"code":108218,"language":30654,"meta":143,"style":143},[51,109122,109123],{"__ignoreMap":143},[147,109124,109125,109127,109129,109131,109133,109135,109137],{"class":149,"line":150},[147,109126,108225],{"class":157},[147,109128,445],{"class":397},[147,109130,108230],{"class":157},[147,109132,931],{"class":397},[147,109134,108235],{"class":157},[147,109136,931],{"class":397},[147,109138,108240],{"class":157},[19,109140,109141],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[138,109143,109145],{"className":30652,"code":109144,"language":30654,"meta":143,"style":143},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[51,109146,109147,109159],{"__ignoreMap":143},[147,109148,109149,109151,109153,109155,109157],{"class":149,"line":150},[147,109150,1805],{"class":397},[147,109152,108517],{"class":157},[147,109154,1359],{"class":397},[147,109156,4367],{"class":448},[147,109158,4013],{"class":157},[147,109160,109161],{"class":149,"line":312},[147,109162,109163],{"class":157},"    time.sleep(sleep_time)\n",[19,109165,109166],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[367,109168,109170],{"id":109169},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[138,109172,109174],{"className":30652,"code":109173,"language":30654,"meta":143,"style":143},"from pathlib import Path\n",[51,109175,109176],{"__ignoreMap":143},[147,109177,109178,109180,109182,109184],{"class":149,"line":150},[147,109179,31011],{"class":397},[147,109181,108581],{"class":157},[147,109183,30666],{"class":397},[147,109185,108586],{"class":157},[19,109187,109188,109189,109192,109193,109196],{},"导入 ",[51,109190,109191],{},"Path","，用来处理文件路径。相比直接写字符串，",[51,109194,109195],{},"Path(\"render_output.png\")"," 更清晰。",[138,109198,109200],{"className":30652,"code":109199,"language":30654,"meta":143,"style":143},"from PIL import Image\n",[51,109201,109202],{"__ignoreMap":143},[147,109203,109204,109206,109208,109210],{"class":149,"line":150},[147,109205,31011],{"class":397},[147,109207,47537],{"class":448},[147,109209,47540],{"class":397},[147,109211,47543],{"class":157},[19,109213,109214],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[138,109216,109217],{"className":53340,"code":108954,"language":53342,"meta":143,"style":143},[51,109218,109219],{"__ignoreMap":143},[147,109220,109221,109223,109225,109227,109229,109231,109233,109235,109237,109239,109241,109243],{"class":149,"line":150},[147,109222,1309],{"class":157},[147,109224,108785],{"class":153},[147,109226,15193],{"class":2237},[147,109228,445],{"class":157},[147,109230,108790],{"class":504},[147,109232,101378],{"class":2237},[147,109234,445],{"class":157},[147,109236,108975],{"class":504},[147,109238,108978],{"class":2237},[147,109240,445],{"class":157},[147,109242,108983],{"class":504},[147,109244,101416],{"class":157},[19,109246,109247,109248,109250,109251,109253,109254,109257,109258,109260],{},"定义一个相机。",[51,109249,80082],{}," 是相机名字。",[51,109252,104416],{}," 是相机在世界里的位置。",[51,109255,109256],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[51,109259,104416],{}," 来调视角。",[138,109262,109264],{"className":30652,"code":109263,"language":30654,"meta":143,"style":143},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[51,109265,109266],{"__ignoreMap":143},[147,109267,109268,109270,109272,109274,109276,109278,109280,109282,109284,109286,109288],{"class":149,"line":150},[147,109269,107840],{"class":157},[147,109271,445],{"class":397},[147,109273,108144],{"class":157},[147,109275,25255],{"class":5490},[147,109277,445],{"class":397},[147,109279,42616],{"class":448},[147,109281,12709],{"class":157},[147,109283,25251],{"class":5490},[147,109285,445],{"class":397},[147,109287,108159],{"class":448},[147,109289,407],{"class":157},[19,109291,109292,109293,101290,109295,109297],{},"创建离屏渲染器。",[51,109294,25255],{},[51,109296,25251],{}," 决定输出图片大小。",[138,109299,109300],{"className":30652,"code":101948,"language":30654,"meta":143,"style":143},[51,109301,109302,109318],{"__ignoreMap":143},[147,109303,109304,109306,109308,109310,109312,109314,109316],{"class":149,"line":150},[147,109305,3299],{"class":397},[147,109307,101773],{"class":157},[147,109309,26317],{"class":397},[147,109311,32717],{"class":448},[147,109313,401],{"class":157},[147,109315,710],{"class":448},[147,109317,31060],{"class":157},[147,109319,109320],{"class":149,"line":312},[147,109321,101971],{"class":157},[19,109323,109324],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[138,109326,109328],{"className":30652,"code":109327,"language":30654,"meta":143,"style":143},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[51,109329,109330],{"__ignoreMap":143},[147,109331,109332,109335,109337,109339,109341],{"class":149,"line":150},[147,109333,109334],{"class":157},"renderer.update_scene(data, ",[147,109336,108785],{"class":5490},[147,109338,445],{"class":397},[147,109340,108790],{"class":504},[147,109342,407],{"class":157},[19,109344,109345,109346,109348,109349,109352],{},"告诉 renderer：用当前 ",[51,109347,33675],{}," 的状态更新画面，并使用名为 ",[51,109350,109351],{},"fixed_camera"," 的相机视角。",[138,109354,109355],{"className":30652,"code":108250,"language":30654,"meta":143,"style":143},[51,109356,109357],{"__ignoreMap":143},[147,109358,109359,109361,109363],{"class":149,"line":150},[147,109360,107850],{"class":157},[147,109362,445],{"class":397},[147,109364,107855],{"class":157},[19,109366,109367,109368,109371],{},"真正渲染出图像。",[51,109369,109370],{},"image"," 是一个 NumPy 数组，不是文件。",[138,109373,109375],{"className":30652,"code":109374,"language":30654,"meta":143,"style":143},"Image.fromarray(image).save(output_path)\n",[51,109376,109377],{"__ignoreMap":143},[147,109378,109379],{"class":149,"line":150},[147,109380,109374],{"class":157},[19,109382,109383,109384,28659],{},"把数组转换成图片，并保存到 ",[51,109385,109386],{},"render_output.png",[138,109388,109390],{"className":30652,"code":109389,"language":30654,"meta":143,"style":143},"renderer.close()\n",[51,109391,109392],{"__ignoreMap":143},[147,109393,109394],{"class":149,"line":150},[147,109395,109389],{"class":157},[19,109397,109398],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,109400,102588],{"id":102587},[19,109402,109403,109404,109406,109407,28659],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[51,109405,109386],{},"，并输出图像数组形状，例如 ",[51,109408,109409],{},"(480, 640, 3)",[19,109411,109412],{},"如果图片里看不到方块，先检查：",[350,109414,109415,109418,109421],{},[353,109416,109417],{},"方块是否掉到相机视野外。",[353,109419,109420],{},"camera 位置是否合理。",[353,109422,109423,109424,109427],{},"是否在 ",[51,109425,109426],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,109429,102620],{"id":102619},[19,109431,109432],{},"运行 viewer:",[138,109434,109436],{"className":24095,"code":109435,"language":24097,"meta":143,"style":143},"python ch5_viewer.py\n",[51,109437,109438],{"__ignoreMap":143},[147,109439,109440,109442],{"class":149,"line":150},[147,109441,30654],{"class":2237},[147,109443,108566],{"class":504},[19,109445,109446],{},"运行 renderer:",[138,109448,109450],{"className":24095,"code":109449,"language":24097,"meta":143,"style":143},"python ch5_renderer.py\n",[51,109451,109452],{"__ignoreMap":143},[147,109453,109454,109456],{"class":149,"line":150},[147,109455,30654],{"class":2237},[147,109457,108895],{"class":504},[19,109459,109460],{},"如果在服务器上运行:",[138,109462,109464],{"className":24095,"code":109463,"language":24097,"meta":143,"style":143},"MUJOCO_GL=egl python ch5_renderer.py\n",[51,109465,109466],{"__ignoreMap":143},[147,109467,109468,109470,109472,109474,109477],{"class":149,"line":150},[147,109469,108084],{"class":157},[147,109471,445],{"class":397},[147,109473,108074],{"class":504},[147,109475,109476],{"class":2237}," python",[147,109478,108895],{"class":504},[19,109480,108052],{},[138,109482,109484],{"className":24095,"code":109483,"language":24097,"meta":143,"style":143},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[51,109485,109486],{"__ignoreMap":143},[147,109487,109488,109490,109492,109494,109496],{"class":149,"line":150},[147,109489,108084],{"class":157},[147,109491,445],{"class":397},[147,109493,108078],{"class":504},[147,109495,109476],{"class":2237},[147,109497,108895],{"class":504},[19,109499,109500],{},"再做几个练习：",[350,109502,109503,109510,109513,109519],{},[353,109504,109505,109506,109509],{},"把 renderer 分辨率改成 ",[51,109507,109508],{},"height=240, width=320","，观察输出 shape。",[353,109511,109512],{},"把方块颜色改成蓝色，重新保存图片。",[353,109514,109515,109516,109518],{},"把相机 ",[51,109517,104416],{}," 改远一点，观察画面中物体是否变小。",[353,109520,109521,109522,102686,109525,109528],{},"把 viewer 示例中的 ",[51,109523,109524],{},"data.time \u003C 5.0",[51,109526,109527],{},"data.time \u003C 20.0","，观察更长时间。",[14,109530,102725],{"id":102724},[367,109532,109534],{"id":109533},"viewer-窗口打不开","viewer 窗口打不开",[19,109536,109537],{},"安装:",[138,109539,109541],{"className":24095,"code":109540,"language":24097,"meta":143,"style":143},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[51,109542,109543],{"__ignoreMap":143},[147,109544,109545,109547,109549,109551,109553,109555,109557,109559,109561,109563,109565],{"class":149,"line":150},[147,109546,24850],{"class":2237},[147,109548,26589],{"class":504},[147,109550,24107],{"class":504},[147,109552,26674],{"class":448},[147,109554,102778],{"class":504},[147,109556,101106],{"class":504},[147,109558,102783],{"class":504},[147,109560,101119],{"class":504},[147,109562,101125],{"class":504},[147,109564,101116],{"class":504},[147,109566,109567],{"class":504}," libXinerama\n",[367,109569,109571],{"id":109570},"glfwerror",[51,109572,109573],{},"GLFWError",[19,109575,109576],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[367,109578,109580],{"id":109579},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,109582,109583,109584,82811,109586,109588],{},"尝试 ",[51,109585,101309],{},[51,109587,101312],{},"。可能存在版本差异。",[367,109590,109591],{"id":109591},"保存图片是黑的",[19,109593,102847],{},[350,109595,109596,109599,109602,109612],{},[353,109597,109598],{},"XML 里是否有 light。",[353,109600,109601],{},"相机是否对着模型。",[353,109603,109604,109605,109608,109609,28659],{},"是否先 ",[51,109606,109607],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[51,109610,109611],{},"renderer.render()",[353,109613,109614],{},"物体是否已经掉出视野。",[367,109616,109617],{"id":109617},"远程服务器没有显示器",[19,109619,109620],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[138,109622,109623],{"className":24095,"code":109463,"language":24097,"meta":143,"style":143},[51,109624,109625],{"__ignoreMap":143},[147,109626,109627,109629,109631,109633,109635],{"class":149,"line":150},[147,109628,108084],{"class":157},[147,109630,445],{"class":397},[147,109632,108074],{"class":504},[147,109634,109476],{"class":2237},[147,109636,108895],{"class":504},[19,109638,109639],{},"如果 EGL 不可用，再尝试：",[138,109641,109642],{"className":24095,"code":109483,"language":24097,"meta":143,"style":143},[51,109643,109644],{"__ignoreMap":143},[147,109645,109646,109648,109650,109652,109654],{"class":149,"line":150},[147,109647,108084],{"class":157},[147,109649,445],{"class":397},[147,109651,108078],{"class":504},[147,109653,109476],{"class":2237},[147,109655,108895],{"class":504},[14,109657,102879],{"id":102878},[19,109659,109660],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[350,109662,109663,109666,109669],{},[353,109664,109665],{},"先用 viewer 看模型和控制是否正常。",[353,109667,109668],{},"再用 renderer 保存图片或构造视觉观测。",[353,109670,109671],{},"最后把状态、动作、图像、奖励组织成训练数据。",[308,109673,109674],{},"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":143,"searchDepth":312,"depth":312,"links":109676},[109677,109678,109679,109684,109689,109690,109691,109698],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":109680},[109681,109682,109683],{"id":108181,"depth":1454,"text":108182},{"id":108211,"depth":1454,"text":108212},{"id":108246,"depth":1454,"text":108247},{"id":101524,"depth":312,"text":101525,"children":109685},[109686,109687,109688],{"id":101844,"depth":1454,"text":101844},{"id":108991,"depth":1454,"text":108992},{"id":109169,"depth":1454,"text":109170},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":109692},[109693,109694,109695,109696,109697],{"id":109533,"depth":1454,"text":109534},{"id":109570,"depth":1454,"text":109573},{"id":109579,"depth":1454,"text":109580},{"id":109591,"depth":1454,"text":109591},{"id":109617,"depth":1454,"text":109617},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107789,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109705,"title":109706,"body":109707,"description":143,"extension":322,"meta":111618,"navigation":324,"path":111619,"seo":111620,"stem":111621,"__hash__":111622},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109708,"toc":111594},[109709,109712,109714,109717,109719,109738,109741,109747,109750,109752,109754,109778,109780,109794,109796,109837,109839,109850,109852,109855,109861,109864,109898,109901,109933,109936,109968,109972,109975,110015,110018,110024,110027,110033,110037,110040,110046,110049,110053,110056,110096,110098,110111,110114,110116,110698,110700,110712,110715,110726,110728,110731,110750,110762,110765,110786,110789,110792,110835,110838,110841,110861,110868,110870,110888,110903,110906,110912,110915,110921,110938,110945,110976,110987,111021,111032,111049,111058,111066,111071,111085,111088,111109,111115,111129,111134,111164,111174,111199,111207,111230,111233,111249,111252,111260,111266,111288,111301,111322,111331,111370,111381,111383,111386,111392,111395,111398,111404,111407,111427,111430,111432,111471,111473,111476,111484,111487,111490,111517,111520,111530,111536,111539,111545,111547,111553,111557,111560,111562,111565,111589,111592],[10,109710,109706],{"id":109711},"_6控制任务cartpole",[14,109713,100919],{"id":100918},[19,109715,109716],{},"本章搭建一个最小 Cartpole 控制任务。",[19,109718,104601],{},[350,109720,109721,109724,109726,109729,109732,109735],{},[353,109722,109723],{},"slide joint",[353,109725,106454],{},[353,109727,109728],{},"cart force actuator",[353,109730,109731],{},"状态观测",[353,109733,109734],{},"简单控制循环",[353,109736,109737],{},"reward 设计雏形",[19,109739,109740],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[138,109742,109745],{"className":109743,"code":109744,"language":5461,"meta":143},[5459],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[51,109746,109744],{"__ignoreMap":143},[19,109748,109749],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,109751,101042],{"id":101041},[19,109753,101045],{},[138,109755,109756],{"className":24095,"code":104658,"language":24097,"meta":143,"style":143},[51,109757,109758],{"__ignoreMap":143},[147,109759,109760,109762,109764,109766,109768,109770,109772,109774,109776],{"class":149,"line":150},[147,109761,24850],{"class":2237},[147,109763,26589],{"class":504},[147,109765,24107],{"class":504},[147,109767,26674],{"class":448},[147,109769,104673],{"class":504},[147,109771,101070],{"class":504},[147,109773,102773],{"class":504},[147,109775,101086],{"class":504},[147,109777,104682],{"class":504},[19,109779,103089],{},[138,109781,109782],{"className":24095,"code":101191,"language":24097,"meta":143,"style":143},[51,109783,109784],{"__ignoreMap":143},[147,109785,109786,109788,109790,109792],{"class":149,"line":150},[147,109787,24104],{"class":2237},[147,109789,24107],{"class":504},[147,109791,101202],{"class":504},[147,109793,101205],{"class":504},[19,109795,103106],{},[138,109797,109799],{"className":24095,"code":109798,"language":24097,"meta":143,"style":143},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[51,109800,109801,109818,109827],{"__ignoreMap":143},[147,109802,109803,109805,109807,109809,109812,109814,109816],{"class":149,"line":150},[147,109804,30604],{"class":2237},[147,109806,29450],{"class":504},[147,109808,25389],{"class":448},[147,109810,109811],{"class":504}," mujoco-cartpole",[147,109813,101247],{"class":504},[147,109815,101250],{"class":448},[147,109817,101253],{"class":448},[147,109819,109820,109822,109824],{"class":149,"line":312},[147,109821,30604],{"class":2237},[147,109823,101260],{"class":504},[147,109825,109826],{"class":504}," mujoco-cartpole\n",[147,109828,109829,109831,109833,109835],{"class":149,"line":1454},[147,109830,24104],{"class":2237},[147,109832,24107],{"class":504},[147,109834,101202],{"class":504},[147,109836,101205],{"class":504},[19,109838,101276],{},[350,109840,109841,109844,109847],{},[353,109842,109843],{},"本章不依赖 Gymnasium。",[353,109845,109846],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[353,109848,109849],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,109851,101317],{"id":101316},[19,109853,109854],{},"Cartpole 的模型结构:",[138,109856,109859],{"className":109857,"code":109858,"language":5461,"meta":143},[5459],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[51,109860,109858],{"__ignoreMap":143},[19,109862,109863],{},"小车通过 slide joint 左右移动:",[138,109865,109867],{"className":53340,"code":109866,"language":53342,"meta":143,"style":143},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[51,109868,109869],{"__ignoreMap":143},[147,109870,109871,109873,109875,109877,109879,109882,109884,109886,109889,109891,109893,109896],{"class":149,"line":150},[147,109872,1309],{"class":157},[147,109874,103226],{"class":153},[147,109876,15193],{"class":2237},[147,109878,445],{"class":157},[147,109880,109881],{"class":504},"\"cart_x\"",[147,109883,54097],{"class":2237},[147,109885,445],{"class":157},[147,109887,109888],{"class":504},"\"slide\"",[147,109890,106298],{"class":2237},[147,109892,445],{"class":157},[147,109894,109895],{"class":504},"\"1 0 0\"",[147,109897,101416],{"class":157},[19,109899,109900],{},"杆子通过 hinge joint 旋转:",[138,109902,109904],{"className":53340,"code":109903,"language":53342,"meta":143,"style":143},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[51,109905,109906],{"__ignoreMap":143},[147,109907,109908,109910,109912,109914,109916,109919,109921,109923,109925,109927,109929,109931],{"class":149,"line":150},[147,109909,1309],{"class":157},[147,109911,103226],{"class":153},[147,109913,15193],{"class":2237},[147,109915,445],{"class":157},[147,109917,109918],{"class":504},"\"pole_hinge\"",[147,109920,54097],{"class":2237},[147,109922,445],{"class":157},[147,109924,106289],{"class":504},[147,109926,106298],{"class":2237},[147,109928,445],{"class":157},[147,109930,106303],{"class":504},[147,109932,101416],{"class":157},[19,109934,109935],{},"控制力作用在小车 slide joint 上:",[138,109937,109939],{"className":53340,"code":109938,"language":53342,"meta":143,"style":143},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[51,109940,109941],{"__ignoreMap":143},[147,109942,109943,109945,109947,109949,109951,109954,109956,109958,109960,109962,109964,109966],{"class":149,"line":150},[147,109944,1309],{"class":157},[147,109946,106344],{"class":153},[147,109948,15193],{"class":2237},[147,109950,445],{"class":157},[147,109952,109953],{"class":504},"\"cart_motor\"",[147,109955,106354],{"class":2237},[147,109957,445],{"class":157},[147,109959,109881],{"class":504},[147,109961,106361],{"class":2237},[147,109963,445],{"class":157},[147,109965,54589],{"class":504},[147,109967,101416],{"class":157},[367,109969,109971],{"id":109970},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,109973,109974],{},"这个简化模型有两个关节：",[537,109976,109977,109988],{},[540,109978,109979],{},[543,109980,109981,109983,109985],{},[546,109982,103029],{"align":24009},[546,109984,24010],{"align":24009},[546,109986,109987],{"align":24009},"对应状态",[583,109989,109990,110003],{},[543,109991,109992,109997,110000],{},[588,109993,109994],{"align":24009},[51,109995,109996],{},"cart_x",[588,109998,109999],{"align":24009},"slide",[588,110001,110002],{"align":24009},"小车 x 位置",[543,110004,110005,110010,110012],{},[588,110006,110007],{"align":24009},[51,110008,110009],{},"pole_hinge",[588,110011,106110],{"align":24009},[588,110013,110014],{"align":24009},"杆子角度",[19,110016,110017],{},"所以：",[138,110019,110022],{"className":110020,"code":110021,"language":5461,"meta":143},[5459],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[51,110023,110021],{"__ignoreMap":143},[19,110025,110026],{},"把它们拼起来就是观测：",[138,110028,110031],{"className":110029,"code":110030,"language":5461,"meta":143},[5459],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[51,110032,110030],{"__ignoreMap":143},[367,110034,110036],{"id":110035},"action-是什么","action 是什么",[19,110038,110039],{},"本章只有一个 actuator：",[138,110041,110044],{"className":110042,"code":110043,"language":5461,"meta":143},[5459],"data.ctrl[0] = action\n",[51,110045,110043],{"__ignoreMap":143},[19,110047,110048],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[367,110050,110052],{"id":110051},"reward-是什么","reward 是什么",[19,110054,110055],{},"奖励函数：",[138,110057,110059],{"className":30652,"code":110058,"language":30654,"meta":143,"style":143},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[51,110060,110061],{"__ignoreMap":143},[147,110062,110063,110065,110068,110070,110072,110074,110077,110079,110082,110084,110086,110088,110091,110093],{"class":149,"line":150},[147,110064,17319],{"class":397},[147,110066,110067],{"class":448}," float",[147,110069,401],{"class":157},[147,110071,102675],{"class":448},[147,110073,52544],{"class":397},[147,110075,110076],{"class":448}," 0.1",[147,110078,6792],{"class":397},[147,110080,110081],{"class":157}," cart_x ",[147,110083,854],{"class":397},[147,110085,110081],{"class":157},[147,110087,931],{"class":397},[147,110089,110090],{"class":157}," pole_angle ",[147,110092,854],{"class":397},[147,110094,110095],{"class":157}," pole_angle)\n",[19,110097,106496],{},[350,110099,110100,110105,110108],{},[353,110101,110102,110103,28659],{},"基础奖励是 ",[51,110104,102675],{},[353,110106,110107],{},"小车离中心越远，扣分越多。",[353,110109,110110],{},"杆子角度越大，扣分越多。",[19,110112,110113],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,110115,101525],{"id":101524},[138,110117,110119],{"className":30652,"code":110118,"language":30654,"meta":143,"style":143},"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",[51,110120,110121,110127,110137,110141,110145,110153,110158,110162,110166,110170,110175,110179,110184,110189,110194,110198,110203,110208,110213,110217,110221,110225,110229,110233,110238,110242,110246,110250,110254,110258,110268,110275,110279,110283,110297,110311,110324,110354,110358,110362,110374,110386,110394,110398,110411,110415,110419,110428,110432,110448,110458,110471,110484,110488,110511,110529,110533,110545,110549,110553,110563,110573,110577,110593,110634,110638,110658,110674,110678,110682,110694],{"__ignoreMap":143},[147,110122,110123,110125],{"class":149,"line":150},[147,110124,30666],{"class":397},[147,110126,101573],{"class":157},[147,110128,110129,110131,110133,110135],{"class":149,"line":312},[147,110130,30666],{"class":397},[147,110132,31654],{"class":157},[147,110134,31657],{"class":397},[147,110136,31660],{"class":157},[147,110138,110139],{"class":149,"line":1454},[147,110140,2674],{"emptyLinePlaceholder":324},[147,110142,110143],{"class":149,"line":1469},[147,110144,2674],{"emptyLinePlaceholder":324},[147,110146,110147,110149,110151],{"class":149,"line":1475},[147,110148,101586],{"class":448},[147,110150,13838],{"class":397},[147,110152,101591],{"class":504},[147,110154,110155],{"class":149,"line":1489},[147,110156,110157],{"class":504},"\u003Cmujoco model=\"cartpole\">\n",[147,110159,110160],{"class":149,"line":1495},[147,110161,101601],{"class":504},[147,110163,110164],{"class":149,"line":1586},[147,110165,2674],{"emptyLinePlaceholder":324},[147,110167,110168],{"class":149,"line":1592},[147,110169,101610],{"class":504},[147,110171,110172],{"class":149,"line":1604},[147,110173,110174],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[147,110176,110177],{"class":149,"line":1886},[147,110178,2674],{"emptyLinePlaceholder":324},[147,110180,110181],{"class":149,"line":1891},[147,110182,110183],{"class":504},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[147,110185,110186],{"class":149,"line":1897},[147,110187,110188],{"class":504},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[147,110190,110191],{"class":149,"line":1902},[147,110192,110193],{"class":504},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[147,110195,110196],{"class":149,"line":1916},[147,110197,2674],{"emptyLinePlaceholder":324},[147,110199,110200],{"class":149,"line":1921},[147,110201,110202],{"class":504},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[147,110204,110205],{"class":149,"line":1927},[147,110206,110207],{"class":504},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[147,110209,110210],{"class":149,"line":1948},[147,110211,110212],{"class":504},"        \u003Cgeom name=\"pole_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.8\" size=\"0.03\" mass=\"0.2\" rgba=\"1 0.2 0.1 1\"\u002F>\n",[147,110214,110215],{"class":149,"line":1953},[147,110216,106708],{"class":504},[147,110218,110219],{"class":149,"line":1967},[147,110220,101639],{"class":504},[147,110222,110223],{"class":149,"line":1972},[147,110224,101644],{"class":504},[147,110226,110227],{"class":149,"line":2001},[147,110228,2674],{"emptyLinePlaceholder":324},[147,110230,110231],{"class":149,"line":2006},[147,110232,106725],{"class":504},[147,110234,110235],{"class":149,"line":2023},[147,110236,110237],{"class":504},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[147,110239,110240],{"class":149,"line":2028},[147,110241,106735],{"class":504},[147,110243,110244],{"class":149,"line":2033},[147,110245,101649],{"class":504},[147,110247,110248],{"class":149,"line":2038},[147,110249,95970],{"class":504},[147,110251,110252],{"class":149,"line":2052},[147,110253,2674],{"emptyLinePlaceholder":324},[147,110255,110256],{"class":149,"line":2057},[147,110257,2674],{"emptyLinePlaceholder":324},[147,110259,110260,110262,110265],{"class":149,"line":2851},[147,110261,32221],{"class":397},[147,110263,110264],{"class":2237}," get_observation",[147,110266,110267],{"class":157},"(data: mujoco.MjData) -> np.ndarray:\n",[147,110269,110270,110272],{"class":149,"line":2865},[147,110271,4364],{"class":397},[147,110273,110274],{"class":157}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[147,110276,110277],{"class":149,"line":2873},[147,110278,2674],{"emptyLinePlaceholder":324},[147,110280,110281],{"class":149,"line":2878},[147,110282,2674],{"emptyLinePlaceholder":324},[147,110284,110285,110287,110290,110293,110295],{"class":149,"line":2884},[147,110286,32221],{"class":397},[147,110288,110289],{"class":2237}," compute_reward",[147,110291,110292],{"class":157},"(obs: np.ndarray) -> ",[147,110294,439],{"class":448},[147,110296,4013],{"class":157},[147,110298,110299,110302,110304,110307,110309],{"class":149,"line":2890},[147,110300,110301],{"class":157},"    cart_x ",[147,110303,445],{"class":397},[147,110305,110306],{"class":157}," obs[",[147,110308,590],{"class":448},[147,110310,33520],{"class":157},[147,110312,110313,110316,110318,110320,110322],{"class":149,"line":2895},[147,110314,110315],{"class":157},"    pole_angle ",[147,110317,445],{"class":397},[147,110319,110306],{"class":157},[147,110321,616],{"class":448},[147,110323,33520],{"class":157},[147,110325,110326,110328,110330,110332,110334,110336,110338,110340,110342,110344,110346,110348,110350,110352],{"class":149,"line":8222},[147,110327,4364],{"class":397},[147,110329,110067],{"class":448},[147,110331,401],{"class":157},[147,110333,102675],{"class":448},[147,110335,52544],{"class":397},[147,110337,110076],{"class":448},[147,110339,6792],{"class":397},[147,110341,110081],{"class":157},[147,110343,854],{"class":397},[147,110345,110081],{"class":157},[147,110347,931],{"class":397},[147,110349,110090],{"class":157},[147,110351,854],{"class":397},[147,110353,110095],{"class":157},[147,110355,110356],{"class":149,"line":8246},[147,110357,2674],{"emptyLinePlaceholder":324},[147,110359,110360],{"class":149,"line":8251},[147,110361,2674],{"emptyLinePlaceholder":324},[147,110363,110364,110366,110368,110370,110372],{"class":149,"line":8257},[147,110365,32221],{"class":397},[147,110367,2247],{"class":2237},[147,110369,101670],{"class":157},[147,110371,95958],{"class":448},[147,110373,4013],{"class":157},[147,110375,110376,110378,110380,110382,110384],{"class":149,"line":8284},[147,110377,101679],{"class":157},[147,110379,445],{"class":397},[147,110381,101684],{"class":157},[147,110383,101586],{"class":448},[147,110385,407],{"class":157},[147,110387,110388,110390,110392],{"class":149,"line":8289},[147,110389,101693],{"class":157},[147,110391,445],{"class":397},[147,110393,101698],{"class":157},[147,110395,110396],{"class":149,"line":8295},[147,110397,2674],{"emptyLinePlaceholder":324},[147,110399,110400,110402,110404,110406,110408],{"class":149,"line":8307},[147,110401,105339],{"class":157},[147,110403,616],{"class":448},[147,110405,4717],{"class":157},[147,110407,445],{"class":397},[147,110409,110410],{"class":448}," 0.1\n",[147,110412,110413],{"class":149,"line":8319},[147,110414,105352],{"class":157},[147,110416,110417],{"class":149,"line":8331},[147,110418,2674],{"emptyLinePlaceholder":324},[147,110420,110421,110424,110426],{"class":149,"line":9990},[147,110422,110423],{"class":157},"    total_reward ",[147,110425,445],{"class":397},[147,110427,105031],{"class":448},[147,110429,110430],{"class":149,"line":10015},[147,110431,2674],{"emptyLinePlaceholder":324},[147,110433,110434,110436,110438,110440,110442,110444,110446],{"class":149,"line":10038},[147,110435,3475],{"class":397},[147,110437,31890],{"class":157},[147,110439,26317],{"class":397},[147,110441,32717],{"class":448},[147,110443,401],{"class":157},[147,110445,6684],{"class":448},[147,110447,31060],{"class":157},[147,110449,110450,110453,110455],{"class":149,"line":10062},[147,110451,110452],{"class":157},"        obs ",[147,110454,445],{"class":397},[147,110456,110457],{"class":157}," get_observation(data)\n",[147,110459,110460,110463,110465,110467,110469],{"class":149,"line":10067},[147,110461,110462],{"class":157},"        pole_angle ",[147,110464,445],{"class":397},[147,110466,110306],{"class":157},[147,110468,616],{"class":448},[147,110470,33520],{"class":157},[147,110472,110473,110476,110478,110480,110482],{"class":149,"line":10072},[147,110474,110475],{"class":157},"        pole_angular_velocity ",[147,110477,445],{"class":397},[147,110479,110306],{"class":157},[147,110481,471],{"class":448},[147,110483,33520],{"class":157},[147,110485,110486],{"class":149,"line":10077},[147,110487,2674],{"emptyLinePlaceholder":324},[147,110489,110490,110493,110495,110498,110500,110502,110504,110506,110508],{"class":149,"line":10086},[147,110491,110492],{"class":157},"        action ",[147,110494,445],{"class":397},[147,110496,110497],{"class":448}," 2.0",[147,110499,6792],{"class":397},[147,110501,110090],{"class":157},[147,110503,880],{"class":397},[147,110505,62140],{"class":448},[147,110507,6792],{"class":397},[147,110509,110510],{"class":157}," pole_angular_velocity\n",[147,110512,110513,110515,110517,110519,110521,110523,110525,110527],{"class":149,"line":10091},[147,110514,110492],{"class":157},[147,110516,445],{"class":397},[147,110518,107717],{"class":157},[147,110520,931],{"class":397},[147,110522,102675],{"class":448},[147,110524,12709],{"class":157},[147,110526,102675],{"class":448},[147,110528,407],{"class":157},[147,110530,110531],{"class":149,"line":10097},[147,110532,2674],{"emptyLinePlaceholder":324},[147,110534,110535,110537,110539,110541,110543],{"class":149,"line":10118},[147,110536,106887],{"class":157},[147,110538,590],{"class":448},[147,110540,4717],{"class":157},[147,110542,445],{"class":397},[147,110544,107740],{"class":157},[147,110546,110547],{"class":149,"line":10124},[147,110548,101788],{"class":157},[147,110550,110551],{"class":149,"line":10138},[147,110552,2674],{"emptyLinePlaceholder":324},[147,110554,110555,110558,110560],{"class":149,"line":10144},[147,110556,110557],{"class":157},"        reward ",[147,110559,445],{"class":397},[147,110561,110562],{"class":157}," compute_reward(get_observation(data))\n",[147,110564,110565,110568,110570],{"class":149,"line":10171},[147,110566,110567],{"class":157},"        total_reward ",[147,110569,9751],{"class":397},[147,110571,110572],{"class":157}," reward\n",[147,110574,110575],{"class":149,"line":10180},[147,110576,2674],{"emptyLinePlaceholder":324},[147,110578,110579,110581,110583,110585,110587,110589,110591],{"class":149,"line":10186},[147,110580,2771],{"class":397},[147,110582,31890],{"class":157},[147,110584,727],{"class":397},[147,110586,6028],{"class":448},[147,110588,101831],{"class":397},[147,110590,4367],{"class":448},[147,110592,4013],{"class":157},[147,110594,110595,110597,110599,110602,110605,110608,110611,110613,110616,110619,110621,110623,110625,110627,110630,110632],{"class":149,"line":10194},[147,110596,34924],{"class":448},[147,110598,401],{"class":157},[147,110600,110601],{"class":504},"\"step:\"",[147,110603,110604],{"class":157},", step, ",[147,110606,110607],{"class":504},"\"obs:\"",[147,110609,110610],{"class":157},", np.round(obs, ",[147,110612,471],{"class":448},[147,110614,110615],{"class":157},"), ",[147,110617,110618],{"class":504},"\"action:\"",[147,110620,12709],{"class":157},[147,110622,32292],{"class":448},[147,110624,401],{"class":157},[147,110626,439],{"class":448},[147,110628,110629],{"class":157},"(action), ",[147,110631,471],{"class":448},[147,110633,30771],{"class":157},[147,110635,110636],{"class":149,"line":10199},[147,110637,2674],{"emptyLinePlaceholder":324},[147,110639,110640,110642,110644,110647,110649,110651,110654,110656],{"class":149,"line":16877},[147,110641,31573],{"class":448},[147,110643,401],{"class":157},[147,110645,110646],{"class":504},"\"total_reward:\"",[147,110648,12709],{"class":157},[147,110650,32292],{"class":448},[147,110652,110653],{"class":157},"(total_reward, ",[147,110655,471],{"class":448},[147,110657,30771],{"class":157},[147,110659,110660,110662,110664,110667,110670,110672],{"class":149,"line":16883},[147,110661,31573],{"class":448},[147,110663,401],{"class":157},[147,110665,110666],{"class":504},"\"final obs:\"",[147,110668,110669],{"class":157},", np.round(get_observation(data), ",[147,110671,471],{"class":448},[147,110673,30771],{"class":157},[147,110675,110676],{"class":149,"line":16906},[147,110677,2674],{"emptyLinePlaceholder":324},[147,110679,110680],{"class":149,"line":16912},[147,110681,2674],{"emptyLinePlaceholder":324},[147,110683,110684,110686,110688,110690,110692],{"class":149,"line":16935},[147,110685,1805],{"class":397},[147,110687,31494],{"class":448},[147,110689,101831],{"class":397},[147,110691,101834],{"class":504},[147,110693,4013],{"class":157},[147,110695,110696],{"class":149,"line":16949},[147,110697,101841],{"class":157},[19,110699,103840],{},[138,110701,110703],{"className":24095,"code":110702,"language":24097,"meta":143,"style":143},"touch ch6_cartpole.py\n",[51,110704,110705],{"__ignoreMap":143},[147,110706,110707,110709],{"class":149,"line":150},[147,110708,101555],{"class":2237},[147,110710,110711],{"class":504}," ch6_cartpole.py\n",[19,110713,110714],{},"运行：",[138,110716,110718],{"className":24095,"code":110717,"language":24097,"meta":143,"style":143},"python ch6_cartpole.py\n",[51,110719,110720],{"__ignoreMap":143},[147,110721,110722,110724],{"class":149,"line":150},[147,110723,30654],{"class":2237},[147,110725,110711],{"class":504},[367,110727,101844],{"id":101844},[19,110729,110730],{},"构造观测：",[138,110732,110734],{"className":30652,"code":110733,"language":30654,"meta":143,"style":143},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[51,110735,110736,110744],{"__ignoreMap":143},[147,110737,110738,110740,110742],{"class":149,"line":150},[147,110739,32221],{"class":397},[147,110741,110264],{"class":2237},[147,110743,110267],{"class":157},[147,110745,110746,110748],{"class":149,"line":312},[147,110747,4364],{"class":397},[147,110749,110274],{"class":157},[19,110751,110752,110755,110756,110758,110759,110761],{},[51,110753,110754],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[51,110757,104300],{}," 2 维，",[51,110760,104630],{}," 2 维，所以 obs 是 4 维。",[19,110763,110764],{},"设置初始角度：",[138,110766,110768],{"className":30652,"code":110767,"language":30654,"meta":143,"style":143},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[51,110769,110770,110782],{"__ignoreMap":143},[147,110771,110772,110774,110776,110778,110780],{"class":149,"line":150},[147,110773,104969],{"class":157},[147,110775,616],{"class":448},[147,110777,4717],{"class":157},[147,110779,445],{"class":397},[147,110781,110410],{"class":448},[147,110783,110784],{"class":149,"line":312},[147,110785,104813],{"class":157},[19,110787,110788],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,110790,110791],{},"简单反馈控制：",[138,110793,110795],{"className":30652,"code":110794,"language":30654,"meta":143,"style":143},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[51,110796,110797,110817],{"__ignoreMap":143},[147,110798,110799,110801,110803,110805,110807,110809,110811,110813,110815],{"class":149,"line":150},[147,110800,107712],{"class":157},[147,110802,445],{"class":397},[147,110804,110497],{"class":448},[147,110806,6792],{"class":397},[147,110808,110090],{"class":157},[147,110810,880],{"class":397},[147,110812,62140],{"class":448},[147,110814,6792],{"class":397},[147,110816,110510],{"class":157},[147,110818,110819,110821,110823,110825,110827,110829,110831,110833],{"class":149,"line":312},[147,110820,107712],{"class":157},[147,110822,445],{"class":397},[147,110824,107717],{"class":157},[147,110826,931],{"class":397},[147,110828,102675],{"class":448},[147,110830,12709],{"class":157},[147,110832,102675],{"class":448},[147,110834,407],{"class":157},[19,110836,110837],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,110839,110840],{},"限制动作：",[138,110842,110844],{"className":30652,"code":110843,"language":30654,"meta":143,"style":143},"np.clip(action, -1.0, 1.0)\n",[51,110845,110846],{"__ignoreMap":143},[147,110847,110848,110851,110853,110855,110857,110859],{"class":149,"line":150},[147,110849,110850],{"class":157},"np.clip(action, ",[147,110852,931],{"class":397},[147,110854,102675],{"class":448},[147,110856,12709],{"class":157},[147,110858,102675],{"class":448},[147,110860,407],{"class":157},[19,110862,110863,110864,110867],{},"因为 XML 里 ",[51,110865,110866],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[367,110869,101980],{"id":101980},[138,110871,110872],{"className":30652,"code":110733,"language":30654,"meta":143,"style":143},[51,110873,110874,110882],{"__ignoreMap":143},[147,110875,110876,110878,110880],{"class":149,"line":150},[147,110877,32221],{"class":397},[147,110879,110264],{"class":2237},[147,110881,110267],{"class":157},[147,110883,110884,110886],{"class":149,"line":312},[147,110885,4364],{"class":397},[147,110887,110274],{"class":157},[19,110889,110890,110891,110894,110895,110898,110899,110902],{},"这段定义了一个函数，用来获取当前观测。",[51,110892,110893],{},"data.qpos.copy()"," 是位置数组副本，",[51,110896,110897],{},"data.qvel.copy()"," 是速度数组副本。",[51,110900,110901],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,110904,110905],{},"在本章模型里：",[138,110907,110910],{"className":110908,"code":110909,"language":5461,"meta":143},[5459],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[51,110911,110909],{"__ignoreMap":143},[19,110913,110914],{},"所以返回的 obs 是：",[138,110916,110919],{"className":110917,"code":110918,"language":5461,"meta":143},[5459],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[51,110920,110918],{"__ignoreMap":143},[138,110922,110924],{"className":30652,"code":110923,"language":30654,"meta":143,"style":143},"def compute_reward(obs: np.ndarray) -> float:\n",[51,110925,110926],{"__ignoreMap":143},[147,110927,110928,110930,110932,110934,110936],{"class":149,"line":150},[147,110929,32221],{"class":397},[147,110931,110289],{"class":2237},[147,110933,110292],{"class":157},[147,110935,439],{"class":448},[147,110937,4013],{"class":157},[19,110939,110940,110941,110944],{},"这行定义奖励函数。输入是观测 ",[51,110942,110943],{},"obs","，输出是一个浮点数奖励。",[138,110946,110948],{"className":30652,"code":110947,"language":30654,"meta":143,"style":143},"cart_x = obs[0]\npole_angle = obs[1]\n",[51,110949,110950,110963],{"__ignoreMap":143},[147,110951,110952,110955,110957,110959,110961],{"class":149,"line":150},[147,110953,110954],{"class":157},"cart_x ",[147,110956,445],{"class":397},[147,110958,110306],{"class":157},[147,110960,590],{"class":448},[147,110962,33520],{"class":157},[147,110964,110965,110968,110970,110972,110974],{"class":149,"line":312},[147,110966,110967],{"class":157},"pole_angle ",[147,110969,445],{"class":397},[147,110971,110306],{"class":157},[147,110973,616],{"class":448},[147,110975,33520],{"class":157},[19,110977,110978,110979,110982,110983,110986],{},"数组索引从 0 开始。",[51,110980,110981],{},"obs[0]"," 是第一个元素，也就是小车位置。",[51,110984,110985],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[138,110988,110989],{"className":30652,"code":110058,"language":30654,"meta":143,"style":143},[51,110990,110991],{"__ignoreMap":143},[147,110992,110993,110995,110997,110999,111001,111003,111005,111007,111009,111011,111013,111015,111017,111019],{"class":149,"line":150},[147,110994,17319],{"class":397},[147,110996,110067],{"class":448},[147,110998,401],{"class":157},[147,111000,102675],{"class":448},[147,111002,52544],{"class":397},[147,111004,110076],{"class":448},[147,111006,6792],{"class":397},[147,111008,110081],{"class":157},[147,111010,854],{"class":397},[147,111012,110081],{"class":157},[147,111014,931],{"class":397},[147,111016,110090],{"class":157},[147,111018,854],{"class":397},[147,111020,110095],{"class":157},[19,111022,111023,111024,111027,111028,111031],{},"这行计算奖励。",[51,111025,111026],{},"cart_x * cart_x"," 是小车位置的平方，",[51,111029,111030],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[138,111033,111035],{"className":30652,"code":111034,"language":30654,"meta":143,"style":143},"data.qpos[1] = 0.1\n",[51,111036,111037],{"__ignoreMap":143},[147,111038,111039,111041,111043,111045,111047],{"class":149,"line":150},[147,111040,104969],{"class":157},[147,111042,616],{"class":448},[147,111044,4717],{"class":157},[147,111046,445],{"class":397},[147,111048,110410],{"class":448},[19,111050,111051,111052,111054,111055,111057],{},"手动设置杆子的初始角度。因为 ",[51,111053,105726],{}," 是小车位置，",[51,111056,105729],{}," 是杆子角度，所以这里改的是杆子。",[138,111059,111060],{"className":30652,"code":104813,"language":30654,"meta":143,"style":143},[51,111061,111062],{"__ignoreMap":143},[147,111063,111064],{"class":149,"line":150},[147,111065,104813],{"class":157},[19,111067,105772,111068,111070],{},[51,111069,104300],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[138,111072,111074],{"className":30652,"code":111073,"language":30654,"meta":143,"style":143},"total_reward = 0.0\n",[51,111075,111076],{"__ignoreMap":143},[147,111077,111078,111081,111083],{"class":149,"line":150},[147,111079,111080],{"class":157},"total_reward ",[147,111082,445],{"class":397},[147,111084,105031],{"class":448},[19,111086,111087],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[138,111089,111091],{"className":30652,"code":111090,"language":30654,"meta":143,"style":143},"for step in range(1000):\n",[51,111092,111093],{"__ignoreMap":143},[147,111094,111095,111097,111099,111101,111103,111105,111107],{"class":149,"line":150},[147,111096,3299],{"class":397},[147,111098,31890],{"class":157},[147,111100,26317],{"class":397},[147,111102,32717],{"class":448},[147,111104,401],{"class":157},[147,111106,6684],{"class":448},[147,111108,31060],{"class":157},[19,111110,111111,111112,111114],{},"循环 1000 步。",[51,111113,107404],{}," 是当前步数，从 0 到 999。",[138,111116,111118],{"className":30652,"code":111117,"language":30654,"meta":143,"style":143},"obs = get_observation(data)\n",[51,111119,111120],{"__ignoreMap":143},[147,111121,111122,111125,111127],{"class":149,"line":150},[147,111123,111124],{"class":157},"obs ",[147,111126,445],{"class":397},[147,111128,110457],{"class":157},[19,111130,111131,111132,28659],{},"读取当前状态，保存到 ",[51,111133,110943],{},[138,111135,111137],{"className":30652,"code":111136,"language":30654,"meta":143,"style":143},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[51,111138,111139,111151],{"__ignoreMap":143},[147,111140,111141,111143,111145,111147,111149],{"class":149,"line":150},[147,111142,110967],{"class":157},[147,111144,445],{"class":397},[147,111146,110306],{"class":157},[147,111148,616],{"class":448},[147,111150,33520],{"class":157},[147,111152,111153,111156,111158,111160,111162],{"class":149,"line":312},[147,111154,111155],{"class":157},"pole_angular_velocity ",[147,111157,445],{"class":397},[147,111159,110306],{"class":157},[147,111161,471],{"class":448},[147,111163,33520],{"class":157},[19,111165,111166,111167,111170,111171,28659],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[51,111168,111169],{},"obs[3]","？因为 obs 的顺序是 ",[51,111172,111173],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[138,111175,111177],{"className":30652,"code":111176,"language":30654,"meta":143,"style":143},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[51,111178,111179],{"__ignoreMap":143},[147,111180,111181,111183,111185,111187,111189,111191,111193,111195,111197],{"class":149,"line":150},[147,111182,107712],{"class":157},[147,111184,445],{"class":397},[147,111186,110497],{"class":448},[147,111188,6792],{"class":397},[147,111190,110090],{"class":157},[147,111192,880],{"class":397},[147,111194,62140],{"class":448},[147,111196,6792],{"class":397},[147,111198,110510],{"class":157},[19,111200,111201,111202,101290,111204,111206],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[51,111203,105530],{},[51,111205,35603],{}," 是人为设置的系数，不是固定公式。",[138,111208,111210],{"className":30652,"code":111209,"language":30654,"meta":143,"style":143},"action = np.clip(action, -1.0, 1.0)\n",[51,111211,111212],{"__ignoreMap":143},[147,111213,111214,111216,111218,111220,111222,111224,111226,111228],{"class":149,"line":150},[147,111215,107712],{"class":157},[147,111217,445],{"class":397},[147,111219,107717],{"class":157},[147,111221,931],{"class":397},[147,111223,102675],{"class":448},[147,111225,12709],{"class":157},[147,111227,102675],{"class":448},[147,111229,407],{"class":157},[19,111231,111232],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[138,111234,111235],{"className":30652,"code":110043,"language":30654,"meta":143,"style":143},[51,111236,111237],{"__ignoreMap":143},[147,111238,111239,111241,111243,111245,111247],{"class":149,"line":150},[147,111240,106141],{"class":157},[147,111242,590],{"class":448},[147,111244,4717],{"class":157},[147,111246,445],{"class":397},[147,111248,107740],{"class":157},[19,111250,111251],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[138,111253,111254],{"className":30652,"code":104775,"language":30654,"meta":143,"style":143},[51,111255,111256],{"__ignoreMap":143},[147,111257,111258],{"class":149,"line":150},[147,111259,104775],{"class":157},[19,111261,111262,111263,111265],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[51,111264,106396],{}," 计算小车和杆子的下一刻状态。",[138,111267,111269],{"className":30652,"code":111268,"language":30654,"meta":143,"style":143},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[51,111270,111271,111280],{"__ignoreMap":143},[147,111272,111273,111276,111278],{"class":149,"line":150},[147,111274,111275],{"class":157},"reward ",[147,111277,445],{"class":397},[147,111279,110562],{"class":157},[147,111281,111282,111284,111286],{"class":149,"line":312},[147,111283,111080],{"class":157},[147,111285,9751],{"class":397},[147,111287,110572],{"class":157},[19,111289,111290,111291,111293,111294,111297,111298,28659],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[51,111292,9751],{}," 是简写，",[51,111295,111296],{},"total_reward += reward"," 等价于 ",[51,111299,111300],{},"total_reward = total_reward + reward",[138,111302,111304],{"className":30652,"code":111303,"language":30654,"meta":143,"style":143},"if step % 100 == 0:\n",[51,111305,111306],{"__ignoreMap":143},[147,111307,111308,111310,111312,111314,111316,111318,111320],{"class":149,"line":150},[147,111309,1805],{"class":397},[147,111311,31890],{"class":157},[147,111313,727],{"class":397},[147,111315,6028],{"class":448},[147,111317,101831],{"class":397},[147,111319,4367],{"class":448},[147,111321,4013],{"class":157},[19,111323,111324,111326,111327,111330],{},[51,111325,727],{}," 是取余数。",[51,111328,111329],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[138,111332,111334],{"className":30652,"code":111333,"language":30654,"meta":143,"style":143},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[51,111335,111336],{"__ignoreMap":143},[147,111337,111338,111340,111342,111344,111346,111348,111350,111352,111354,111356,111358,111360,111362,111364,111366,111368],{"class":149,"line":150},[147,111339,30689],{"class":448},[147,111341,401],{"class":157},[147,111343,110601],{"class":504},[147,111345,110604],{"class":157},[147,111347,110607],{"class":504},[147,111349,110610],{"class":157},[147,111351,471],{"class":448},[147,111353,110615],{"class":157},[147,111355,110618],{"class":504},[147,111357,12709],{"class":157},[147,111359,32292],{"class":448},[147,111361,401],{"class":157},[147,111363,439],{"class":448},[147,111365,110629],{"class":157},[147,111367,471],{"class":448},[147,111369,30771],{"class":157},[19,111371,111372,111373,111376,111377,111380],{},"打印当前步数、观测和动作。",[51,111374,111375],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[51,111378,111379],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,111382,102588],{"id":102587},[19,111384,111385],{},"观测向量:",[138,111387,111390],{"className":111388,"code":111389,"language":5461,"meta":143},[5459],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[51,111391,111389],{"__ignoreMap":143},[19,111393,111394],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,111396,111397],{},"每隔 100 步会打印一次：",[138,111399,111402],{"className":111400,"code":111401,"language":5461,"meta":143},[5459],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[51,111403,111401],{"__ignoreMap":143},[19,111405,111406],{},"重点观察：",[350,111408,111409,111415,111420],{},[353,111410,111411,111414],{},[51,111412,111413],{},"pole_angle"," 是否越来越大。",[353,111416,111417,111419],{},[51,111418,109996],{}," 是否跑得太远。",[353,111421,111422,111423,82811,111425,28659],{},"action 是否经常被 clip 到 ",[51,111424,104185],{},[51,111426,616],{},[19,111428,111429],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,111431,102620],{"id":102619},[350,111433,111434,111440,111443,111449,111459,111465,111468],{},[353,111435,111436,111437,28659],{},"把初始角度改为 ",[51,111438,111439],{},"data.qpos[1] = 0.3",[353,111441,111442],{},"重新运行，观察控制是否变差。",[353,111444,111445,111446,111448],{},"把 actuator ",[51,111447,107337],{}," 改小。",[353,111450,111451,111452,111455,111456,28659],{},"打印 ",[51,111453,111454],{},"model.nq, model.nv, model.nu","，应为 ",[51,111457,111458],{},"2 2 1",[353,111460,111461,111462,111464],{},"把 reward 里的 ",[51,111463,111030],{}," 系数改大，观察总奖励变化。",[353,111466,111467],{},"把控制器改成反号，观察杆子是否更容易倒。",[353,111469,111470],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,111472,102725],{"id":102724},[367,111474,111475],{"id":111475},"杆子方向和预期不一致",[19,111477,102668,111478,111480,111481,111483],{},[51,111479,106509],{}," 和 capsule 的 ",[51,111482,103446],{},"，必要时用 viewer 可视化确认。",[367,111485,111486],{"id":111486},"控制器越控越倒",[19,111488,111489],{},"说明反馈符号可能反了，尝试:",[138,111491,111493],{"className":30652,"code":111492,"language":30654,"meta":143,"style":143},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[51,111494,111495],{"__ignoreMap":143},[147,111496,111497,111499,111501,111503,111505,111507,111509,111511,111513,111515],{"class":149,"line":150},[147,111498,107712],{"class":157},[147,111500,445],{"class":397},[147,111502,52544],{"class":397},[147,111504,105530],{"class":448},[147,111506,6792],{"class":397},[147,111508,110090],{"class":157},[147,111510,931],{"class":397},[147,111512,62140],{"class":448},[147,111514,6792],{"class":397},[147,111516,110510],{"class":157},[367,111518,111519],{"id":111519},"小车飞走",[19,111521,111522,111523,111525,111526,111529],{},"降低 ",[51,111524,107337],{}," 或缩小 ",[51,111527,111528],{},"action"," 的 clip 范围。",[367,111531,111533,111535],{"id":111532},"obs3-为什么是杆子角速度",[51,111534,111169],{}," 为什么是杆子角速度",[19,111537,111538],{},"因为这个模型里：",[138,111540,111543],{"className":111541,"code":111542,"language":5461,"meta":143},[5459],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[51,111544,111542],{"__ignoreMap":143},[19,111546,110017],{},[138,111548,111551],{"className":111549,"code":111550,"language":5461,"meta":143},[5459],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[51,111552,111550],{"__ignoreMap":143},[367,111554,111556],{"id":111555},"reward-变成负数是否错误","reward 变成负数是否错误",[19,111558,111559],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,111561,102879],{"id":102878},[19,111563,111564],{},"一个控制任务通常包含：",[350,111566,111567,111570,111578,111583,111586],{},[353,111568,111569],{},"模型：Cartpole 的 body、joint、actuator。",[353,111571,111572,111573,611,111575,111577],{},"观测：从 ",[51,111574,104300],{},[51,111576,104630],{}," 里取状态。",[353,111579,111580,111581,28659],{},"动作：写入 ",[51,111582,101348],{},[353,111584,111585],{},"奖励：根据任务目标打分。",[353,111587,111588],{},"循环：obs -> action -> step -> reward。",[19,111590,111591],{},"这就是后面 Gymnasium 环境的基本骨架。",[308,111593,104556],{},{"title":143,"searchDepth":312,"depth":312,"links":111595},[111596,111597,111598,111603,111607,111608,111609,111617],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":111599},[111600,111601,111602],{"id":109970,"depth":1454,"text":109971},{"id":110035,"depth":1454,"text":110036},{"id":110051,"depth":1454,"text":110052},{"id":101524,"depth":312,"text":101525,"children":111604},[111605,111606],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":111610},[111611,111612,111613,111614,111616],{"id":111475,"depth":1454,"text":111475},{"id":111486,"depth":1454,"text":111486},{"id":111519,"depth":1454,"text":111519},{"id":111532,"depth":1454,"text":111615},"obs[3] 为什么是杆子角速度",{"id":111555,"depth":1454,"text":111556},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109706,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111624,"title":111625,"body":111626,"description":143,"extension":322,"meta":113640,"navigation":324,"path":113641,"seo":113642,"stem":113643,"__hash__":113644},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111627,"toc":113616},[111628,111631,111633,111636,111638,111655,111658,111661,111667,111670,111672,111674,111698,111700,111714,111716,111757,111759,111777,111779,111782,111788,111791,111819,111823,111829,111854,111857,111888,111895,111898,111901,111907,111910,111916,111919,111925,111929,111932,111957,111960,111962,112722,112724,112736,112738,112749,112751,112754,112771,112774,112776,112787,112790,112792,112838,112841,112854,112857,112939,112942,112944,112960,112970,112983,112986,113025,113035,113046,113056,113069,113072,113101,113104,113114,113117,113123,113140,113151,113153,113159,113176,113187,113208,113211,113223,113226,113247,113250,113258,113266,113283,113286,113355,113362,113370,113373,113386,113393,113395,113398,113404,113407,113410,113416,113422,113424,113464,113466,113472,113481,113484,113486,113506,113509,113512,113518,113522,113524,113551,113554,113557,113584,113590,113593,113596,113598,113601,113604,113610,113613],[10,111629,111625],{"id":111630},"_7控制任务reacher-机械臂到达目标",[14,111632,100919],{"id":100918},[19,111634,111635],{},"本章搭建一个二维两关节 reacher 任务。",[19,111637,104601],{},[350,111639,111640,111643,111646,111649,111652],{},[353,111641,111642],{},"两个 hinge joint",[353,111644,111645],{},"两个 motor actuator",[353,111647,111648],{},"site 作为末端点和目标点",[353,111650,111651],{},"根据末端和目标距离设计 reward",[353,111653,111654],{},"构造机械臂任务的基本形式",[19,111656,111657],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,111659,111660],{},"Reacher 任务可以理解为：",[138,111662,111665],{"className":111663,"code":111664,"language":5461,"meta":143},[5459],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[51,111666,111664],{"__ignoreMap":143},[19,111668,111669],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,111671,101042],{"id":101041},[19,111673,101045],{},[138,111675,111676],{"className":24095,"code":104658,"language":24097,"meta":143,"style":143},[51,111677,111678],{"__ignoreMap":143},[147,111679,111680,111682,111684,111686,111688,111690,111692,111694,111696],{"class":149,"line":150},[147,111681,24850],{"class":2237},[147,111683,26589],{"class":504},[147,111685,24107],{"class":504},[147,111687,26674],{"class":448},[147,111689,104673],{"class":504},[147,111691,101070],{"class":504},[147,111693,102773],{"class":504},[147,111695,101086],{"class":504},[147,111697,104682],{"class":504},[19,111699,103089],{},[138,111701,111702],{"className":24095,"code":101191,"language":24097,"meta":143,"style":143},[51,111703,111704],{"__ignoreMap":143},[147,111705,111706,111708,111710,111712],{"class":149,"line":150},[147,111707,24104],{"class":2237},[147,111709,24107],{"class":504},[147,111711,101202],{"class":504},[147,111713,101205],{"class":504},[19,111715,103106],{},[138,111717,111719],{"className":24095,"code":111718,"language":24097,"meta":143,"style":143},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[51,111720,111721,111738,111747],{"__ignoreMap":143},[147,111722,111723,111725,111727,111729,111732,111734,111736],{"class":149,"line":150},[147,111724,30604],{"class":2237},[147,111726,29450],{"class":504},[147,111728,25389],{"class":448},[147,111730,111731],{"class":504}," mujoco-reacher",[147,111733,101247],{"class":504},[147,111735,101250],{"class":448},[147,111737,101253],{"class":448},[147,111739,111740,111742,111744],{"class":149,"line":312},[147,111741,30604],{"class":2237},[147,111743,101260],{"class":504},[147,111745,111746],{"class":504}," mujoco-reacher\n",[147,111748,111749,111751,111753,111755],{"class":149,"line":1454},[147,111750,24104],{"class":2237},[147,111752,24107],{"class":504},[147,111754,101202],{"class":504},[147,111756,101205],{"class":504},[19,111758,101276],{},[350,111760,111761,111764,111767],{},[353,111762,111763],{},"本章使用低维状态，不使用图像输入。",[353,111765,111766],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[353,111768,111769,111770,611,111772,611,111774,111776],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[51,111771,104300],{},[51,111773,104630],{},[51,111775,103950],{}," 的方法一致。",[14,111778,101317],{"id":101316},[19,111780,111781],{},"Reacher 任务核心:",[138,111783,111786],{"className":111784,"code":111785,"language":5461,"meta":143},[5459],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[51,111787,111785],{"__ignoreMap":143},[19,111789,111790],{},"读取 site 世界坐标:",[138,111792,111794],{"className":30652,"code":111793,"language":30654,"meta":143,"style":143},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[51,111795,111796,111809],{"__ignoreMap":143},[147,111797,111798,111800,111802,111804,111807],{"class":149,"line":150},[147,111799,103904],{"class":157},[147,111801,445],{"class":397},[147,111803,103675],{"class":157},[147,111805,111806],{"class":504},"\"tip\"",[147,111808,407],{"class":157},[147,111810,111811,111814,111816],{"class":149,"line":312},[147,111812,111813],{"class":157},"tip_pos ",[147,111815,445],{"class":397},[147,111817,111818],{"class":157}," data.site_xpos[site_id]\n",[367,111820,111822],{"id":111821},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,111824,111825,111826,111828],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[51,111827,104300],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[138,111830,111832],{"className":30652,"code":111831,"language":30654,"meta":143,"style":143},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[51,111833,111834,111844],{"__ignoreMap":143},[147,111835,111836,111839,111841],{"class":149,"line":150},[147,111837,111838],{"class":157},"tip ",[147,111840,445],{"class":397},[147,111842,111843],{"class":157}," data.site_xpos[tip_site_id]\n",[147,111845,111846,111849,111851],{"class":149,"line":312},[147,111847,111848],{"class":157},"target ",[147,111850,445],{"class":397},[147,111852,111853],{"class":157}," data.site_xpos[target_site_id]\n",[19,111855,111856],{},"这样 reward 就很容易写：",[138,111858,111860],{"className":30652,"code":111859,"language":30654,"meta":143,"style":143},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[51,111861,111862,111877],{"__ignoreMap":143},[147,111863,111864,111867,111869,111872,111874],{"class":149,"line":150},[147,111865,111866],{"class":157},"dist ",[147,111868,445],{"class":397},[147,111870,111871],{"class":157}," np.linalg.norm(tip ",[147,111873,931],{"class":397},[147,111875,111876],{"class":157}," target)\n",[147,111878,111879,111881,111883,111885],{"class":149,"line":312},[147,111880,111275],{"class":157},[147,111882,445],{"class":397},[147,111884,52544],{"class":397},[147,111886,111887],{"class":157},"dist\n",[19,111889,111890,111891,111894],{},"距离越小，",[51,111892,111893],{},"-dist"," 越接近 0，奖励越高。",[367,111896,111897],{"id":111897},"两关节机械臂的状态",[19,111899,111900],{},"这个模型有两个 hinge joint：",[138,111902,111905],{"className":111903,"code":111904,"language":5461,"meta":143},[5459],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[51,111906,111904],{"__ignoreMap":143},[19,111908,111909],{},"再加上末端和目标位置：",[138,111911,111914],{"className":111912,"code":111913,"language":5461,"meta":143},[5459],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[51,111915,111913],{"__ignoreMap":143},[19,111917,111918],{},"总维度：",[138,111920,111923],{"className":111921,"code":111922,"language":5461,"meta":143},[5459],"2 + 2 + 3 + 3 = 10\n",[51,111924,111922],{"__ignoreMap":143},[367,111926,111928],{"id":111927},"为什么-gravity-是-0","为什么 gravity 是 0",[19,111930,111931],{},"本章把重力设为：",[138,111933,111935],{"className":53340,"code":111934,"language":53342,"meta":143,"style":143},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[51,111936,111937],{"__ignoreMap":143},[147,111938,111939,111941,111943,111945,111947,111949,111951,111953,111955],{"class":149,"line":150},[147,111940,1309],{"class":157},[147,111942,69439],{"class":153},[147,111944,101466],{"class":2237},[147,111946,445],{"class":157},[147,111948,101471],{"class":504},[147,111950,101474],{"class":2237},[147,111952,445],{"class":157},[147,111954,104041],{"class":504},[147,111956,101416],{"class":157},[19,111958,111959],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,111961,101525],{"id":101524},[138,111963,111965],{"className":30652,"code":111964,"language":30654,"meta":143,"style":143},"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",[51,111966,111967,111973,111983,111987,111991,111999,112004,112009,112013,112017,112022,112027,112031,112036,112041,112046,112050,112055,112060,112065,112070,112074,112078,112082,112086,112090,112095,112100,112104,112108,112112,112116,112120,112135,112144,112156,112179,112186,112190,112194,112204,112218,112232,112239,112243,112247,112261,112273,112285,112298,112313,112330,112334,112338,112350,112362,112370,112378,112382,112398,112403,112416,112429,112444,112448,112483,112515,112519,112523,112532,112536,112552,112562,112573,112589,112605,112621,112637,112641,112659,112679,112698,112702,112706,112718],{"__ignoreMap":143},[147,111968,111969,111971],{"class":149,"line":150},[147,111970,30666],{"class":397},[147,111972,101573],{"class":157},[147,111974,111975,111977,111979,111981],{"class":149,"line":312},[147,111976,30666],{"class":397},[147,111978,31654],{"class":157},[147,111980,31657],{"class":397},[147,111982,31660],{"class":157},[147,111984,111985],{"class":149,"line":1454},[147,111986,2674],{"emptyLinePlaceholder":324},[147,111988,111989],{"class":149,"line":1469},[147,111990,2674],{"emptyLinePlaceholder":324},[147,111992,111993,111995,111997],{"class":149,"line":1475},[147,111994,101586],{"class":448},[147,111996,13838],{"class":397},[147,111998,101591],{"class":504},[147,112000,112001],{"class":149,"line":1489},[147,112002,112003],{"class":504},"\u003Cmujoco model=\"two_link_reacher\">\n",[147,112005,112006],{"class":149,"line":1495},[147,112007,112008],{"class":504},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[147,112010,112011],{"class":149,"line":1586},[147,112012,2674],{"emptyLinePlaceholder":324},[147,112014,112015],{"class":149,"line":1592},[147,112016,101610],{"class":504},[147,112018,112019],{"class":149,"line":1604},[147,112020,112021],{"class":504},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[147,112023,112024],{"class":149,"line":1886},[147,112025,112026],{"class":504},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[147,112028,112029],{"class":149,"line":1891},[147,112030,2674],{"emptyLinePlaceholder":324},[147,112032,112033],{"class":149,"line":1897},[147,112034,112035],{"class":504},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[147,112037,112038],{"class":149,"line":1902},[147,112039,112040],{"class":504},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[147,112042,112043],{"class":149,"line":1916},[147,112044,112045],{"class":504},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[147,112047,112048],{"class":149,"line":1921},[147,112049,2674],{"emptyLinePlaceholder":324},[147,112051,112052],{"class":149,"line":1927},[147,112053,112054],{"class":504},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[147,112056,112057],{"class":149,"line":1948},[147,112058,112059],{"class":504},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[147,112061,112062],{"class":149,"line":1953},[147,112063,112064],{"class":504},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\" rgba=\"0.1 0.8 0.3 1\"\u002F>\n",[147,112066,112067],{"class":149,"line":1967},[147,112068,112069],{"class":504},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[147,112071,112072],{"class":149,"line":1972},[147,112073,106708],{"class":504},[147,112075,112076],{"class":149,"line":2001},[147,112077,101639],{"class":504},[147,112079,112080],{"class":149,"line":2006},[147,112081,101644],{"class":504},[147,112083,112084],{"class":149,"line":2023},[147,112085,2674],{"emptyLinePlaceholder":324},[147,112087,112088],{"class":149,"line":2028},[147,112089,106725],{"class":504},[147,112091,112092],{"class":149,"line":2033},[147,112093,112094],{"class":504},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[147,112096,112097],{"class":149,"line":2038},[147,112098,112099],{"class":504},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[147,112101,112102],{"class":149,"line":2052},[147,112103,106735],{"class":504},[147,112105,112106],{"class":149,"line":2057},[147,112107,101649],{"class":504},[147,112109,112110],{"class":149,"line":2851},[147,112111,95970],{"class":504},[147,112113,112114],{"class":149,"line":2865},[147,112115,2674],{"emptyLinePlaceholder":324},[147,112117,112118],{"class":149,"line":2873},[147,112119,2674],{"emptyLinePlaceholder":324},[147,112121,112122,112124,112127,112130,112132],{"class":149,"line":2878},[147,112123,32221],{"class":397},[147,112125,112126],{"class":2237}," site_position",[147,112128,112129],{"class":157},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[147,112131,1574],{"class":448},[147,112133,112134],{"class":157},") -> np.ndarray:\n",[147,112136,112137,112139,112141],{"class":149,"line":2884},[147,112138,103670],{"class":157},[147,112140,445],{"class":397},[147,112142,112143],{"class":157}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[147,112145,112146,112148,112150,112152,112154],{"class":149,"line":2890},[147,112147,3375],{"class":397},[147,112149,103719],{"class":157},[147,112151,1309],{"class":397},[147,112153,4367],{"class":448},[147,112155,4013],{"class":157},[147,112157,112158,112160,112162,112164,112166,112169,112171,112173,112175,112177],{"class":149,"line":2895},[147,112159,103702],{"class":397},[147,112161,103705],{"class":448},[147,112163,401],{"class":157},[147,112165,452],{"class":397},[147,112167,112168],{"class":504},"\"site not found: ",[147,112170,1295],{"class":448},[147,112172,80082],{"class":157},[147,112174,1345],{"class":448},[147,112176,650],{"class":504},[147,112178,407],{"class":157},[147,112180,112181,112183],{"class":149,"line":8222},[147,112182,4364],{"class":397},[147,112184,112185],{"class":157}," data.site_xpos[site_id].copy()\n",[147,112187,112188],{"class":149,"line":8246},[147,112189,2674],{"emptyLinePlaceholder":324},[147,112191,112192],{"class":149,"line":8251},[147,112193,2674],{"emptyLinePlaceholder":324},[147,112195,112196,112198,112201],{"class":149,"line":8257},[147,112197,32221],{"class":397},[147,112199,112200],{"class":2237}," get_obs",[147,112202,112203],{"class":157},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[147,112205,112206,112209,112211,112214,112216],{"class":149,"line":8284},[147,112207,112208],{"class":157},"    tip ",[147,112210,445],{"class":397},[147,112212,112213],{"class":157}," site_position(model, data, ",[147,112215,111806],{"class":504},[147,112217,407],{"class":157},[147,112219,112220,112223,112225,112227,112230],{"class":149,"line":8289},[147,112221,112222],{"class":157},"    target ",[147,112224,445],{"class":397},[147,112226,112213],{"class":157},[147,112228,112229],{"class":504},"\"target\"",[147,112231,407],{"class":157},[147,112233,112234,112236],{"class":149,"line":8295},[147,112235,4364],{"class":397},[147,112237,112238],{"class":157}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[147,112240,112241],{"class":149,"line":8307},[147,112242,2674],{"emptyLinePlaceholder":324},[147,112244,112245],{"class":149,"line":8319},[147,112246,2674],{"emptyLinePlaceholder":324},[147,112248,112249,112251,112254,112257,112259],{"class":149,"line":8331},[147,112250,32221],{"class":397},[147,112252,112253],{"class":2237}," reward",[147,112255,112256],{"class":157},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[147,112258,439],{"class":448},[147,112260,4013],{"class":157},[147,112262,112263,112265,112267,112269,112271],{"class":149,"line":9990},[147,112264,112208],{"class":157},[147,112266,445],{"class":397},[147,112268,112213],{"class":157},[147,112270,111806],{"class":504},[147,112272,407],{"class":157},[147,112274,112275,112277,112279,112281,112283],{"class":149,"line":10015},[147,112276,112222],{"class":157},[147,112278,445],{"class":397},[147,112280,112213],{"class":157},[147,112282,112229],{"class":504},[147,112284,407],{"class":157},[147,112286,112287,112290,112292,112294,112296],{"class":149,"line":10038},[147,112288,112289],{"class":157},"    dist ",[147,112291,445],{"class":397},[147,112293,111871],{"class":157},[147,112295,931],{"class":397},[147,112297,111876],{"class":157},[147,112299,112300,112303,112305,112308,112310],{"class":149,"line":10062},[147,112301,112302],{"class":157},"    control_cost ",[147,112304,445],{"class":397},[147,112306,112307],{"class":448}," 0.01",[147,112309,6792],{"class":397},[147,112311,112312],{"class":157}," np.sum(np.square(data.ctrl))\n",[147,112314,112315,112317,112319,112321,112323,112325,112327],{"class":149,"line":10067},[147,112316,4364],{"class":397},[147,112318,110067],{"class":448},[147,112320,401],{"class":157},[147,112322,931],{"class":397},[147,112324,111866],{"class":157},[147,112326,931],{"class":397},[147,112328,112329],{"class":157}," control_cost)\n",[147,112331,112332],{"class":149,"line":10072},[147,112333,2674],{"emptyLinePlaceholder":324},[147,112335,112336],{"class":149,"line":10077},[147,112337,2674],{"emptyLinePlaceholder":324},[147,112339,112340,112342,112344,112346,112348],{"class":149,"line":10086},[147,112341,32221],{"class":397},[147,112343,2247],{"class":2237},[147,112345,101670],{"class":157},[147,112347,95958],{"class":448},[147,112349,4013],{"class":157},[147,112351,112352,112354,112356,112358,112360],{"class":149,"line":10091},[147,112353,101679],{"class":157},[147,112355,445],{"class":397},[147,112357,101684],{"class":157},[147,112359,101586],{"class":448},[147,112361,407],{"class":157},[147,112363,112364,112366,112368],{"class":149,"line":10097},[147,112365,101693],{"class":157},[147,112367,445],{"class":397},[147,112369,101698],{"class":157},[147,112371,112372,112374,112376],{"class":149,"line":10118},[147,112373,110423],{"class":157},[147,112375,445],{"class":397},[147,112377,105031],{"class":448},[147,112379,112380],{"class":149,"line":10124},[147,112381,2674],{"emptyLinePlaceholder":324},[147,112383,112384,112386,112388,112390,112392,112394,112396],{"class":149,"line":10138},[147,112385,3475],{"class":397},[147,112387,31890],{"class":157},[147,112389,26317],{"class":397},[147,112391,32717],{"class":448},[147,112393,401],{"class":157},[147,112395,65347],{"class":448},[147,112397,31060],{"class":157},[147,112399,112400],{"class":149,"line":10144},[147,112401,112402],{"class":157},"        mujoco.mj_forward(model, data)\n",[147,112404,112405,112408,112410,112412,112414],{"class":149,"line":10171},[147,112406,112407],{"class":157},"        tip ",[147,112409,445],{"class":397},[147,112411,112213],{"class":157},[147,112413,111806],{"class":504},[147,112415,407],{"class":157},[147,112417,112418,112421,112423,112425,112427],{"class":149,"line":10180},[147,112419,112420],{"class":157},"        target ",[147,112422,445],{"class":397},[147,112424,112213],{"class":157},[147,112426,112229],{"class":504},[147,112428,407],{"class":157},[147,112430,112431,112434,112436,112439,112441],{"class":149,"line":10186},[147,112432,112433],{"class":157},"        error ",[147,112435,445],{"class":397},[147,112437,112438],{"class":157}," target ",[147,112440,931],{"class":397},[147,112442,112443],{"class":157}," tip\n",[147,112445,112446],{"class":149,"line":10194},[147,112447,2674],{"emptyLinePlaceholder":324},[147,112449,112450,112452,112454,112456,112458,112461,112463,112465,112468,112470,112473,112475,112477,112479,112481],{"class":149,"line":10199},[147,112451,106887],{"class":157},[147,112453,590],{"class":448},[147,112455,4717],{"class":157},[147,112457,445],{"class":397},[147,112459,112460],{"class":157}," np.clip(",[147,112462,105530],{"class":448},[147,112464,6792],{"class":397},[147,112466,112467],{"class":157}," error[",[147,112469,477],{"class":448},[147,112471,112472],{"class":157},"], ",[147,112474,931],{"class":397},[147,112476,102675],{"class":448},[147,112478,12709],{"class":157},[147,112480,102675],{"class":448},[147,112482,407],{"class":157},[147,112484,112485,112487,112489,112491,112493,112495,112497,112499,112501,112503,112505,112507,112509,112511,112513],{"class":149,"line":16877},[147,112486,106887],{"class":157},[147,112488,616],{"class":448},[147,112490,4717],{"class":157},[147,112492,445],{"class":397},[147,112494,112460],{"class":157},[147,112496,105530],{"class":448},[147,112498,6792],{"class":397},[147,112500,112467],{"class":157},[147,112502,590],{"class":448},[147,112504,112472],{"class":157},[147,112506,931],{"class":397},[147,112508,102675],{"class":448},[147,112510,12709],{"class":157},[147,112512,102675],{"class":448},[147,112514,407],{"class":157},[147,112516,112517],{"class":149,"line":16883},[147,112518,2674],{"emptyLinePlaceholder":324},[147,112520,112521],{"class":149,"line":16906},[147,112522,101788],{"class":157},[147,112524,112525,112527,112529],{"class":149,"line":16912},[147,112526,110567],{"class":157},[147,112528,9751],{"class":397},[147,112530,112531],{"class":157}," reward(model, data)\n",[147,112533,112534],{"class":149,"line":16935},[147,112535,2674],{"emptyLinePlaceholder":324},[147,112537,112538,112540,112542,112544,112546,112548,112550],{"class":149,"line":16949},[147,112539,2771],{"class":397},[147,112541,31890],{"class":157},[147,112543,727],{"class":397},[147,112545,6028],{"class":448},[147,112547,101831],{"class":397},[147,112549,4367],{"class":448},[147,112551,4013],{"class":157},[147,112553,112554,112557,112559],{"class":149,"line":16969},[147,112555,112556],{"class":157},"            obs ",[147,112558,445],{"class":397},[147,112560,112561],{"class":157}," get_obs(model, data)\n",[147,112563,112564,112566,112568,112570],{"class":149,"line":16975},[147,112565,34924],{"class":448},[147,112567,401],{"class":157},[147,112569,110601],{"class":504},[147,112571,112572],{"class":157},", step)\n",[147,112574,112575,112577,112579,112582,112585,112587],{"class":149,"line":16986},[147,112576,34924],{"class":448},[147,112578,401],{"class":157},[147,112580,112581],{"class":504},"\"  tip:\"",[147,112583,112584],{"class":157},", np.round(tip, ",[147,112586,471],{"class":448},[147,112588,30771],{"class":157},[147,112590,112591,112593,112595,112598,112601,112603],{"class":149,"line":17009},[147,112592,34924],{"class":448},[147,112594,401],{"class":157},[147,112596,112597],{"class":504},"\"  target:\"",[147,112599,112600],{"class":157},", np.round(target, ",[147,112602,471],{"class":448},[147,112604,30771],{"class":157},[147,112606,112607,112609,112611,112614,112617,112619],{"class":149,"line":17031},[147,112608,34924],{"class":448},[147,112610,401],{"class":157},[147,112612,112613],{"class":504},"\"  ctrl:\"",[147,112615,112616],{"class":157},", np.round(data.ctrl.copy(), ",[147,112618,471],{"class":448},[147,112620,30771],{"class":157},[147,112622,112623,112625,112627,112630,112633,112635],{"class":149,"line":17036},[147,112624,34924],{"class":448},[147,112626,401],{"class":157},[147,112628,112629],{"class":504},"\"  obs_dim:\"",[147,112631,112632],{"class":157},", obs.shape[",[147,112634,590],{"class":448},[147,112636,4931],{"class":157},[147,112638,112639],{"class":149,"line":17042},[147,112640,2674],{"emptyLinePlaceholder":324},[147,112642,112643,112645,112647,112649,112651,112653,112655,112657],{"class":149,"line":17056},[147,112644,31573],{"class":448},[147,112646,401],{"class":157},[147,112648,110646],{"class":504},[147,112650,12709],{"class":157},[147,112652,32292],{"class":448},[147,112654,110653],{"class":157},[147,112656,471],{"class":448},[147,112658,30771],{"class":157},[147,112660,112661,112663,112665,112668,112671,112673,112675,112677],{"class":149,"line":17069},[147,112662,31573],{"class":448},[147,112664,401],{"class":157},[147,112666,112667],{"class":504},"\"final tip:\"",[147,112669,112670],{"class":157},", np.round(site_position(model, data, ",[147,112672,111806],{"class":504},[147,112674,110615],{"class":157},[147,112676,471],{"class":448},[147,112678,30771],{"class":157},[147,112680,112681,112683,112685,112688,112690,112692,112694,112696],{"class":149,"line":17074},[147,112682,31573],{"class":448},[147,112684,401],{"class":157},[147,112686,112687],{"class":504},"\"target:\"",[147,112689,112670],{"class":157},[147,112691,112229],{"class":504},[147,112693,110615],{"class":157},[147,112695,471],{"class":448},[147,112697,30771],{"class":157},[147,112699,112700],{"class":149,"line":17088},[147,112701,2674],{"emptyLinePlaceholder":324},[147,112703,112704],{"class":149,"line":17093},[147,112705,2674],{"emptyLinePlaceholder":324},[147,112707,112708,112710,112712,112714,112716],{"class":149,"line":17099},[147,112709,1805],{"class":397},[147,112711,31494],{"class":448},[147,112713,101831],{"class":397},[147,112715,101834],{"class":504},[147,112717,4013],{"class":157},[147,112719,112720],{"class":149,"line":17104},[147,112721,101841],{"class":157},[19,112723,103840],{},[138,112725,112727],{"className":24095,"code":112726,"language":24097,"meta":143,"style":143},"touch ch7_reacher.py\n",[51,112728,112729],{"__ignoreMap":143},[147,112730,112731,112733],{"class":149,"line":150},[147,112732,101555],{"class":2237},[147,112734,112735],{"class":504}," ch7_reacher.py\n",[19,112737,110714],{},[138,112739,112741],{"className":24095,"code":112740,"language":24097,"meta":143,"style":143},"python ch7_reacher.py\n",[51,112742,112743],{"__ignoreMap":143},[147,112744,112745,112747],{"class":149,"line":150},[147,112746,30654],{"class":2237},[147,112748,112735],{"class":504},[367,112750,101844],{"id":101844},[19,112752,112753],{},"读取 site 坐标：",[138,112755,112757],{"className":30652,"code":112756,"language":30654,"meta":143,"style":143},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[51,112758,112759],{"__ignoreMap":143},[147,112760,112761,112763,112765,112767,112769],{"class":149,"line":150},[147,112762,32221],{"class":397},[147,112764,112126],{"class":2237},[147,112766,112129],{"class":157},[147,112768,1574],{"class":448},[147,112770,112134],{"class":157},[19,112772,112773],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,112775,110730],{},[138,112777,112779],{"className":30652,"code":112778,"language":30654,"meta":143,"style":143},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[51,112780,112781],{"__ignoreMap":143},[147,112782,112783,112785],{"class":149,"line":150},[147,112784,17319],{"class":397},[147,112786,112238],{"class":157},[19,112788,112789],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,112791,110055],{},[138,112793,112795],{"className":30652,"code":112794,"language":30654,"meta":143,"style":143},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[51,112796,112797,112809,112822],{"__ignoreMap":143},[147,112798,112799,112801,112803,112805,112807],{"class":149,"line":150},[147,112800,111866],{"class":157},[147,112802,445],{"class":397},[147,112804,111871],{"class":157},[147,112806,931],{"class":397},[147,112808,111876],{"class":157},[147,112810,112811,112814,112816,112818,112820],{"class":149,"line":312},[147,112812,112813],{"class":157},"control_cost ",[147,112815,445],{"class":397},[147,112817,112307],{"class":448},[147,112819,6792],{"class":397},[147,112821,112312],{"class":157},[147,112823,112824,112826,112828,112830,112832,112834,112836],{"class":149,"line":1454},[147,112825,17319],{"class":397},[147,112827,110067],{"class":448},[147,112829,401],{"class":157},[147,112831,931],{"class":397},[147,112833,111866],{"class":157},[147,112835,931],{"class":397},[147,112837,112329],{"class":157},[19,112839,112840],{},"奖励由两部分组成：",[350,112842,112843,112848],{},[353,112844,112845,112847],{},[51,112846,111893],{},"：末端离目标越远，奖励越低。",[353,112849,112850,112853],{},[51,112851,112852],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,112855,112856],{},"简单控制器：",[138,112858,112860],{"className":30652,"code":112859,"language":30654,"meta":143,"style":143},"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",[51,112861,112862,112875,112907],{"__ignoreMap":143},[147,112863,112864,112867,112869,112871,112873],{"class":149,"line":150},[147,112865,112866],{"class":157},"error ",[147,112868,445],{"class":397},[147,112870,112438],{"class":157},[147,112872,931],{"class":397},[147,112874,112443],{"class":157},[147,112876,112877,112879,112881,112883,112885,112887,112889,112891,112893,112895,112897,112899,112901,112903,112905],{"class":149,"line":312},[147,112878,106141],{"class":157},[147,112880,590],{"class":448},[147,112882,4717],{"class":157},[147,112884,445],{"class":397},[147,112886,112460],{"class":157},[147,112888,105530],{"class":448},[147,112890,6792],{"class":397},[147,112892,112467],{"class":157},[147,112894,477],{"class":448},[147,112896,112472],{"class":157},[147,112898,931],{"class":397},[147,112900,102675],{"class":448},[147,112902,12709],{"class":157},[147,112904,102675],{"class":448},[147,112906,407],{"class":157},[147,112908,112909,112911,112913,112915,112917,112919,112921,112923,112925,112927,112929,112931,112933,112935,112937],{"class":149,"line":1454},[147,112910,106141],{"class":157},[147,112912,616],{"class":448},[147,112914,4717],{"class":157},[147,112916,445],{"class":397},[147,112918,112460],{"class":157},[147,112920,105530],{"class":448},[147,112922,6792],{"class":397},[147,112924,112467],{"class":157},[147,112926,590],{"class":448},[147,112928,112472],{"class":157},[147,112930,931],{"class":397},[147,112932,102675],{"class":448},[147,112934,12709],{"class":157},[147,112936,102675],{"class":448},[147,112938,407],{"class":157},[19,112940,112941],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[367,112943,101980],{"id":101980},[138,112945,112946],{"className":30652,"code":112756,"language":30654,"meta":143,"style":143},[51,112947,112948],{"__ignoreMap":143},[147,112949,112950,112952,112954,112956,112958],{"class":149,"line":150},[147,112951,32221],{"class":397},[147,112953,112126],{"class":2237},[147,112955,112129],{"class":157},[147,112957,1574],{"class":448},[147,112959,112134],{"class":157},[19,112961,112962,112963,112965,112966,82811,112968,28659],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[51,112964,80082],{}," 是 site 的名字，比如 ",[51,112967,111806],{},[51,112969,112229],{},[138,112971,112973],{"className":30652,"code":112972,"language":30654,"meta":143,"style":143},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[51,112974,112975],{"__ignoreMap":143},[147,112976,112977,112979,112981],{"class":149,"line":150},[147,112978,103904],{"class":157},[147,112980,445],{"class":397},[147,112982,112143],{"class":157},[19,112984,112985],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[138,112987,112989],{"className":30652,"code":112988,"language":30654,"meta":143,"style":143},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[51,112990,112991,113003],{"__ignoreMap":143},[147,112992,112993,112995,112997,112999,113001],{"class":149,"line":150},[147,112994,1805],{"class":397},[147,112996,103719],{"class":157},[147,112998,1309],{"class":397},[147,113000,4367],{"class":448},[147,113002,4013],{"class":157},[147,113004,113005,113007,113009,113011,113013,113015,113017,113019,113021,113023],{"class":149,"line":312},[147,113006,104165],{"class":397},[147,113008,103705],{"class":448},[147,113010,401],{"class":157},[147,113012,452],{"class":397},[147,113014,112168],{"class":504},[147,113016,1295],{"class":448},[147,113018,80082],{"class":157},[147,113020,1345],{"class":448},[147,113022,650],{"class":504},[147,113024,407],{"class":157},[19,113026,113027,113028,113031,113032,113034],{},"如果 site 没找到，就主动报错。",[51,113029,113030],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[51,113033,80082],{}," 的值放进字符串里。",[138,113036,113038],{"className":30652,"code":113037,"language":30654,"meta":143,"style":143},"return data.site_xpos[site_id].copy()\n",[51,113039,113040],{"__ignoreMap":143},[147,113041,113042,113044],{"class":149,"line":150},[147,113043,17319],{"class":397},[147,113045,112185],{"class":157},[19,113047,113048,113049,113051,113052,113055],{},"返回这个 site 的世界坐标。",[51,113050,103950],{}," 里的每一行都是一个 site 的 ",[51,113053,113054],{},"(x, y, z)"," 坐标。",[138,113057,113059],{"className":30652,"code":113058,"language":30654,"meta":143,"style":143},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[51,113060,113061],{"__ignoreMap":143},[147,113062,113063,113065,113067],{"class":149,"line":150},[147,113064,32221],{"class":397},[147,113066,112200],{"class":2237},[147,113068,112203],{"class":157},[19,113070,113071],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[138,113073,113075],{"className":30652,"code":113074,"language":30654,"meta":143,"style":143},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[51,113076,113077,113089],{"__ignoreMap":143},[147,113078,113079,113081,113083,113085,113087],{"class":149,"line":150},[147,113080,111838],{"class":157},[147,113082,445],{"class":397},[147,113084,112213],{"class":157},[147,113086,111806],{"class":504},[147,113088,407],{"class":157},[147,113090,113091,113093,113095,113097,113099],{"class":149,"line":312},[147,113092,111848],{"class":157},[147,113094,445],{"class":397},[147,113096,112213],{"class":157},[147,113098,112229],{"class":504},[147,113100,407],{"class":157},[19,113102,113103],{},"分别读取末端点和目标点的世界坐标。",[138,113105,113106],{"className":30652,"code":112778,"language":30654,"meta":143,"style":143},[51,113107,113108],{"__ignoreMap":143},[147,113109,113110,113112],{"class":149,"line":150},[147,113111,17319],{"class":397},[147,113113,112238],{"class":157},[19,113115,113116],{},"把四部分拼成一个观测数组：",[138,113118,113121],{"className":113119,"code":113120,"language":5461,"meta":143},[5459],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[51,113122,113120],{"__ignoreMap":143},[138,113124,113126],{"className":30652,"code":113125,"language":30654,"meta":143,"style":143},"dist = np.linalg.norm(tip - target)\n",[51,113127,113128],{"__ignoreMap":143},[147,113129,113130,113132,113134,113136,113138],{"class":149,"line":150},[147,113131,111866],{"class":157},[147,113133,445],{"class":397},[147,113135,111871],{"class":157},[147,113137,931],{"class":397},[147,113139,111876],{"class":157},[19,113141,113142,113143,113146,113147,113150],{},"计算 tip 到 target 的距离。",[51,113144,113145],{},"tip - target"," 得到一个三维向量，",[51,113148,113149],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,113152,14906],{},[138,113154,113157],{"className":113155,"code":113156,"language":5461,"meta":143},[5459],"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",[51,113158,113156],{"__ignoreMap":143},[138,113160,113162],{"className":30652,"code":113161,"language":30654,"meta":143,"style":143},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[51,113163,113164],{"__ignoreMap":143},[147,113165,113166,113168,113170,113172,113174],{"class":149,"line":150},[147,113167,112813],{"class":157},[147,113169,445],{"class":397},[147,113171,112307],{"class":448},[147,113173,6792],{"class":397},[147,113175,112312],{"class":157},[19,113177,113178,113179,113182,113183,113186],{},"计算动作惩罚。",[51,113180,113181],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[51,113184,113185],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[138,113188,113190],{"className":30652,"code":113189,"language":30654,"meta":143,"style":143},"return float(-dist - control_cost)\n",[51,113191,113192],{"__ignoreMap":143},[147,113193,113194,113196,113198,113200,113202,113204,113206],{"class":149,"line":150},[147,113195,17319],{"class":397},[147,113197,110067],{"class":448},[147,113199,401],{"class":157},[147,113201,931],{"class":397},[147,113203,111866],{"class":157},[147,113205,931],{"class":397},[147,113207,112329],{"class":157},[19,113209,113210],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[138,113212,113213],{"className":30652,"code":111073,"language":30654,"meta":143,"style":143},[51,113214,113215],{"__ignoreMap":143},[147,113216,113217,113219,113221],{"class":149,"line":150},[147,113218,111080],{"class":157},[147,113220,445],{"class":397},[147,113222,105031],{"class":448},[19,113224,113225],{},"累计奖励变量，记录整个运行过程的总分。",[138,113227,113229],{"className":30652,"code":113228,"language":30654,"meta":143,"style":143},"for step in range(500):\n",[51,113230,113231],{"__ignoreMap":143},[147,113232,113233,113235,113237,113239,113241,113243,113245],{"class":149,"line":150},[147,113234,3299],{"class":397},[147,113236,31890],{"class":157},[147,113238,26317],{"class":397},[147,113240,32717],{"class":448},[147,113242,401],{"class":157},[147,113244,65347],{"class":448},[147,113246,31060],{"class":157},[19,113248,113249],{},"运行 500 个控制步。",[138,113251,113252],{"className":30652,"code":104813,"language":30654,"meta":143,"style":143},[51,113253,113254],{"__ignoreMap":143},[147,113255,113256],{"class":149,"line":150},[147,113257,104813],{"class":157},[19,113259,113260,113261,101290,113263,113265],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[51,113262,103501],{},[51,113264,103504],{}," 是当前状态下的坐标。",[138,113267,113269],{"className":30652,"code":113268,"language":30654,"meta":143,"style":143},"error = target - tip\n",[51,113270,113271],{"__ignoreMap":143},[147,113272,113273,113275,113277,113279,113281],{"class":149,"line":150},[147,113274,112866],{"class":157},[147,113276,445],{"class":397},[147,113278,112438],{"class":157},[147,113280,931],{"class":397},[147,113282,112443],{"class":157},[19,113284,113285],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[138,113287,113289],{"className":30652,"code":113288,"language":30654,"meta":143,"style":143},"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",[51,113290,113291,113323],{"__ignoreMap":143},[147,113292,113293,113295,113297,113299,113301,113303,113305,113307,113309,113311,113313,113315,113317,113319,113321],{"class":149,"line":150},[147,113294,106141],{"class":157},[147,113296,590],{"class":448},[147,113298,4717],{"class":157},[147,113300,445],{"class":397},[147,113302,112460],{"class":157},[147,113304,105530],{"class":448},[147,113306,6792],{"class":397},[147,113308,112467],{"class":157},[147,113310,477],{"class":448},[147,113312,112472],{"class":157},[147,113314,931],{"class":397},[147,113316,102675],{"class":448},[147,113318,12709],{"class":157},[147,113320,102675],{"class":448},[147,113322,407],{"class":157},[147,113324,113325,113327,113329,113331,113333,113335,113337,113339,113341,113343,113345,113347,113349,113351,113353],{"class":149,"line":312},[147,113326,106141],{"class":157},[147,113328,616],{"class":448},[147,113330,4717],{"class":157},[147,113332,445],{"class":397},[147,113334,112460],{"class":157},[147,113336,105530],{"class":448},[147,113338,6792],{"class":397},[147,113340,112467],{"class":157},[147,113342,590],{"class":448},[147,113344,112472],{"class":157},[147,113346,931],{"class":397},[147,113348,102675],{"class":448},[147,113350,12709],{"class":157},[147,113352,102675],{"class":448},[147,113354,407],{"class":157},[19,113356,113357,113358,113361],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[51,113359,113360],{},"error -> ctrl -> step"," 的流程。",[138,113363,113364],{"className":30652,"code":104775,"language":30654,"meta":143,"style":143},[51,113365,113366],{"__ignoreMap":143},[147,113367,113368],{"class":149,"line":150},[147,113369,104775],{"class":157},[19,113371,113372],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[138,113374,113376],{"className":30652,"code":113375,"language":30654,"meta":143,"style":143},"obs = get_obs(model, data)\n",[51,113377,113378],{"__ignoreMap":143},[147,113379,113380,113382,113384],{"class":149,"line":150},[147,113381,111124],{"class":157},[147,113383,445],{"class":397},[147,113385,112561],{"class":157},[19,113387,113388,113389,113392],{},"读取最新观测。后面打印 ",[51,113390,113391],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,113394,102588],{"id":102587},[19,113396,113397],{},"观测维度为:",[138,113399,113402],{"className":113400,"code":113401,"language":5461,"meta":143},[5459],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[51,113403,113401],{"__ignoreMap":143},[19,113405,113406],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,113408,113409],{},"程序每 100 步打印：",[138,113411,113414],{"className":113412,"code":113413,"language":5461,"meta":143},[5459],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[51,113415,113413],{"__ignoreMap":143},[19,113417,113418,113419,113421],{},"如果控制有效，你应该看到最终 ",[51,113420,103501],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,113423,102620],{"id":102619},[350,113425,113426,113429,113432,113438,113444,113451,113461],{},[353,113427,113428],{},"修改目标点位置。",[353,113430,113431],{},"重新运行，观察最终 tip 是否变化。",[353,113433,113434,113435,113437],{},"把 gravity 改成 ",[51,113436,102861],{},"，观察控制是否变差。",[353,113439,111451,113440,111455,113442,28659],{},[51,113441,102430],{},[51,113443,477],{},[353,113445,102683,113446,102686,113448,113450],{},[51,113447,110866],{},[51,113449,107577],{},"，观察机械臂是否更难移动。",[353,113452,102683,113453,82802,113455,102686,113457,113460],{},[51,113454,103504],{},[51,113456,104416],{},[51,113458,113459],{},"0.2 0 0.6","，观察 reward 和 final tip。",[353,113462,113463],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,113465,102725],{"id":102724},[367,113467,113469],{"id":113468},"site-not-found",[51,113470,113471],{},"site not found",[19,113473,113474,113475,101290,113478,28659],{},"检查 XML 中是否有 ",[51,113476,113477],{},"site name=\"tip\"",[51,113479,113480],{},"site name=\"target\"",[367,113482,113483],{"id":113483},"机械臂完全不动",[19,113485,102795],{},[350,113487,113488,113493,113496,113501],{},[353,113489,113490,113492],{},[51,113491,102430],{}," 是否为 2",[353,113494,113495],{},"actuator 是否引用正确 joint",[353,113497,113498,113500],{},[51,113499,101348],{}," 是否被赋值",[353,113502,113503,113504],{},"是否执行了 ",[51,113505,100957],{},[367,113507,113508],{"id":113508},"控制效果不好",[19,113510,113511],{},"正常。本章重点不是控制器最优，而是任务结构:",[138,113513,113516],{"className":113514,"code":113515,"language":5461,"meta":143},[5459],"obs → action → mj_step → reward → next_obs\n",[51,113517,113515],{"__ignoreMap":143},[367,113519,113521],{"id":113520},"tip-坐标不变化","tip 坐标不变化",[19,113523,102847],{},[350,113525,113526,113531,113539,113548],{},[353,113527,113528,113529,28659],{},"是否每步调用了 ",[51,113530,100957],{},[353,113532,113533,113534,101290,113536,28659],{},"是否写入了 ",[51,113535,106396],{},[51,113537,113538],{},"data.ctrl[1]",[353,113540,113541,113542,611,113545,28659],{},"actuator 是否正确引用 ",[51,113543,113544],{},"joint1",[51,113546,113547],{},"joint2",[353,113549,113550],{},"控制输入是否太小。",[367,113552,113553],{"id":113553},"目标点不会动",[19,113555,113556],{},"本章的 target 是固定 site：",[138,113558,113560],{"className":53340,"code":113559,"language":53342,"meta":143,"style":143},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[51,113561,113562],{"__ignoreMap":143},[147,113563,113564,113566,113568,113570,113572,113574,113576,113578,113581],{"class":149,"line":150},[147,113565,1309],{"class":157},[147,113567,103480],{"class":153},[147,113569,15193],{"class":2237},[147,113571,445],{"class":157},[147,113573,112229],{"class":504},[147,113575,101378],{"class":2237},[147,113577,445],{"class":157},[147,113579,113580],{"class":504},"\"0.5 0 0.4\"",[147,113582,113583],{"class":157}," ...\u002F>\n",[19,113585,113586,113587,113589],{},"它直接挂在 ",[51,113588,102113],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[367,113591,113592],{"id":113592},"机械臂不像真实机械臂",[19,113594,113595],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,113597,102879],{"id":102878},[19,113599,113600],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,113602,113603],{},"核心公式：",[138,113605,113608],{"className":113606,"code":113607,"language":5461,"meta":143},[5459],"distance = ||tip - target||\nreward = -distance - action_cost\n",[51,113609,113607],{"__ignoreMap":143},[19,113611,113612],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[308,113614,113615],{},"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":143,"searchDepth":312,"depth":312,"links":113617},[113618,113619,113620,113625,113629,113630,113631,113639],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":113621},[113622,113623,113624],{"id":111821,"depth":1454,"text":111822},{"id":111897,"depth":1454,"text":111897},{"id":111927,"depth":1454,"text":111928},{"id":101524,"depth":312,"text":101525,"children":113626},[113627,113628],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":113632},[113633,113634,113635,113636,113637,113638],{"id":113468,"depth":1454,"text":113471},{"id":113483,"depth":1454,"text":113483},{"id":113508,"depth":1454,"text":113508},{"id":113520,"depth":1454,"text":113521},{"id":113553,"depth":1454,"text":113553},{"id":113592,"depth":1454,"text":113592},{"id":102878,"depth":312,"text":102879},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111625,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113646,"title":113647,"body":113648,"description":143,"extension":322,"meta":117110,"navigation":324,"path":117111,"seo":117112,"stem":117113,"__hash__":117114},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113649,"toc":117081},[113650,113653,113655,113658,113661,113686,113689,113695,113698,113704,113706,113708,113732,113734,113752,113754,113797,113799,113826,113828,113831,113883,113886,113892,113901,113904,113942,113945,113984,113987,113995,114002,114005,114011,114013,114067,114074,114119,114122,114126,114142,114152,114154,115415,115417,115429,115431,115442,115444,115447,115468,115471,115474,115507,115513,115516,115549,115552,115555,115596,115601,115615,115618,115631,115636,115659,115661,115676,115686,115701,115708,115728,115743,115761,115764,115781,115789,115805,115811,115843,115856,115888,115898,115933,115947,115993,116007,116049,116060,116073,116079,116112,116115,116142,116152,116192,116202,116219,116226,116244,116247,116288,116301,116316,116319,116342,116345,116357,116360,116379,116384,116405,116408,116423,116426,116460,116472,116487,116490,116515,116518,116537,116540,116572,116575,116599,116605,116635,116642,116655,116658,116660,116662,116668,116671,116674,116686,116689,116691,116745,116747,116751,116757,116766,116769,116776,116778,116801,116804,116808,116810,116828,116834,116836,116869,116872,116878,116882,116885,116905,116910,116914,116921,116941,116946,116950,116953,116973,116976,117062,117066,117069,117075,117078],[10,113651,113647],{"id":113652},"_8gymnasium-风格强化学习接口基础",[14,113654,100919],{"id":100918},[19,113656,113657],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,113659,113660],{},"你将实现:",[138,113662,113664],{"className":30652,"code":113663,"language":30654,"meta":143,"style":143},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[51,113665,113666,113676],{"__ignoreMap":143},[147,113667,113668,113671,113673],{"class":149,"line":150},[147,113669,113670],{"class":157},"obs, info ",[147,113672,445],{"class":397},[147,113674,113675],{"class":157}," env.reset()\n",[147,113677,113678,113681,113683],{"class":149,"line":312},[147,113679,113680],{"class":157},"obs, reward, terminated, truncated, info ",[147,113682,445],{"class":397},[147,113684,113685],{"class":157}," env.step(action)\n",[19,113687,113688],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,113690,113691,113692,113694],{},"前面章节的代码都是“脚本式”的：在 ",[51,113693,102567],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,113696,113697],{},"可以先记住 Gymnasium 环境的核心交互：",[138,113699,113702],{"className":113700,"code":113701,"language":5461,"meta":143},[5459],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[51,113703,113701],{"__ignoreMap":143},[14,113705,101042],{"id":101041},[19,113707,101045],{},[138,113709,113710],{"className":24095,"code":104658,"language":24097,"meta":143,"style":143},[51,113711,113712],{"__ignoreMap":143},[147,113713,113714,113716,113718,113720,113722,113724,113726,113728,113730],{"class":149,"line":150},[147,113715,24850],{"class":2237},[147,113717,26589],{"class":504},[147,113719,24107],{"class":504},[147,113721,26674],{"class":448},[147,113723,104673],{"class":504},[147,113725,101070],{"class":504},[147,113727,102773],{"class":504},[147,113729,101086],{"class":504},[147,113731,104682],{"class":504},[19,113733,103089],{},[138,113735,113737],{"className":24095,"code":113736,"language":24097,"meta":143,"style":143},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[51,113738,113739],{"__ignoreMap":143},[147,113740,113741,113743,113745,113747,113749],{"class":149,"line":150},[147,113742,24104],{"class":2237},[147,113744,24107],{"class":504},[147,113746,101202],{"class":504},[147,113748,107981],{"class":504},[147,113750,113751],{"class":504}," gymnasium\n",[19,113753,103106],{},[138,113755,113757],{"className":24095,"code":113756,"language":24097,"meta":143,"style":143},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[51,113758,113759,113776,113785],{"__ignoreMap":143},[147,113760,113761,113763,113765,113767,113770,113772,113774],{"class":149,"line":150},[147,113762,30604],{"class":2237},[147,113764,29450],{"class":504},[147,113766,25389],{"class":448},[147,113768,113769],{"class":504}," mujoco-gym-api",[147,113771,101247],{"class":504},[147,113773,101250],{"class":448},[147,113775,101253],{"class":448},[147,113777,113778,113780,113782],{"class":149,"line":312},[147,113779,30604],{"class":2237},[147,113781,101260],{"class":504},[147,113783,113784],{"class":504}," mujoco-gym-api\n",[147,113786,113787,113789,113791,113793,113795],{"class":149,"line":1454},[147,113788,24104],{"class":2237},[147,113790,24107],{"class":504},[147,113792,101202],{"class":504},[147,113794,107981],{"class":504},[147,113796,113751],{"class":504},[19,113798,101276],{},[350,113800,113801,113811,113814,113820],{},[353,113802,113803,113804,113807,113808,28659],{},"本章使用 ",[51,113805,113806],{},"gymnasium","，不是旧版 ",[51,113809,113810],{},"gym",[353,113812,113813],{},"Gymnasium API 与旧 Gym API 有差异。",[353,113815,113816,113817,28659],{},"旧 Gym 常见返回值是 4 个: ",[51,113818,113819],{},"obs, reward, done, info",[353,113821,113822,113823,28659],{},"Gymnasium 返回值是 5 个: ",[51,113824,113825],{},"obs, reward, terminated, truncated, info",[14,113827,101317],{"id":101316},[19,113829,113830],{},"强化学习环境接口包含:",[537,113832,113833,113842],{},[540,113834,113835],{},[543,113836,113837,113840],{},[546,113838,113839],{"align":24009},"方法",[546,113841,102967],{"align":24009},[583,113843,113844,113854,113864,113874],{},[543,113845,113846,113851],{},[588,113847,113848],{"align":24009},[51,113849,113850],{},"reset()",[588,113852,113853],{"align":24009},"重置环境",[543,113855,113856,113861],{},[588,113857,113858],{"align":24009},[51,113859,113860],{},"step(action)",[588,113862,113863],{"align":24009},"执行动作",[543,113865,113866,113871],{},[588,113867,113868],{"align":24009},[51,113869,113870],{},"observation_space",[588,113872,113873],{"align":24009},"观测空间",[543,113875,113876,113881],{},[588,113877,113878],{"align":24009},[51,113879,113880],{},"action_space",[588,113882,23927],{"align":24009},[19,113884,113885],{},"一个最小环境需要完成:",[138,113887,113890],{"className":113888,"code":113889,"language":5461,"meta":143},[5459],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[51,113891,113889],{"__ignoreMap":143},[367,113893,113895,101290,113898,104908],{"id":113894},"terminated-和-truncated-的区别",[51,113896,113897],{},"terminated",[51,113899,113900],{},"truncated",[19,113902,113903],{},"Gymnasium 把“结束”拆成两个概念：",[537,113905,113906,113916],{},[540,113907,113908],{},[543,113909,113910,113912,113914],{},[546,113911,104844],{"align":24009},[546,113913,100972],{"align":24009},[546,113915,21460],{"align":24009},[583,113917,113918,113930],{},[543,113919,113920,113924,113927],{},[588,113921,113922],{"align":24009},[51,113923,113897],{},[588,113925,113926],{"align":24009},"任务自然结束",[588,113928,113929],{"align":24009},"机械臂到达目标、机器人摔倒",[543,113931,113932,113936,113939],{},[588,113933,113934],{"align":24009},[51,113935,113900],{},[588,113937,113938],{"align":24009},"因外部限制截断",[588,113940,113941],{"align":24009},"达到最大步数、时间限制",[19,113943,113944],{},"本章中：",[138,113946,113948],{"className":30652,"code":113947,"language":30654,"meta":143,"style":143},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[51,113949,113950,113965],{"__ignoreMap":143},[147,113951,113952,113955,113957,113960,113962],{"class":149,"line":150},[147,113953,113954],{"class":157},"terminated ",[147,113956,445],{"class":397},[147,113958,113959],{"class":157}," dist ",[147,113961,1309],{"class":397},[147,113963,113964],{"class":448}," 0.05\n",[147,113966,113967,113970,113972,113974,113977,113979,113981],{"class":149,"line":312},[147,113968,113969],{"class":157},"truncated ",[147,113971,445],{"class":397},[147,113973,39147],{"class":448},[147,113975,113976],{"class":157},".steps ",[147,113978,1984],{"class":397},[147,113980,39147],{"class":448},[147,113982,113983],{"class":157},".max_steps\n",[19,113985,113986],{},"也就是：",[350,113988,113989,113992],{},[353,113990,113991],{},"末端距离目标小于 0.05，任务成功结束。",[353,113993,113994],{},"步数超过上限，episode 被截断。",[367,113996,113998,101290,114000],{"id":113997},"observation_space-和-action_space",[51,113999,113870],{},[51,114001,113880],{},[19,114003,114004],{},"这两个对象告诉算法：",[138,114006,114009],{"className":114007,"code":114008,"language":5461,"meta":143},[5459],"观测长什么样\n动作允许多大\n",[51,114010,114008],{"__ignoreMap":143},[19,114012,14906],{},[138,114014,114016],{"className":30652,"code":114015,"language":30654,"meta":143,"style":143},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[51,114017,114018],{"__ignoreMap":143},[147,114019,114020,114022,114025,114027,114030,114033,114036,114038,114040,114043,114045,114047,114049,114051,114053,114055,114057,114060,114062,114064],{"class":149,"line":150},[147,114021,31097],{"class":448},[147,114023,114024],{"class":157},".action_space ",[147,114026,445],{"class":397},[147,114028,114029],{"class":157}," spaces.Box(",[147,114031,114032],{"class":5490},"low",[147,114034,114035],{"class":397},"=-",[147,114037,102675],{"class":448},[147,114039,12709],{"class":157},[147,114041,114042],{"class":5490},"high",[147,114044,445],{"class":397},[147,114046,102675],{"class":448},[147,114048,12709],{"class":157},[147,114050,96235],{"class":5490},[147,114052,445],{"class":397},[147,114054,401],{"class":157},[147,114056,477],{"class":448},[147,114058,114059],{"class":157},",), ",[147,114061,93772],{"class":5490},[147,114063,445],{"class":397},[147,114065,114066],{"class":157},"np.float32)\n",[19,114068,114069,114070,114073],{},"表示动作是 2 维数组，每个值都在 ",[51,114071,114072],{},"[-1, 1]"," 范围内。",[138,114075,114077],{"className":30652,"code":114076,"language":30654,"meta":143,"style":143},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[51,114078,114079],{"__ignoreMap":143},[147,114080,114081,114083,114086,114088,114090,114092,114094,114097,114099,114101,114103,114105,114107,114109,114111,114113,114115,114117],{"class":149,"line":150},[147,114082,31097],{"class":448},[147,114084,114085],{"class":157},".observation_space ",[147,114087,445],{"class":397},[147,114089,114029],{"class":157},[147,114091,114032],{"class":5490},[147,114093,114035],{"class":397},[147,114095,114096],{"class":157},"np.inf, ",[147,114098,114042],{"class":5490},[147,114100,445],{"class":397},[147,114102,114096],{"class":157},[147,114104,96235],{"class":5490},[147,114106,445],{"class":397},[147,114108,401],{"class":157},[147,114110,845],{"class":448},[147,114112,114059],{"class":157},[147,114114,93772],{"class":5490},[147,114116,445],{"class":397},[147,114118,114066],{"class":157},[19,114120,114121],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[367,114123,114125],{"id":114124},"frame_skip-是什么","frame_skip 是什么",[138,114127,114129],{"className":30652,"code":114128,"language":30654,"meta":143,"style":143},"self.frame_skip = 5\n",[51,114130,114131],{"__ignoreMap":143},[147,114132,114133,114135,114138,114140],{"class":149,"line":150},[147,114134,31097],{"class":448},[147,114136,114137],{"class":157},".frame_skip ",[147,114139,445],{"class":397},[147,114141,54700],{"class":448},[19,114143,114144,114145,114148,114149,114151],{},"表示外部调用一次 ",[51,114146,114147],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[51,114150,101487],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,114153,101525],{"id":101524},[138,114155,114157],{"className":30652,"code":114156,"language":30654,"meta":143,"style":143},"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",[51,114158,114159,114171,114177,114187,114198,114202,114206,114214,114219,114223,114227,114231,114235,114239,114243,114247,114252,114256,114260,114264,114269,114273,114277,114281,114285,114289,114293,114297,114301,114305,114309,114313,114317,114321,114339,114354,114358,114371,114381,114396,114413,114417,114438,114457,114482,114496,114500,114510,114522,114532,114536,114578,114616,114620,114630,114646,114661,114680,114687,114691,114704,114719,114734,114747,114766,114782,114786,114827,114842,114857,114861,114900,114911,114924,114928,114938,114947,114951,114961,114976,114994,114998,115009,115026,115039,115043,115053,115057,115068,115079,115083,115097,115111,115127,115131,115144,115161,115176,115183,115187,115191,115203,115213,115231,115243,115255,115259,115267,115283,115292,115301,115309,115351,115364,115369,115373,115391,115395,115399,115411],{"__ignoreMap":143},[147,114160,114161,114163,114166,114168],{"class":149,"line":150},[147,114162,30666],{"class":397},[147,114164,114165],{"class":157}," gymnasium ",[147,114167,31657],{"class":397},[147,114169,114170],{"class":157}," gym\n",[147,114172,114173,114175],{"class":149,"line":312},[147,114174,30666],{"class":397},[147,114176,101573],{"class":157},[147,114178,114179,114181,114183,114185],{"class":149,"line":1454},[147,114180,30666],{"class":397},[147,114182,31654],{"class":157},[147,114184,31657],{"class":397},[147,114186,31660],{"class":157},[147,114188,114189,114191,114193,114195],{"class":149,"line":1469},[147,114190,31011],{"class":397},[147,114192,114165],{"class":157},[147,114194,30666],{"class":397},[147,114196,114197],{"class":157}," spaces\n",[147,114199,114200],{"class":149,"line":1475},[147,114201,2674],{"emptyLinePlaceholder":324},[147,114203,114204],{"class":149,"line":1489},[147,114205,2674],{"emptyLinePlaceholder":324},[147,114207,114208,114210,114212],{"class":149,"line":1495},[147,114209,101586],{"class":448},[147,114211,13838],{"class":397},[147,114213,101591],{"class":504},[147,114215,114216],{"class":149,"line":1586},[147,114217,114218],{"class":504},"\u003Cmujoco model=\"gym_reacher\">\n",[147,114220,114221],{"class":149,"line":1592},[147,114222,112008],{"class":504},[147,114224,114225],{"class":149,"line":1604},[147,114226,2674],{"emptyLinePlaceholder":324},[147,114228,114229],{"class":149,"line":1886},[147,114230,101610],{"class":504},[147,114232,114233],{"class":149,"line":1891},[147,114234,112026],{"class":504},[147,114236,114237],{"class":149,"line":1897},[147,114238,2674],{"emptyLinePlaceholder":324},[147,114240,114241],{"class":149,"line":1902},[147,114242,112035],{"class":504},[147,114244,114245],{"class":149,"line":1916},[147,114246,112040],{"class":504},[147,114248,114249],{"class":149,"line":1921},[147,114250,114251],{"class":504},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[147,114253,114254],{"class":149,"line":1927},[147,114255,2674],{"emptyLinePlaceholder":324},[147,114257,114258],{"class":149,"line":1948},[147,114259,112054],{"class":504},[147,114261,114262],{"class":149,"line":1953},[147,114263,112059],{"class":504},[147,114265,114266],{"class":149,"line":1967},[147,114267,114268],{"class":504},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[147,114270,114271],{"class":149,"line":1972},[147,114272,112069],{"class":504},[147,114274,114275],{"class":149,"line":2001},[147,114276,106708],{"class":504},[147,114278,114279],{"class":149,"line":2006},[147,114280,101639],{"class":504},[147,114282,114283],{"class":149,"line":2023},[147,114284,101644],{"class":504},[147,114286,114287],{"class":149,"line":2028},[147,114288,2674],{"emptyLinePlaceholder":324},[147,114290,114291],{"class":149,"line":2033},[147,114292,106725],{"class":504},[147,114294,114295],{"class":149,"line":2038},[147,114296,112094],{"class":504},[147,114298,114299],{"class":149,"line":2052},[147,114300,112099],{"class":504},[147,114302,114303],{"class":149,"line":2057},[147,114304,106735],{"class":504},[147,114306,114307],{"class":149,"line":2851},[147,114308,101649],{"class":504},[147,114310,114311],{"class":149,"line":2865},[147,114312,95970],{"class":504},[147,114314,114315],{"class":149,"line":2873},[147,114316,2674],{"emptyLinePlaceholder":324},[147,114318,114319],{"class":149,"line":2878},[147,114320,2674],{"emptyLinePlaceholder":324},[147,114322,114323,114325,114328,114330,114332,114334,114337],{"class":149,"line":2884},[147,114324,14967],{"class":397},[147,114326,114327],{"class":2237}," ReacherEnv",[147,114329,401],{"class":157},[147,114331,113810],{"class":2237},[147,114333,957],{"class":157},[147,114335,114336],{"class":2237},"Env",[147,114338,31060],{"class":157},[147,114340,114341,114344,114346,114348,114351],{"class":149,"line":2890},[147,114342,114343],{"class":157},"    metadata ",[147,114345,445],{"class":397},[147,114347,4722],{"class":157},[147,114349,114350],{"class":504},"\"render_modes\"",[147,114352,114353],{"class":157},": []}\n",[147,114355,114356],{"class":149,"line":2895},[147,114357,2674],{"emptyLinePlaceholder":324},[147,114359,114360,114362,114364,114367,114369],{"class":149,"line":8222},[147,114361,31075],{"class":397},[147,114363,31078],{"class":448},[147,114365,114366],{"class":157},"(self) -> ",[147,114368,95958],{"class":448},[147,114370,4013],{"class":157},[147,114372,114373,114375,114377,114379],{"class":149,"line":8246},[147,114374,31091],{"class":448},[147,114376,17534],{"class":157},[147,114378,31103],{"class":448},[147,114380,2250],{"class":157},[147,114382,114383,114385,114388,114390,114392,114394],{"class":149,"line":8251},[147,114384,31119],{"class":448},[147,114386,114387],{"class":157},".model ",[147,114389,445],{"class":397},[147,114391,101684],{"class":157},[147,114393,101586],{"class":448},[147,114395,407],{"class":157},[147,114397,114398,114400,114403,114405,114408,114410],{"class":149,"line":8257},[147,114399,31119],{"class":448},[147,114401,114402],{"class":157},".data ",[147,114404,445],{"class":397},[147,114406,114407],{"class":157}," mujoco.MjData(",[147,114409,31097],{"class":448},[147,114411,114412],{"class":157},".model)\n",[147,114414,114415],{"class":149,"line":8284},[147,114416,2674],{"emptyLinePlaceholder":324},[147,114418,114419,114421,114424,114426,114429,114431,114434,114436],{"class":149,"line":8289},[147,114420,31119],{"class":448},[147,114422,114423],{"class":157},".tip_site_id ",[147,114425,445],{"class":397},[147,114427,114428],{"class":157}," mujoco.mj_name2id(",[147,114430,31097],{"class":448},[147,114432,114433],{"class":157},".model, mujoco.mjtObj.mjOBJ_SITE, ",[147,114435,111806],{"class":504},[147,114437,407],{"class":157},[147,114439,114440,114442,114445,114447,114449,114451,114453,114455],{"class":149,"line":8295},[147,114441,31119],{"class":448},[147,114443,114444],{"class":157},".target_site_id ",[147,114446,445],{"class":397},[147,114448,114428],{"class":157},[147,114450,31097],{"class":448},[147,114452,114433],{"class":157},[147,114454,112229],{"class":504},[147,114456,407],{"class":157},[147,114458,114459,114461,114463,114465,114467,114469,114472,114474,114476,114478,114480],{"class":149,"line":8307},[147,114460,2771],{"class":397},[147,114462,39147],{"class":448},[147,114464,114423],{"class":157},[147,114466,1309],{"class":397},[147,114468,4367],{"class":448},[147,114470,114471],{"class":397}," or",[147,114473,39147],{"class":448},[147,114475,114444],{"class":157},[147,114477,1309],{"class":397},[147,114479,4367],{"class":448},[147,114481,4013],{"class":157},[147,114483,114484,114487,114489,114491,114494],{"class":149,"line":8319},[147,114485,114486],{"class":397},"            raise",[147,114488,103705],{"class":448},[147,114490,401],{"class":157},[147,114492,114493],{"class":504},"\"required sites not found\"",[147,114495,407],{"class":157},[147,114497,114498],{"class":149,"line":8331},[147,114499,2674],{"emptyLinePlaceholder":324},[147,114501,114502,114504,114506,114508],{"class":149,"line":9990},[147,114503,31119],{"class":448},[147,114505,114137],{"class":157},[147,114507,445],{"class":397},[147,114509,54700],{"class":448},[147,114511,114512,114514,114517,114519],{"class":149,"line":10015},[147,114513,31119],{"class":448},[147,114515,114516],{"class":157},".max_steps ",[147,114518,445],{"class":397},[147,114520,114521],{"class":448}," 200\n",[147,114523,114524,114526,114528,114530],{"class":149,"line":10038},[147,114525,31119],{"class":448},[147,114527,113976],{"class":157},[147,114529,445],{"class":397},[147,114531,47607],{"class":448},[147,114533,114534],{"class":149,"line":10062},[147,114535,2674],{"emptyLinePlaceholder":324},[147,114537,114538,114540,114542,114544,114546,114548,114550,114552,114554,114556,114558,114560,114562,114564,114566,114568,114570,114572,114574,114576],{"class":149,"line":10067},[147,114539,31119],{"class":448},[147,114541,114024],{"class":157},[147,114543,445],{"class":397},[147,114545,114029],{"class":157},[147,114547,114032],{"class":5490},[147,114549,114035],{"class":397},[147,114551,102675],{"class":448},[147,114553,12709],{"class":157},[147,114555,114042],{"class":5490},[147,114557,445],{"class":397},[147,114559,102675],{"class":448},[147,114561,12709],{"class":157},[147,114563,96235],{"class":5490},[147,114565,445],{"class":397},[147,114567,401],{"class":157},[147,114569,477],{"class":448},[147,114571,114059],{"class":157},[147,114573,93772],{"class":5490},[147,114575,445],{"class":397},[147,114577,114066],{"class":157},[147,114579,114580,114582,114584,114586,114588,114590,114592,114594,114596,114598,114600,114602,114604,114606,114608,114610,114612,114614],{"class":149,"line":10072},[147,114581,31119],{"class":448},[147,114583,114085],{"class":157},[147,114585,445],{"class":397},[147,114587,114029],{"class":157},[147,114589,114032],{"class":5490},[147,114591,114035],{"class":397},[147,114593,114096],{"class":157},[147,114595,114042],{"class":5490},[147,114597,445],{"class":397},[147,114599,114096],{"class":157},[147,114601,96235],{"class":5490},[147,114603,445],{"class":397},[147,114605,401],{"class":157},[147,114607,845],{"class":448},[147,114609,114059],{"class":157},[147,114611,93772],{"class":5490},[147,114613,445],{"class":397},[147,114615,114066],{"class":157},[147,114617,114618],{"class":149,"line":10077},[147,114619,2674],{"emptyLinePlaceholder":324},[147,114621,114622,114624,114627],{"class":149,"line":10086},[147,114623,31075],{"class":397},[147,114625,114626],{"class":2237}," _get_obs",[147,114628,114629],{"class":157},"(self) -> np.ndarray:\n",[147,114631,114632,114634,114636,114638,114641,114643],{"class":149,"line":10091},[147,114633,112407],{"class":157},[147,114635,445],{"class":397},[147,114637,39147],{"class":448},[147,114639,114640],{"class":157},".data.site_xpos[",[147,114642,31097],{"class":448},[147,114644,114645],{"class":157},".tip_site_id].copy()\n",[147,114647,114648,114650,114652,114654,114656,114658],{"class":149,"line":10097},[147,114649,112420],{"class":157},[147,114651,445],{"class":397},[147,114653,39147],{"class":448},[147,114655,114640],{"class":157},[147,114657,31097],{"class":448},[147,114659,114660],{"class":157},".target_site_id].copy()\n",[147,114662,114663,114665,114667,114670,114672,114675,114677],{"class":149,"line":10118},[147,114664,110452],{"class":157},[147,114666,445],{"class":397},[147,114668,114669],{"class":157}," np.concatenate([",[147,114671,31097],{"class":448},[147,114673,114674],{"class":157},".data.qpos.copy(), ",[147,114676,31097],{"class":448},[147,114678,114679],{"class":157},".data.qvel.copy(), tip, target])\n",[147,114681,114682,114684],{"class":149,"line":10124},[147,114683,15025],{"class":397},[147,114685,114686],{"class":157}," obs.astype(np.float32)\n",[147,114688,114689],{"class":149,"line":10138},[147,114690,2674],{"emptyLinePlaceholder":324},[147,114692,114693,114695,114698,114700,114702],{"class":149,"line":10144},[147,114694,31075],{"class":397},[147,114696,114697],{"class":2237}," _get_reward",[147,114699,114366],{"class":157},[147,114701,439],{"class":448},[147,114703,4013],{"class":157},[147,114705,114706,114708,114710,114712,114714,114716],{"class":149,"line":10171},[147,114707,112407],{"class":157},[147,114709,445],{"class":397},[147,114711,39147],{"class":448},[147,114713,114640],{"class":157},[147,114715,31097],{"class":448},[147,114717,114718],{"class":157},".tip_site_id]\n",[147,114720,114721,114723,114725,114727,114729,114731],{"class":149,"line":10180},[147,114722,112420],{"class":157},[147,114724,445],{"class":397},[147,114726,39147],{"class":448},[147,114728,114640],{"class":157},[147,114730,31097],{"class":448},[147,114732,114733],{"class":157},".target_site_id]\n",[147,114735,114736,114739,114741,114743,114745],{"class":149,"line":10186},[147,114737,114738],{"class":157},"        dist ",[147,114740,445],{"class":397},[147,114742,111871],{"class":157},[147,114744,931],{"class":397},[147,114746,111876],{"class":157},[147,114748,114749,114752,114754,114756,114758,114761,114763],{"class":149,"line":10194},[147,114750,114751],{"class":157},"        control_cost ",[147,114753,445],{"class":397},[147,114755,112307],{"class":448},[147,114757,6792],{"class":397},[147,114759,114760],{"class":157}," np.sum(np.square(",[147,114762,31097],{"class":448},[147,114764,114765],{"class":157},".data.ctrl))\n",[147,114767,114768,114770,114772,114774,114776,114778,114780],{"class":149,"line":10199},[147,114769,15025],{"class":397},[147,114771,110067],{"class":448},[147,114773,401],{"class":157},[147,114775,931],{"class":397},[147,114777,111866],{"class":157},[147,114779,931],{"class":397},[147,114781,112329],{"class":157},[147,114783,114784],{"class":149,"line":16877},[147,114785,2674],{"emptyLinePlaceholder":324},[147,114787,114788,114790,114793,114796,114798,114801,114803,114805,114807,114809,114811,114814,114817,114819,114821,114823,114825],{"class":149,"line":16883},[147,114789,31075],{"class":397},[147,114791,114792],{"class":2237}," reset",[147,114794,114795],{"class":157},"(self, ",[147,114797,854],{"class":397},[147,114799,114800],{"class":157},", seed: ",[147,114802,404],{"class":448},[147,114804,25383],{"class":397},[147,114806,39207],{"class":448},[147,114808,13838],{"class":397},[147,114810,39207],{"class":448},[147,114812,114813],{"class":157},", options: ",[147,114815,114816],{"class":448},"dict",[147,114818,25383],{"class":397},[147,114820,39207],{"class":448},[147,114822,13838],{"class":397},[147,114824,39207],{"class":448},[147,114826,31060],{"class":157},[147,114828,114829,114831,114834,114837,114839],{"class":149,"line":16906},[147,114830,31091],{"class":448},[147,114832,114833],{"class":157},"().reset(",[147,114835,114836],{"class":5490},"seed",[147,114838,445],{"class":397},[147,114840,114841],{"class":157},"seed)\n",[147,114843,114844,114847,114849,114852,114854],{"class":149,"line":16912},[147,114845,114846],{"class":157},"        mujoco.mj_resetData(",[147,114848,31097],{"class":448},[147,114850,114851],{"class":157},".model, ",[147,114853,31097],{"class":448},[147,114855,114856],{"class":157},".data)\n",[147,114858,114859],{"class":149,"line":16935},[147,114860,2674],{"emptyLinePlaceholder":324},[147,114862,114863,114865,114868,114870,114872,114875,114877,114879,114881,114883,114885,114887,114889,114891,114893,114895,114897],{"class":149,"line":16949},[147,114864,31119],{"class":448},[147,114866,114867],{"class":157},".data.qpos[:] ",[147,114869,445],{"class":397},[147,114871,39147],{"class":448},[147,114873,114874],{"class":157},".np_random.uniform(",[147,114876,114032],{"class":5490},[147,114878,114035],{"class":397},[147,114880,86482],{"class":448},[147,114882,12709],{"class":157},[147,114884,114042],{"class":5490},[147,114886,445],{"class":397},[147,114888,86482],{"class":448},[147,114890,12709],{"class":157},[147,114892,31770],{"class":5490},[147,114894,445],{"class":397},[147,114896,31097],{"class":448},[147,114898,114899],{"class":157},".model.nq)\n",[147,114901,114902,114904,114907,114909],{"class":149,"line":16969},[147,114903,31119],{"class":448},[147,114905,114906],{"class":157},".data.qvel[:] ",[147,114908,445],{"class":397},[147,114910,105031],{"class":448},[147,114912,114913,114916,114918,114920,114922],{"class":149,"line":16975},[147,114914,114915],{"class":157},"        mujoco.mj_forward(",[147,114917,31097],{"class":448},[147,114919,114851],{"class":157},[147,114921,31097],{"class":448},[147,114923,114856],{"class":157},[147,114925,114926],{"class":149,"line":16986},[147,114927,2674],{"emptyLinePlaceholder":324},[147,114929,114930,114932,114934,114936],{"class":149,"line":17009},[147,114931,31119],{"class":448},[147,114933,113976],{"class":157},[147,114935,445],{"class":397},[147,114937,47607],{"class":448},[147,114939,114940,114942,114944],{"class":149,"line":17031},[147,114941,15025],{"class":397},[147,114943,39147],{"class":448},[147,114945,114946],{"class":157},"._get_obs(), {}\n",[147,114948,114949],{"class":149,"line":17036},[147,114950,2674],{"emptyLinePlaceholder":324},[147,114952,114953,114955,114958],{"class":149,"line":17042},[147,114954,31075],{"class":397},[147,114956,114957],{"class":2237}," step",[147,114959,114960],{"class":157},"(self, action):\n",[147,114962,114963,114965,114967,114970,114972,114974],{"class":149,"line":17056},[147,114964,110492],{"class":157},[147,114966,445],{"class":397},[147,114968,114969],{"class":157}," np.asarray(action, ",[147,114971,93772],{"class":5490},[147,114973,445],{"class":397},[147,114975,114066],{"class":157},[147,114977,114978,114980,114982,114984,114986,114989,114991],{"class":149,"line":17069},[147,114979,110492],{"class":157},[147,114981,445],{"class":397},[147,114983,107717],{"class":157},[147,114985,31097],{"class":448},[147,114987,114988],{"class":157},".action_space.low, ",[147,114990,31097],{"class":448},[147,114992,114993],{"class":157},".action_space.high)\n",[147,114995,114996],{"class":149,"line":17074},[147,114997,2674],{"emptyLinePlaceholder":324},[147,114999,115000,115002,115005,115007],{"class":149,"line":17088},[147,115001,31119],{"class":448},[147,115003,115004],{"class":157},".data.ctrl[:] ",[147,115006,445],{"class":397},[147,115008,107740],{"class":157},[147,115010,115011,115013,115015,115017,115019,115021,115023],{"class":149,"line":17093},[147,115012,3677],{"class":397},[147,115014,101773],{"class":157},[147,115016,26317],{"class":397},[147,115018,32717],{"class":448},[147,115020,401],{"class":157},[147,115022,31097],{"class":448},[147,115024,115025],{"class":157},".frame_skip):\n",[147,115027,115028,115031,115033,115035,115037],{"class":149,"line":17099},[147,115029,115030],{"class":157},"            mujoco.mj_step(",[147,115032,31097],{"class":448},[147,115034,114851],{"class":157},[147,115036,31097],{"class":448},[147,115038,114856],{"class":157},[147,115040,115041],{"class":149,"line":17104},[147,115042,2674],{"emptyLinePlaceholder":324},[147,115044,115045,115047,115049,115051],{"class":149,"line":17118},[147,115046,31119],{"class":448},[147,115048,113976],{"class":157},[147,115050,9751],{"class":397},[147,115052,55972],{"class":448},[147,115054,115055],{"class":149,"line":17123},[147,115056,2674],{"emptyLinePlaceholder":324},[147,115058,115059,115061,115063,115065],{"class":149,"line":17128},[147,115060,110452],{"class":157},[147,115062,445],{"class":397},[147,115064,39147],{"class":448},[147,115066,115067],{"class":157},"._get_obs()\n",[147,115069,115070,115072,115074,115076],{"class":149,"line":17142},[147,115071,110557],{"class":157},[147,115073,445],{"class":397},[147,115075,39147],{"class":448},[147,115077,115078],{"class":157},"._get_reward()\n",[147,115080,115081],{"class":149,"line":17154},[147,115082,2674],{"emptyLinePlaceholder":324},[147,115084,115085,115087,115089,115091,115093,115095],{"class":149,"line":17159},[147,115086,112407],{"class":157},[147,115088,445],{"class":397},[147,115090,39147],{"class":448},[147,115092,114640],{"class":157},[147,115094,31097],{"class":448},[147,115096,114718],{"class":157},[147,115098,115099,115101,115103,115105,115107,115109],{"class":149,"line":17172},[147,115100,112420],{"class":157},[147,115102,445],{"class":397},[147,115104,39147],{"class":448},[147,115106,114640],{"class":157},[147,115108,31097],{"class":448},[147,115110,114733],{"class":157},[147,115112,115113,115115,115117,115119,115122,115124],{"class":149,"line":17177},[147,115114,114738],{"class":157},[147,115116,445],{"class":397},[147,115118,110067],{"class":448},[147,115120,115121],{"class":157},"(np.linalg.norm(tip ",[147,115123,931],{"class":397},[147,115125,115126],{"class":157}," target))\n",[147,115128,115129],{"class":149,"line":17182},[147,115130,2674],{"emptyLinePlaceholder":324},[147,115132,115133,115136,115138,115140,115142],{"class":149,"line":17187},[147,115134,115135],{"class":157},"        terminated ",[147,115137,445],{"class":397},[147,115139,113959],{"class":157},[147,115141,1309],{"class":397},[147,115143,113964],{"class":448},[147,115145,115146,115149,115151,115153,115155,115157,115159],{"class":149,"line":17200},[147,115147,115148],{"class":157},"        truncated ",[147,115150,445],{"class":397},[147,115152,39147],{"class":448},[147,115154,113976],{"class":157},[147,115156,1984],{"class":397},[147,115158,39147],{"class":448},[147,115160,113983],{"class":157},[147,115162,115163,115166,115168,115170,115173],{"class":149,"line":17205},[147,115164,115165],{"class":157},"        info ",[147,115167,445],{"class":397},[147,115169,4722],{"class":157},[147,115171,115172],{"class":504},"\"distance\"",[147,115174,115175],{"class":157},": dist}\n",[147,115177,115178,115180],{"class":149,"line":32907},[147,115179,15025],{"class":397},[147,115181,115182],{"class":157}," obs, reward, terminated, truncated, info\n",[147,115184,115185],{"class":149,"line":32913},[147,115186,2674],{"emptyLinePlaceholder":324},[147,115188,115189],{"class":149,"line":32919},[147,115190,2674],{"emptyLinePlaceholder":324},[147,115192,115193,115195,115197,115199,115201],{"class":149,"line":32925},[147,115194,32221],{"class":397},[147,115196,2247],{"class":2237},[147,115198,101670],{"class":157},[147,115200,95958],{"class":448},[147,115202,4013],{"class":157},[147,115204,115205,115208,115210],{"class":149,"line":32931},[147,115206,115207],{"class":157},"    env ",[147,115209,445],{"class":397},[147,115211,115212],{"class":157}," ReacherEnv()\n",[147,115214,115215,115218,115220,115223,115225,115227,115229],{"class":149,"line":32942},[147,115216,115217],{"class":157},"    obs, info ",[147,115219,445],{"class":397},[147,115221,115222],{"class":157}," env.reset(",[147,115224,114836],{"class":5490},[147,115226,445],{"class":397},[147,115228,590],{"class":448},[147,115230,407],{"class":157},[147,115232,115233,115235,115237,115240],{"class":149,"line":32948},[147,115234,31573],{"class":448},[147,115236,401],{"class":157},[147,115238,115239],{"class":504},"\"initial obs shape:\"",[147,115241,115242],{"class":157},", obs.shape)\n",[147,115244,115245,115247,115249,115252],{"class":149,"line":32968},[147,115246,31573],{"class":448},[147,115248,401],{"class":157},[147,115250,115251],{"class":504},"\"initial info:\"",[147,115253,115254],{"class":157},", info)\n",[147,115256,115257],{"class":149,"line":32974},[147,115258,2674],{"emptyLinePlaceholder":324},[147,115260,115261,115263,115265],{"class":149,"line":32985},[147,115262,110423],{"class":157},[147,115264,445],{"class":397},[147,115266,105031],{"class":448},[147,115268,115269,115271,115273,115275,115277,115279,115281],{"class":149,"line":32991},[147,115270,3475],{"class":397},[147,115272,31890],{"class":157},[147,115274,26317],{"class":397},[147,115276,32717],{"class":448},[147,115278,401],{"class":157},[147,115280,1099],{"class":448},[147,115282,31060],{"class":157},[147,115284,115285,115287,115289],{"class":149,"line":32997},[147,115286,110492],{"class":157},[147,115288,445],{"class":397},[147,115290,115291],{"class":157}," env.action_space.sample()\n",[147,115293,115294,115297,115299],{"class":149,"line":33003},[147,115295,115296],{"class":157},"        obs, reward, terminated, truncated, info ",[147,115298,445],{"class":397},[147,115300,113685],{"class":157},[147,115302,115303,115305,115307],{"class":149,"line":33009},[147,115304,110567],{"class":157},[147,115306,9751],{"class":397},[147,115308,110572],{"class":157},[147,115310,115311,115313,115315,115317,115319,115322,115324,115326,115329,115331,115333,115336,115338,115340,115343,115345,115347,115349],{"class":149,"line":33015},[147,115312,32725],{"class":448},[147,115314,401],{"class":157},[147,115316,110601],{"class":504},[147,115318,110604],{"class":157},[147,115320,115321],{"class":504},"\"reward:\"",[147,115323,12709],{"class":157},[147,115325,32292],{"class":448},[147,115327,115328],{"class":157},"(reward, ",[147,115330,471],{"class":448},[147,115332,110615],{"class":157},[147,115334,115335],{"class":504},"\"distance:\"",[147,115337,12709],{"class":157},[147,115339,32292],{"class":448},[147,115341,115342],{"class":157},"(info[",[147,115344,115172],{"class":504},[147,115346,112472],{"class":157},[147,115348,471],{"class":448},[147,115350,30771],{"class":157},[147,115352,115353,115355,115358,115361],{"class":149,"line":33021},[147,115354,2771],{"class":397},[147,115356,115357],{"class":157}," terminated ",[147,115359,115360],{"class":397},"or",[147,115362,115363],{"class":157}," truncated:\n",[147,115365,115366],{"class":149,"line":33027},[147,115367,115368],{"class":397},"            break\n",[147,115370,115371],{"class":149,"line":33047},[147,115372,2674],{"emptyLinePlaceholder":324},[147,115374,115375,115377,115379,115381,115383,115385,115387,115389],{"class":149,"line":33053},[147,115376,31573],{"class":448},[147,115378,401],{"class":157},[147,115380,110646],{"class":504},[147,115382,12709],{"class":157},[147,115384,32292],{"class":448},[147,115386,110653],{"class":157},[147,115388,471],{"class":448},[147,115390,30771],{"class":157},[147,115392,115393],{"class":149,"line":33069},[147,115394,2674],{"emptyLinePlaceholder":324},[147,115396,115397],{"class":149,"line":33075},[147,115398,2674],{"emptyLinePlaceholder":324},[147,115400,115401,115403,115405,115407,115409],{"class":149,"line":33089},[147,115402,1805],{"class":397},[147,115404,31494],{"class":448},[147,115406,101831],{"class":397},[147,115408,101834],{"class":504},[147,115410,4013],{"class":157},[147,115412,115413],{"class":149,"line":33095},[147,115414,101841],{"class":157},[19,115416,103840],{},[138,115418,115420],{"className":24095,"code":115419,"language":24097,"meta":143,"style":143},"touch ch8_gym_env.py\n",[51,115421,115422],{"__ignoreMap":143},[147,115423,115424,115426],{"class":149,"line":150},[147,115425,101555],{"class":2237},[147,115427,115428],{"class":504}," ch8_gym_env.py\n",[19,115430,110714],{},[138,115432,115434],{"className":24095,"code":115433,"language":24097,"meta":143,"style":143},"python ch8_gym_env.py\n",[51,115435,115436],{"__ignoreMap":143},[147,115437,115438,115440],{"class":149,"line":150},[147,115439,30654],{"class":2237},[147,115441,115428],{"class":504},[367,115443,101844],{"id":101844},[19,115445,115446],{},"继承 Gymnasium 环境：",[138,115448,115450],{"className":30652,"code":115449,"language":30654,"meta":143,"style":143},"class ReacherEnv(gym.Env):\n",[51,115451,115452],{"__ignoreMap":143},[147,115453,115454,115456,115458,115460,115462,115464,115466],{"class":149,"line":150},[147,115455,14967],{"class":397},[147,115457,114327],{"class":2237},[147,115459,401],{"class":157},[147,115461,113810],{"class":2237},[147,115463,957],{"class":157},[147,115465,114336],{"class":2237},[147,115467,31060],{"class":157},[19,115469,115470],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,115472,115473],{},"初始化模型：",[138,115475,115477],{"className":30652,"code":115476,"language":30654,"meta":143,"style":143},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[51,115478,115479,115493],{"__ignoreMap":143},[147,115480,115481,115483,115485,115487,115489,115491],{"class":149,"line":150},[147,115482,31097],{"class":448},[147,115484,114387],{"class":157},[147,115486,445],{"class":397},[147,115488,101684],{"class":157},[147,115490,101586],{"class":448},[147,115492,407],{"class":157},[147,115494,115495,115497,115499,115501,115503,115505],{"class":149,"line":312},[147,115496,31097],{"class":448},[147,115498,114402],{"class":157},[147,115500,445],{"class":397},[147,115502,114407],{"class":157},[147,115504,31097],{"class":448},[147,115506,114412],{"class":157},[19,115508,115509,115510,115512],{},"这和前面章节一样，只是现在放到了类的 ",[51,115511,31103],{}," 里。",[19,115514,115515],{},"缓存 site ID：",[138,115517,115519],{"className":30652,"code":115518,"language":30654,"meta":143,"style":143},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[51,115520,115521,115535],{"__ignoreMap":143},[147,115522,115523,115525,115527,115529,115531,115533],{"class":149,"line":150},[147,115524,31097],{"class":448},[147,115526,114423],{"class":157},[147,115528,445],{"class":397},[147,115530,114428],{"class":157},[147,115532,89826],{"class":448},[147,115534,407],{"class":157},[147,115536,115537,115539,115541,115543,115545,115547],{"class":149,"line":312},[147,115538,31097],{"class":448},[147,115540,114444],{"class":157},[147,115542,445],{"class":397},[147,115544,114428],{"class":157},[147,115546,89826],{"class":448},[147,115548,407],{"class":157},[19,115550,115551],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,115553,115554],{},"reset：",[138,115556,115558],{"className":30652,"code":115557,"language":30654,"meta":143,"style":143},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[51,115559,115560],{"__ignoreMap":143},[147,115561,115562,115564,115566,115568,115570,115572,115574,115576,115578,115580,115582,115584,115586,115588,115590,115592,115594],{"class":149,"line":150},[147,115563,32221],{"class":397},[147,115565,114792],{"class":2237},[147,115567,114795],{"class":157},[147,115569,854],{"class":397},[147,115571,114800],{"class":157},[147,115573,404],{"class":448},[147,115575,25383],{"class":397},[147,115577,39207],{"class":448},[147,115579,13838],{"class":397},[147,115581,39207],{"class":448},[147,115583,114813],{"class":157},[147,115585,114816],{"class":448},[147,115587,25383],{"class":397},[147,115589,39207],{"class":448},[147,115591,13838],{"class":397},[147,115593,39207],{"class":448},[147,115595,31060],{"class":157},[19,115597,115598,115600],{},[51,115599,70329],{}," 做四件事：",[350,115602,115603,115606,115609,115612],{},[353,115604,115605],{},"设置随机种子。",[353,115607,115608],{},"重置 MuJoCo data。",[353,115610,115611],{},"随机初始化关节角。",[353,115613,115614],{},"返回初始观测和 info。",[19,115616,115617],{},"step：",[138,115619,115621],{"className":30652,"code":115620,"language":30654,"meta":143,"style":143},"def step(self, action):\n",[51,115622,115623],{"__ignoreMap":143},[147,115624,115625,115627,115629],{"class":149,"line":150},[147,115626,32221],{"class":397},[147,115628,114957],{"class":2237},[147,115630,114960],{"class":157},[19,115632,115633,115635],{},[51,115634,107404],{}," 做六件事：",[350,115637,115638,115641,115647,115650,115653,115656],{},[353,115639,115640],{},"检查并裁剪 action。",[353,115642,115643,115644,28659],{},"写入 ",[51,115645,115646],{},"self.data.ctrl",[353,115648,115649],{},"连续推进若干个 MuJoCo 物理步。",[353,115651,115652],{},"计算新观测。",[353,115654,115655],{},"计算奖励和结束条件。",[353,115657,115658],{},"返回 Gymnasium 标准五元组。",[367,115660,101980],{"id":101980},[138,115662,115664],{"className":30652,"code":115663,"language":30654,"meta":143,"style":143},"import gymnasium as gym\n",[51,115665,115666],{"__ignoreMap":143},[147,115667,115668,115670,115672,115674],{"class":149,"line":150},[147,115669,30666],{"class":397},[147,115671,114165],{"class":157},[147,115673,31657],{"class":397},[147,115675,114170],{"class":157},[19,115677,115678,115679,115681,115682,115685],{},"导入 Gymnasium，并起别名 ",[51,115680,113810],{},"。后面写 ",[51,115683,115684],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[138,115687,115689],{"className":30652,"code":115688,"language":30654,"meta":143,"style":143},"from gymnasium import spaces\n",[51,115690,115691],{"__ignoreMap":143},[147,115692,115693,115695,115697,115699],{"class":149,"line":150},[147,115694,31011],{"class":397},[147,115696,114165],{"class":157},[147,115698,30666],{"class":397},[147,115700,114197],{"class":157},[19,115702,115703,115704,115707],{},"导入空间定义工具。",[51,115705,115706],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[138,115709,115710],{"className":30652,"code":115449,"language":30654,"meta":143,"style":143},[51,115711,115712],{"__ignoreMap":143},[147,115713,115714,115716,115718,115720,115722,115724,115726],{"class":149,"line":150},[147,115715,14967],{"class":397},[147,115717,114327],{"class":2237},[147,115719,401],{"class":157},[147,115721,113810],{"class":2237},[147,115723,957],{"class":157},[147,115725,114336],{"class":2237},[147,115727,31060],{"class":157},[19,115729,115730,115731,115734,115735,115737,115738,101290,115740,115742],{},"定义一个类，名字叫 ",[51,115732,115733],{},"ReacherEnv","。括号里的 ",[51,115736,115684],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[51,115739,70329],{},[51,115741,107404],{}," 这两个核心方法。",[138,115744,115746],{"className":30652,"code":115745,"language":30654,"meta":143,"style":143},"metadata = {\"render_modes\": []}\n",[51,115747,115748],{"__ignoreMap":143},[147,115749,115750,115753,115755,115757,115759],{"class":149,"line":150},[147,115751,115752],{"class":157},"metadata ",[147,115754,445],{"class":397},[147,115756,4722],{"class":157},[147,115758,114350],{"class":504},[147,115760,114353],{"class":157},[19,115762,115763],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[138,115765,115767],{"className":30652,"code":115766,"language":30654,"meta":143,"style":143},"def __init__(self) -> None:\n",[51,115768,115769],{"__ignoreMap":143},[147,115770,115771,115773,115775,115777,115779],{"class":149,"line":150},[147,115772,32221],{"class":397},[147,115774,31078],{"class":448},[147,115776,114366],{"class":157},[147,115778,95958],{"class":448},[147,115780,4013],{"class":157},[19,115782,115783,115785,115786,28659],{},[51,115784,31103],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[51,115787,115788],{},"env = ReacherEnv()",[138,115790,115792],{"className":30652,"code":115791,"language":30654,"meta":143,"style":143},"super().__init__()\n",[51,115793,115794],{"__ignoreMap":143},[147,115795,115796,115799,115801,115803],{"class":149,"line":150},[147,115797,115798],{"class":448},"super",[147,115800,17534],{"class":157},[147,115802,31103],{"class":448},[147,115804,2250],{"class":157},[19,115806,115807,115808,115810],{},"调用父类 ",[51,115809,115684],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[138,115812,115813],{"className":30652,"code":115476,"language":30654,"meta":143,"style":143},[51,115814,115815,115829],{"__ignoreMap":143},[147,115816,115817,115819,115821,115823,115825,115827],{"class":149,"line":150},[147,115818,31097],{"class":448},[147,115820,114387],{"class":157},[147,115822,445],{"class":397},[147,115824,101684],{"class":157},[147,115826,101586],{"class":448},[147,115828,407],{"class":157},[147,115830,115831,115833,115835,115837,115839,115841],{"class":149,"line":312},[147,115832,31097],{"class":448},[147,115834,114402],{"class":157},[147,115836,445],{"class":397},[147,115838,114407],{"class":157},[147,115840,31097],{"class":448},[147,115842,114412],{"class":157},[19,115844,115845,115846,115848,115849,101290,115852,115855],{},"把 MuJoCo 模型和状态保存到 ",[51,115847,31097],{}," 上。",[51,115850,115851],{},"self.model",[51,115853,115854],{},"self.data"," 表示这个环境对象自己的模型和状态。",[138,115857,115858],{"className":30652,"code":115518,"language":30654,"meta":143,"style":143},[51,115859,115860,115874],{"__ignoreMap":143},[147,115861,115862,115864,115866,115868,115870,115872],{"class":149,"line":150},[147,115863,31097],{"class":448},[147,115865,114423],{"class":157},[147,115867,445],{"class":397},[147,115869,114428],{"class":157},[147,115871,89826],{"class":448},[147,115873,407],{"class":157},[147,115875,115876,115878,115880,115882,115884,115886],{"class":149,"line":312},[147,115877,31097],{"class":448},[147,115879,114444],{"class":157},[147,115881,445],{"class":397},[147,115883,114428],{"class":157},[147,115885,89826],{"class":448},[147,115887,407],{"class":157},[19,115889,115890,115891,101290,115894,115897],{},"提前查好 tip 和 target 的 site ID。这样 ",[51,115892,115893],{},"_get_obs",[51,115895,115896],{},"_get_reward"," 里就不用每次按名字查找。",[138,115899,115901],{"className":30652,"code":115900,"language":30654,"meta":143,"style":143},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[51,115902,115903,115913,115923],{"__ignoreMap":143},[147,115904,115905,115907,115909,115911],{"class":149,"line":150},[147,115906,31097],{"class":448},[147,115908,114137],{"class":157},[147,115910,445],{"class":397},[147,115912,54700],{"class":448},[147,115914,115915,115917,115919,115921],{"class":149,"line":312},[147,115916,31097],{"class":448},[147,115918,114516],{"class":157},[147,115920,445],{"class":397},[147,115922,114521],{"class":448},[147,115924,115925,115927,115929,115931],{"class":149,"line":1454},[147,115926,31097],{"class":448},[147,115928,113976],{"class":157},[147,115930,445],{"class":397},[147,115932,47607],{"class":448},[19,115934,115935,115938,115939,115942,115943,115946],{},[51,115936,115937],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[51,115940,115941],{},"max_steps"," 是一个 episode 最多运行多少步。",[51,115944,115945],{},"steps"," 记录当前 episode 已经走了多少步。",[138,115948,115949],{"className":30652,"code":114015,"language":30654,"meta":143,"style":143},[51,115950,115951],{"__ignoreMap":143},[147,115952,115953,115955,115957,115959,115961,115963,115965,115967,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991],{"class":149,"line":150},[147,115954,31097],{"class":448},[147,115956,114024],{"class":157},[147,115958,445],{"class":397},[147,115960,114029],{"class":157},[147,115962,114032],{"class":5490},[147,115964,114035],{"class":397},[147,115966,102675],{"class":448},[147,115968,12709],{"class":157},[147,115970,114042],{"class":5490},[147,115972,445],{"class":397},[147,115974,102675],{"class":448},[147,115976,12709],{"class":157},[147,115978,96235],{"class":5490},[147,115980,445],{"class":397},[147,115982,401],{"class":157},[147,115984,477],{"class":448},[147,115986,114059],{"class":157},[147,115988,93772],{"class":5490},[147,115990,445],{"class":397},[147,115992,114066],{"class":157},[19,115994,115995,115996,115999,116000,101290,116003,116006],{},"定义动作空间。",[51,115997,115998],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[51,116001,116002],{},"low=-1.0",[51,116004,116005],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[138,116008,116009],{"className":30652,"code":114076,"language":30654,"meta":143,"style":143},[51,116010,116011],{"__ignoreMap":143},[147,116012,116013,116015,116017,116019,116021,116023,116025,116027,116029,116031,116033,116035,116037,116039,116041,116043,116045,116047],{"class":149,"line":150},[147,116014,31097],{"class":448},[147,116016,114085],{"class":157},[147,116018,445],{"class":397},[147,116020,114029],{"class":157},[147,116022,114032],{"class":5490},[147,116024,114035],{"class":397},[147,116026,114096],{"class":157},[147,116028,114042],{"class":5490},[147,116030,445],{"class":397},[147,116032,114096],{"class":157},[147,116034,96235],{"class":5490},[147,116036,445],{"class":397},[147,116038,401],{"class":157},[147,116040,845],{"class":448},[147,116042,114059],{"class":157},[147,116044,93772],{"class":5490},[147,116046,445],{"class":397},[147,116048,114066],{"class":157},[19,116050,116051,116052,116055,116056,116059],{},"定义观测空间。",[51,116053,116054],{},"shape=(10,)"," 表示观测是 10 个数。",[51,116057,116058],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[138,116061,116063],{"className":30652,"code":116062,"language":30654,"meta":143,"style":143},"def _get_obs(self) -> np.ndarray:\n",[51,116064,116065],{"__ignoreMap":143},[147,116066,116067,116069,116071],{"class":149,"line":150},[147,116068,32221],{"class":397},[147,116070,114626],{"class":2237},[147,116072,114629],{"class":157},[19,116074,116075,116076,116078],{},"定义内部函数，用来生成观测。函数名前面的 ",[51,116077,1391],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[138,116080,116082],{"className":30652,"code":116081,"language":30654,"meta":143,"style":143},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[51,116083,116084,116098],{"__ignoreMap":143},[147,116085,116086,116088,116090,116092,116094,116096],{"class":149,"line":150},[147,116087,111838],{"class":157},[147,116089,445],{"class":397},[147,116091,39147],{"class":448},[147,116093,114640],{"class":157},[147,116095,31097],{"class":448},[147,116097,114645],{"class":157},[147,116099,116100,116102,116104,116106,116108,116110],{"class":149,"line":312},[147,116101,111848],{"class":157},[147,116103,445],{"class":397},[147,116105,39147],{"class":448},[147,116107,114640],{"class":157},[147,116109,31097],{"class":448},[147,116111,114660],{"class":157},[19,116113,116114],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[138,116116,116118],{"className":30652,"code":116117,"language":30654,"meta":143,"style":143},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[51,116119,116120,116136],{"__ignoreMap":143},[147,116121,116122,116124,116126,116128,116130,116132,116134],{"class":149,"line":150},[147,116123,111124],{"class":157},[147,116125,445],{"class":397},[147,116127,114669],{"class":157},[147,116129,31097],{"class":448},[147,116131,114674],{"class":157},[147,116133,31097],{"class":448},[147,116135,114679],{"class":157},[147,116137,116138,116140],{"class":149,"line":312},[147,116139,17319],{"class":397},[147,116141,114686],{"class":157},[19,116143,116144,116145,116148,116149,116151],{},"拼接观测，并转换成 ",[51,116146,116147],{},"float32","。很多强化学习库默认使用 ",[51,116150,116147],{},"，所以这里主动转换。",[138,116153,116154],{"className":30652,"code":115557,"language":30654,"meta":143,"style":143},[51,116155,116156],{"__ignoreMap":143},[147,116157,116158,116160,116162,116164,116166,116168,116170,116172,116174,116176,116178,116180,116182,116184,116186,116188,116190],{"class":149,"line":150},[147,116159,32221],{"class":397},[147,116161,114792],{"class":2237},[147,116163,114795],{"class":157},[147,116165,854],{"class":397},[147,116167,114800],{"class":157},[147,116169,404],{"class":448},[147,116171,25383],{"class":397},[147,116173,39207],{"class":448},[147,116175,13838],{"class":397},[147,116177,39207],{"class":448},[147,116179,114813],{"class":157},[147,116181,114816],{"class":448},[147,116183,25383],{"class":397},[147,116185,39207],{"class":448},[147,116187,13838],{"class":397},[147,116189,39207],{"class":448},[147,116191,31060],{"class":157},[19,116193,116194,116195,116197,116198,116201],{},"定义 reset。",[51,116196,114836],{}," 用来控制随机数，保证实验可以复现。",[51,116199,116200],{},"options"," 用来接收额外配置，本章暂时不用。",[138,116203,116205],{"className":30652,"code":116204,"language":30654,"meta":143,"style":143},"super().reset(seed=seed)\n",[51,116206,116207],{"__ignoreMap":143},[147,116208,116209,116211,116213,116215,116217],{"class":149,"line":150},[147,116210,115798],{"class":448},[147,116212,114833],{"class":157},[147,116214,114836],{"class":5490},[147,116216,445],{"class":397},[147,116218,114841],{"class":157},[19,116220,116221,116222,116225],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[51,116223,116224],{},"self.np_random"," 生成可复现的随机数。",[138,116227,116229],{"className":30652,"code":116228,"language":30654,"meta":143,"style":143},"mujoco.mj_resetData(self.model, self.data)\n",[51,116230,116231],{"__ignoreMap":143},[147,116232,116233,116236,116238,116240,116242],{"class":149,"line":150},[147,116234,116235],{"class":157},"mujoco.mj_resetData(",[147,116237,31097],{"class":448},[147,116239,114851],{"class":157},[147,116241,31097],{"class":448},[147,116243,114856],{"class":157},[19,116245,116246],{},"把 MuJoCo 状态重置到默认状态。",[138,116248,116250],{"className":30652,"code":116249,"language":30654,"meta":143,"style":143},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[51,116251,116252],{"__ignoreMap":143},[147,116253,116254,116256,116258,116260,116262,116264,116266,116268,116270,116272,116274,116276,116278,116280,116282,116284,116286],{"class":149,"line":150},[147,116255,31097],{"class":448},[147,116257,114867],{"class":157},[147,116259,445],{"class":397},[147,116261,39147],{"class":448},[147,116263,114874],{"class":157},[147,116265,114032],{"class":5490},[147,116267,114035],{"class":397},[147,116269,86482],{"class":448},[147,116271,12709],{"class":157},[147,116273,114042],{"class":5490},[147,116275,445],{"class":397},[147,116277,86482],{"class":448},[147,116279,12709],{"class":157},[147,116281,31770],{"class":5490},[147,116283,445],{"class":397},[147,116285,31097],{"class":448},[147,116287,114899],{"class":157},[19,116289,115611,116290,116293,116294,116297,116298,116300],{},[51,116291,116292],{},"[:]"," 表示修改整个数组。",[51,116295,116296],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[51,116299,102422],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[138,116302,116304],{"className":30652,"code":116303,"language":30654,"meta":143,"style":143},"self.data.qvel[:] = 0.0\n",[51,116305,116306],{"__ignoreMap":143},[147,116307,116308,116310,116312,116314],{"class":149,"line":150},[147,116309,31097],{"class":448},[147,116311,114906],{"class":157},[147,116313,445],{"class":397},[147,116315,105031],{"class":448},[19,116317,116318],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[138,116320,116322],{"className":30652,"code":116321,"language":30654,"meta":143,"style":143},"self.steps = 0\nreturn self._get_obs(), {}\n",[51,116323,116324,116334],{"__ignoreMap":143},[147,116325,116326,116328,116330,116332],{"class":149,"line":150},[147,116327,31097],{"class":448},[147,116329,113976],{"class":157},[147,116331,445],{"class":397},[147,116333,47607],{"class":448},[147,116335,116336,116338,116340],{"class":149,"line":312},[147,116337,17319],{"class":397},[147,116339,39147],{"class":448},[147,116341,114946],{"class":157},[19,116343,116344],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[138,116346,116347],{"className":30652,"code":115620,"language":30654,"meta":143,"style":143},[51,116348,116349],{"__ignoreMap":143},[147,116350,116351,116353,116355],{"class":149,"line":150},[147,116352,32221],{"class":397},[147,116354,114957],{"class":2237},[147,116356,114960],{"class":157},[19,116358,116359],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[138,116361,116363],{"className":30652,"code":116362,"language":30654,"meta":143,"style":143},"action = np.asarray(action, dtype=np.float32)\n",[51,116364,116365],{"__ignoreMap":143},[147,116366,116367,116369,116371,116373,116375,116377],{"class":149,"line":150},[147,116368,107712],{"class":157},[147,116370,445],{"class":397},[147,116372,114969],{"class":157},[147,116374,93772],{"class":5490},[147,116376,445],{"class":397},[147,116378,114066],{"class":157},[19,116380,116381,116382,28659],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[51,116383,116147],{},[138,116385,116387],{"className":30652,"code":116386,"language":30654,"meta":143,"style":143},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[51,116388,116389],{"__ignoreMap":143},[147,116390,116391,116393,116395,116397,116399,116401,116403],{"class":149,"line":150},[147,116392,107712],{"class":157},[147,116394,445],{"class":397},[147,116396,107717],{"class":157},[147,116398,31097],{"class":448},[147,116400,114988],{"class":157},[147,116402,31097],{"class":448},[147,116404,114993],{"class":157},[19,116406,116407],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[138,116409,116411],{"className":30652,"code":116410,"language":30654,"meta":143,"style":143},"self.data.ctrl[:] = action\n",[51,116412,116413],{"__ignoreMap":143},[147,116414,116415,116417,116419,116421],{"class":149,"line":150},[147,116416,31097],{"class":448},[147,116418,115004],{"class":157},[147,116420,445],{"class":397},[147,116422,107740],{"class":157},[19,116424,116425],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[138,116427,116429],{"className":30652,"code":116428,"language":30654,"meta":143,"style":143},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[51,116430,116431,116447],{"__ignoreMap":143},[147,116432,116433,116435,116437,116439,116441,116443,116445],{"class":149,"line":150},[147,116434,3299],{"class":397},[147,116436,101773],{"class":157},[147,116438,26317],{"class":397},[147,116440,32717],{"class":448},[147,116442,401],{"class":157},[147,116444,31097],{"class":448},[147,116446,115025],{"class":157},[147,116448,116449,116452,116454,116456,116458],{"class":149,"line":312},[147,116450,116451],{"class":157},"    mujoco.mj_step(",[147,116453,31097],{"class":448},[147,116455,114851],{"class":157},[147,116457,31097],{"class":448},[147,116459,114856],{"class":157},[19,116461,116462,116463,116466,116467,116469,116470,28659],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[51,116464,116465],{},"frame_skip=5","，所以外部调用一次 ",[51,116468,114147],{},"，内部实际执行 5 次 ",[51,116471,101487],{},[138,116473,116475],{"className":30652,"code":116474,"language":30654,"meta":143,"style":143},"self.steps += 1\n",[51,116476,116477],{"__ignoreMap":143},[147,116478,116479,116481,116483,116485],{"class":149,"line":150},[147,116480,31097],{"class":448},[147,116482,113976],{"class":157},[147,116484,9751],{"class":397},[147,116486,55972],{"class":448},[19,116488,116489],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[138,116491,116493],{"className":30652,"code":116492,"language":30654,"meta":143,"style":143},"obs = self._get_obs()\nreward = self._get_reward()\n",[51,116494,116495,116505],{"__ignoreMap":143},[147,116496,116497,116499,116501,116503],{"class":149,"line":150},[147,116498,111124],{"class":157},[147,116500,445],{"class":397},[147,116502,39147],{"class":448},[147,116504,115067],{"class":157},[147,116506,116507,116509,116511,116513],{"class":149,"line":312},[147,116508,111275],{"class":157},[147,116510,445],{"class":397},[147,116512,39147],{"class":448},[147,116514,115078],{"class":157},[19,116516,116517],{},"计算新的观测和奖励。",[138,116519,116521],{"className":30652,"code":116520,"language":30654,"meta":143,"style":143},"dist = float(np.linalg.norm(tip - target))\n",[51,116522,116523],{"__ignoreMap":143},[147,116524,116525,116527,116529,116531,116533,116535],{"class":149,"line":150},[147,116526,111866],{"class":157},[147,116528,445],{"class":397},[147,116530,110067],{"class":448},[147,116532,115121],{"class":157},[147,116534,931],{"class":397},[147,116536,115126],{"class":157},[19,116538,116539],{},"计算末端到目标的距离，并转换成 Python float。",[138,116541,116542],{"className":30652,"code":113947,"language":30654,"meta":143,"style":143},[51,116543,116544,116556],{"__ignoreMap":143},[147,116545,116546,116548,116550,116552,116554],{"class":149,"line":150},[147,116547,113954],{"class":157},[147,116549,445],{"class":397},[147,116551,113959],{"class":157},[147,116553,1309],{"class":397},[147,116555,113964],{"class":448},[147,116557,116558,116560,116562,116564,116566,116568,116570],{"class":149,"line":312},[147,116559,113969],{"class":157},[147,116561,445],{"class":397},[147,116563,39147],{"class":448},[147,116565,113976],{"class":157},[147,116567,1984],{"class":397},[147,116569,39147],{"class":448},[147,116571,113983],{"class":157},[19,116573,116574],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[138,116576,116578],{"className":30652,"code":116577,"language":30654,"meta":143,"style":143},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[51,116579,116580,116593],{"__ignoreMap":143},[147,116581,116582,116585,116587,116589,116591],{"class":149,"line":150},[147,116583,116584],{"class":157},"info ",[147,116586,445],{"class":397},[147,116588,4722],{"class":157},[147,116590,115172],{"class":504},[147,116592,115175],{"class":157},[147,116594,116595,116597],{"class":149,"line":312},[147,116596,17319],{"class":397},[147,116598,115182],{"class":157},[19,116600,116601,116604],{},[51,116602,116603],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[138,116606,116608],{"className":30652,"code":116607,"language":30654,"meta":143,"style":143},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[51,116609,116610,116619],{"__ignoreMap":143},[147,116611,116612,116615,116617],{"class":149,"line":150},[147,116613,116614],{"class":157},"env ",[147,116616,445],{"class":397},[147,116618,115212],{"class":157},[147,116620,116621,116623,116625,116627,116629,116631,116633],{"class":149,"line":312},[147,116622,113670],{"class":157},[147,116624,445],{"class":397},[147,116626,115222],{"class":157},[147,116628,114836],{"class":5490},[147,116630,445],{"class":397},[147,116632,590],{"class":448},[147,116634,407],{"class":157},[19,116636,116637,116638,116641],{},"创建环境并重置。",[51,116639,116640],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[138,116643,116645],{"className":30652,"code":116644,"language":30654,"meta":143,"style":143},"action = env.action_space.sample()\n",[51,116646,116647],{"__ignoreMap":143},[147,116648,116649,116651,116653],{"class":149,"line":150},[147,116650,107712],{"class":157},[147,116652,445],{"class":397},[147,116654,115291],{"class":157},[19,116656,116657],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,116659,102588],{"id":102587},[19,116661,105754],{},[138,116663,116666],{"className":116664,"code":116665,"language":5461,"meta":143},[5459],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[51,116667,116665],{"__ignoreMap":143},[19,116669,116670],{},"这个环境已经具备强化学习环境的基本结构。",[19,116672,116673],{},"主函数里使用随机动作：",[138,116675,116676],{"className":30652,"code":116644,"language":30654,"meta":143,"style":143},[51,116677,116678],{"__ignoreMap":143},[147,116679,116680,116682,116684],{"class":149,"line":150},[147,116681,107712],{"class":157},[147,116683,445],{"class":397},[147,116685,115291],{"class":157},[19,116687,116688],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,116690,102620],{"id":102619},[350,116692,116693,116696,116702,116711,116720,116729,116735],{},[353,116694,116695],{},"运行程序。",[353,116697,116698,116699,28659],{},"确认 ",[51,116700,116701],{},"obs.shape == (10,)",[353,116703,111451,116704,116707,116708,28659],{},[51,116705,116706],{},"env.action_space","，应类似 ",[51,116709,116710],{},"Box(-1.0, 1.0, (2,), float32)",[353,116712,105855,116713,116716,116717,28659],{},[51,116714,116715],{},"self.max_steps = 10","，确认环境会更快 ",[51,116718,116719],{},"truncated=True",[353,116721,102683,116722,102686,116725,116728],{},[51,116723,116724],{},"terminated = dist \u003C 0.05",[51,116726,116727],{},"dist \u003C 0.2","，观察是否更容易结束。",[353,116730,102683,116731,116734],{},[51,116732,116733],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[353,116736,116737,116738,116740,116741,116744],{},"在 ",[51,116739,116603],{}," 里加入 ",[51,116742,116743],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,116746,102725],{"id":102724},[367,116748,116750],{"id":116749},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,116752,116753,116754,116756],{},"Gymnasium 的 ",[51,116755,107404],{}," 返回 5 个值:",[138,116758,116760],{"className":30652,"code":116759,"language":30654,"meta":143,"style":143},"obs, reward, terminated, truncated, info\n",[51,116761,116762],{"__ignoreMap":143},[147,116763,116764],{"class":149,"line":150},[147,116765,116759],{"class":157},[19,116767,116768],{},"不是旧 Gym 的 4 个值。",[367,116770,116772,116775],{"id":116771},"datactrl-action-维度错误",[51,116773,116774],{},"data.ctrl[:] = action"," 维度错误",[19,116777,102795],{},[138,116779,116781],{"className":30652,"code":116780,"language":30654,"meta":143,"style":143},"print(self.model.nu)\nprint(action.shape)\n",[51,116782,116783,116794],{"__ignoreMap":143},[147,116784,116785,116787,116789,116791],{"class":149,"line":150},[147,116786,30689],{"class":448},[147,116788,401],{"class":157},[147,116790,31097],{"class":448},[147,116792,116793],{"class":157},".model.nu)\n",[147,116795,116796,116798],{"class":149,"line":312},[147,116797,30689],{"class":448},[147,116799,116800],{"class":157},"(action.shape)\n",[19,116802,116803],{},"两者必须匹配。",[367,116805,116807],{"id":116806},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,116809,102734],{},[138,116811,116813],{"className":30652,"code":116812,"language":30654,"meta":143,"style":143},"mujoco.mj_forward(self.model, self.data)\n",[51,116814,116815],{"__ignoreMap":143},[147,116816,116817,116820,116822,116824,116826],{"class":149,"line":150},[147,116818,116819],{"class":157},"mujoco.mj_forward(",[147,116821,31097],{"class":448},[147,116823,114851],{"class":157},[147,116825,31097],{"class":448},[147,116827,114856],{"class":157},[367,116829,116831,116833],{"id":116830},"observation_space-维度和-obs-不一致",[51,116832,113870],{}," 维度和 obs 不一致",[19,116835,102847],{},[138,116837,116839],{"className":30652,"code":116838,"language":30654,"meta":143,"style":143},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[51,116840,116841,116851,116858],{"__ignoreMap":143},[147,116842,116843,116845,116847,116849],{"class":149,"line":150},[147,116844,111124],{"class":157},[147,116846,445],{"class":397},[147,116848,39147],{"class":448},[147,116850,115067],{"class":157},[147,116852,116853,116855],{"class":149,"line":312},[147,116854,30689],{"class":448},[147,116856,116857],{"class":157},"(obs.shape)\n",[147,116859,116860,116862,116864,116866],{"class":149,"line":1454},[147,116861,30689],{"class":448},[147,116863,401],{"class":157},[147,116865,31097],{"class":448},[147,116867,116868],{"class":157},".observation_space.shape)\n",[19,116870,116871],{},"两者必须一致。本章观测是：",[138,116873,116876],{"className":116874,"code":116875,"language":5461,"meta":143},[5459],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[51,116877,116875],{"__ignoreMap":143},[367,116879,116881],{"id":116880},"action-超过范围","action 超过范围",[19,116883,116884],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[138,116886,116887],{"className":30652,"code":116386,"language":30654,"meta":143,"style":143},[51,116888,116889],{"__ignoreMap":143},[147,116890,116891,116893,116895,116897,116899,116901,116903],{"class":149,"line":150},[147,116892,107712],{"class":157},[147,116894,445],{"class":397},[147,116896,107717],{"class":157},[147,116898,31097],{"class":448},[147,116900,114988],{"class":157},[147,116902,31097],{"class":448},[147,116904,114993],{"class":157},[19,116906,116907,116908,28659],{},"这能避免无效动作直接写入 ",[51,116909,101348],{},[367,116911,116913],{"id":116912},"忘记返回-info","忘记返回 info",[19,116915,116753,116916,101290,116918,116920],{},[51,116917,70329],{},[51,116919,107404],{}," 都会返回 info：",[138,116922,116923],{"className":30652,"code":113663,"language":30654,"meta":143,"style":143},[51,116924,116925,116933],{"__ignoreMap":143},[147,116926,116927,116929,116931],{"class":149,"line":150},[147,116928,113670],{"class":157},[147,116930,445],{"class":397},[147,116932,113675],{"class":157},[147,116934,116935,116937,116939],{"class":149,"line":312},[147,116936,113680],{"class":157},[147,116938,445],{"class":397},[147,116940,113685],{"class":157},[19,116942,116943,116944,28659],{},"即使暂时没有额外信息，也返回 ",[51,116945,32733],{},[14,116947,116949],{"id":116948},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,116951,116952],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[350,116954,116955,116958,116961,116964,116967,116970],{},[353,116956,116957],{},"更稳定的 reward。",[353,116959,116960],{},"合理的 episode 长度。",[353,116962,116963],{},"可重复的随机目标采样。",[353,116965,116966],{},"render 接口。",[353,116968,116969],{},"环境注册代码。",[353,116971,116972],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,116974,116975],{},"如果只是自己写训练循环，最小形式是：",[138,116977,116979],{"className":30652,"code":116978,"language":30654,"meta":143,"style":143},"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",[51,116980,116981,116989,117005,117009,117025,117034,117043,117053],{"__ignoreMap":143},[147,116982,116983,116985,116987],{"class":149,"line":150},[147,116984,116614],{"class":157},[147,116986,445],{"class":397},[147,116988,115212],{"class":157},[147,116990,116991,116993,116995,116997,116999,117001,117003],{"class":149,"line":312},[147,116992,113670],{"class":157},[147,116994,445],{"class":397},[147,116996,115222],{"class":157},[147,116998,114836],{"class":5490},[147,117000,445],{"class":397},[147,117002,590],{"class":448},[147,117004,407],{"class":157},[147,117006,117007],{"class":149,"line":1454},[147,117008,2674],{"emptyLinePlaceholder":324},[147,117010,117011,117013,117015,117017,117019,117021,117023],{"class":149,"line":1469},[147,117012,3299],{"class":397},[147,117014,101773],{"class":157},[147,117016,26317],{"class":397},[147,117018,32717],{"class":448},[147,117020,401],{"class":157},[147,117022,6684],{"class":448},[147,117024,31060],{"class":157},[147,117026,117027,117030,117032],{"class":149,"line":1475},[147,117028,117029],{"class":157},"    action ",[147,117031,445],{"class":397},[147,117033,115291],{"class":157},[147,117035,117036,117039,117041],{"class":149,"line":1489},[147,117037,117038],{"class":157},"    obs, reward, terminated, truncated, info ",[147,117040,445],{"class":397},[147,117042,113685],{"class":157},[147,117044,117045,117047,117049,117051],{"class":149,"line":1495},[147,117046,3375],{"class":397},[147,117048,115357],{"class":157},[147,117050,115360],{"class":397},[147,117052,115363],{"class":157},[147,117054,117055,117058,117060],{"class":149,"line":1586},[147,117056,117057],{"class":157},"        obs, info ",[147,117059,445],{"class":397},[147,117061,113675],{"class":157},[14,117063,117065],{"id":117064},"_9本章小结","9.本章小结",[19,117067,117068],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[138,117070,117073],{"className":117071,"code":117072,"language":5461,"meta":143},[5459],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[51,117074,117072],{"__ignoreMap":143},[19,117076,117077],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[308,117079,117080],{},"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":143,"searchDepth":312,"depth":312,"links":117082},[117083,117084,117085,117092,117096,117097,117098,117108,117109],{"id":100918,"depth":312,"text":100919},{"id":101041,"depth":312,"text":101042},{"id":101316,"depth":312,"text":101317,"children":117086},[117087,117089,117091],{"id":113894,"depth":1454,"text":117088},"terminated 和 truncated 的区别",{"id":113997,"depth":1454,"text":117090},"observation_space 和 action_space",{"id":114124,"depth":1454,"text":114125},{"id":101524,"depth":312,"text":101525,"children":117093},[117094,117095],{"id":101844,"depth":1454,"text":101844},{"id":101980,"depth":1454,"text":101980},{"id":102587,"depth":312,"text":102588},{"id":102619,"depth":312,"text":102620},{"id":102724,"depth":312,"text":102725,"children":117099},[117100,117101,117103,117104,117106,117107],{"id":116749,"depth":1454,"text":116750},{"id":116771,"depth":1454,"text":117102},"data.ctrl[:] = action 维度错误",{"id":116806,"depth":1454,"text":116807},{"id":116830,"depth":1454,"text":117105},"observation_space 维度和 obs 不一致",{"id":116880,"depth":1454,"text":116881},{"id":116912,"depth":1454,"text":116913},{"id":116948,"depth":312,"text":116949},{"id":117064,"depth":312,"text":117065},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113647,"description":143},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":117116,"title":117117,"body":117118,"description":117541,"extension":322,"meta":117542,"navigation":324,"path":117543,"seo":117544,"stem":117545,"__hash__":117546},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":117119,"toc":117531},[117120,117124,117127,117130,117150,117156,117162,117172,117175,117178,117198,117201,117205,117208,117214,117217,117231,117234,117237,117311,117314,117320,117323,117346,117349,117399,117402,117408,117411,117414,117417,117436,117439,117445,117448,117451,117454,117474,117477,117480,117483,117528],[10,117121,117123],{"id":117122},"mujoco-学习","MuJoCo 学习",[19,117125,117126],{},"初版",[19,117128,117129],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[350,117131,117132,117135,117138,117147],{},[353,117133,117134],{},"MuJoCo 模型文件在描述什么。",[353,117136,117137],{},"Python 代码怎样读取和推进仿真。",[353,117139,117140,611,117142,611,117144,117146],{},[51,117141,104300],{},[51,117143,104630],{},[51,117145,104633],{}," 这些数组为什么重要。",[353,117148,117149],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,117151,117152,117153,117155],{},"默认环境为 Fedora 44、Python >= 3.10、",[51,117154,101299],{}," 官方 Python bindings。",[19,117157,117158,117159,117161],{},"注意：本文禁止使用 ",[51,117160,101284],{},"。所有示例均使用：",[138,117163,117164],{"className":30652,"code":101850,"language":30654,"meta":143,"style":143},[51,117165,117166],{"__ignoreMap":143},[147,117167,117168,117170],{"class":149,"line":150},[147,117169,30666],{"class":397},[147,117171,101573],{"class":157},[14,117173,117174],{"id":117174},"适合谁阅读",[19,117176,117177],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[350,117179,117180,117183,117186,117189],{},[353,117181,117182],{},"没学过 MuJoCo，只会一点 Python。",[353,117184,117185],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[353,117187,117188],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[353,117190,117191,117192,117194,117195,117197],{},"以前接触过 ",[51,117193,101284],{},"，现在想迁移到官方 ",[51,117196,101293],{}," Python bindings。",[19,117199,117200],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,117202,117204],{"id":117203},"mujoco-到底是什么","MuJoCo 到底是什么",[19,117206,117207],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[138,117209,117212],{"className":117210,"code":117211,"language":5461,"meta":143},[5459],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[51,117213,117211],{"__ignoreMap":143},[19,117215,117216],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[350,117218,117219,117222,117225,117228],{},[353,117220,117221],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[353,117223,117224],{},"快速测试控制算法，不必一开始就上真实机器人。",[353,117226,117227],{},"生成强化学习环境。",[353,117229,117230],{},"采集状态、动作、图像、奖励等训练数据。",[14,117232,117233],{"id":117233},"学习前的心智模型",[19,117235,117236],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[537,117238,117239,117251],{},[540,117240,117241],{},[543,117242,117243,117246,117249],{},[546,117244,117245],{"align":24009},"部分",[546,117247,117248],{"align":24009},"负责什么",[546,117250,21460],{"align":24009},[583,117252,117253,117264,117276,117288,117300],{},[543,117254,117255,117258,117261],{},[588,117256,117257],{"align":24009},"MJCF XML",[588,117259,117260],{"align":24009},"定义世界和机器人结构",[588,117262,117263],{"align":24009},"地面、盒子、关节、电机、摄像头",[543,117265,117266,117270,117273],{},[588,117267,117268],{"align":24009},[51,117269,100981],{},[588,117271,117272],{"align":24009},"编译后的静态模型",[588,117274,117275],{"align":24009},"有几个关节、有几个电机、时间步长是多少",[543,117277,117278,117282,117285],{},[588,117279,117280],{"align":24009},[51,117281,100991],{},[588,117283,117284],{"align":24009},"运行中的动态状态",[588,117286,117287],{"align":24009},"当前时间、位置、速度、电机输入",[543,117289,117290,117294,117297],{},[588,117291,117292],{"align":24009},[51,117293,101487],{},[588,117295,117296],{"align":24009},"推进一步物理仿真",[588,117298,117299],{"align":24009},"根据重力、力、碰撞更新状态",[543,117301,117302,117305,117308],{},[588,117303,117304],{"align":24009},"Viewer \u002F Renderer",[588,117306,117307],{"align":24009},"把仿真显示出来",[588,117309,117310],{"align":24009},"打开窗口或保存图片",[19,117312,117313],{},"一句话总结：",[138,117315,117318],{"className":117316,"code":117317,"language":5461,"meta":143},[5459],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[51,117319,117317],{"__ignoreMap":143},[19,117321,117322],{},"参考来源：",[1406,117324,117325,117332,117339],{},[353,117326,117327,117328],{},"MuJoCo Python 官方文档：",[637,117329,117330],{"href":117330,"rel":117331},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[24138],[353,117333,117334,117335],{},"MuJoCo XML Reference：",[637,117336,117337],{"href":117337,"rel":117338},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[24138],[353,117340,117341,117342],{},"MuJoCo Overview：",[637,117343,117344],{"href":117344,"rel":117345},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[24138],[14,117347,117348],{"id":117348},"章节目录",[350,117350,117351,117357,117363,117369,117375,117381,117387,117393],{},[353,117352,117353],{},[637,117354,117356],{"href":117355},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[353,117358,117359],{},[637,117360,117362],{"href":117361},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[353,117364,117365],{},[637,117366,117368],{"href":117367},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[353,117370,117371],{},[637,117372,117374],{"href":117373},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[353,117376,117377],{},[637,117378,117380],{"href":117379},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[353,117382,117383],{},[637,117384,117386],{"href":117385},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[353,117388,117389],{},[637,117390,117392],{"href":117391},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[353,117394,117395],{},[637,117396,117398],{"href":117397},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,117400,117401],{"id":117401},"推荐学习路线",[138,117403,117406],{"className":117404,"code":117405,"language":5461,"meta":143},[5459],"环境安装\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",[51,117407,117405],{"__ignoreMap":143},[19,117409,117410],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,117412,117413],{"id":117413},"建议的目录结构",[19,117415,117416],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[138,117418,117420],{"className":24095,"code":117419,"language":24097,"meta":143,"style":143},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[51,117421,117422,117430],{"__ignoreMap":143},[147,117423,117424,117426,117428],{"class":149,"line":150},[147,117425,101538],{"class":2237},[147,117427,29490],{"class":448},[147,117429,101543],{"class":504},[147,117431,117432,117434],{"class":149,"line":312},[147,117433,101548],{"class":448},[147,117435,101543],{"class":504},[19,117437,117438],{},"每一章的代码都单独保存：",[138,117440,117443],{"className":117441,"code":117442,"language":5461,"meta":143},[5459],"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",[51,117444,117442],{"__ignoreMap":143},[19,117446,117447],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,117449,117450],{"id":117450},"学习方法",[19,117452,117453],{},"每章建议按这个顺序操作：",[350,117455,117456,117459,117462,117465,117468,117471],{},[353,117457,117458],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[353,117460,117461],{},"复制最小可运行代码，保存成指定文件。",[353,117463,117464],{},"运行代码，确认没有报错。",[353,117466,117467],{},"对照“运行结果说明”理解输出。",[353,117469,117470],{},"做“验证步骤”，主动改一两个参数。",[353,117472,117473],{},"遇到报错先看“常见错误与解决方案”。",[19,117475,117476],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,117478,117479],{"id":117479},"全局排错顺序",[19,117481,117482],{},"遇到问题时，按下面顺序查：",[350,117484,117485,117491,117497,117502,117505,117508,117515,117525],{},[353,117486,117487,117488],{},"Python 环境是否激活：",[51,117489,117490],{},"which python",[353,117492,117493,117494],{},"MuJoCo 是否能导入：",[51,117495,117496],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[353,117498,117499,117500],{},"是否误装了 ",[51,117501,101284],{},[353,117503,117504],{},"XML 标签是否闭合、属性是否拼写正确",[353,117506,117507],{},"actuator 引用的 joint 名字是否存在",[353,117509,117510,117512,117513],{},[51,117511,101348],{}," 的长度是否等于 ",[51,117514,102430],{},[353,117516,105855,117517,82811,117519,117521,117522],{},[51,117518,104300],{},[51,117520,104630],{}," 后是否调用了 ",[51,117523,117524],{},"mujoco.mj_forward",[353,117526,117527],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[308,117529,117530],{},"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":143,"searchDepth":312,"depth":312,"links":117532},[117533,117534,117535,117536,117537,117538,117539,117540],{"id":117174,"depth":312,"text":117174},{"id":117203,"depth":312,"text":117204},{"id":117233,"depth":312,"text":117233},{"id":117348,"depth":312,"text":117348},{"id":117401,"depth":312,"text":117401},{"id":117413,"depth":312,"text":117413},{"id":117450,"depth":312,"text":117450},{"id":117479,"depth":312,"text":117479},"仿真搭建。",{"category":23651},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":117117,"description":117541},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117548,"title":117549,"body":117550,"description":321,"extension":322,"meta":118005,"navigation":324,"path":118006,"seo":118007,"stem":118008,"__hash__":118009},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117551,"toc":118003},[117552,117555,117558,117564,118000],[10,117553,117549],{"id":117554},"_1-最常用的基本操作更新",[19,117556,117557],{},"装linux系统教程：",[19,117559,117560],{},[637,117561,117562],{"href":117562,"rel":117563},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[24138],[138,117565,117569],{"className":117566,"code":117567,"language":117568,"meta":143,"style":143},"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",[51,117570,117571,117576,117581,117590,117595,117604,117609,117629,117634,117645,117650,117659,117664,117692,117697,117716,117721,117740,117744,117749,117765,117769,117774,117804,117808,117813,117829,117833,117838,117853,117857,117862,117878,117882,117887,117899,117911,117915,117920,117937,117941,117946,117964,117968,117973,117982,117986,117991],{"__ignoreMap":143},[147,117572,117573],{"class":149,"line":150},[147,117574,117575],{"class":458},"#更新相关的知识\n",[147,117577,117578],{"class":149,"line":312},[147,117579,117580],{"class":458},"# 更新软件包列表（从服务器获取最新软件信息）\n",[147,117582,117583,117585,117588],{"class":149,"line":1454},[147,117584,24850],{"class":2237},[147,117586,117587],{"class":504}," apt",[147,117589,26516],{"class":504},[147,117591,117592],{"class":149,"line":1469},[147,117593,117594],{"class":458},"# 升级所有可更新的软件包（不删除旧包）\n",[147,117596,117597,117599,117601],{"class":149,"line":1475},[147,117598,24850],{"class":2237},[147,117600,117587],{"class":504},[147,117602,117603],{"class":504}," upgrade\n",[147,117605,117606],{"class":149,"line":1489},[147,117607,117608],{"class":458},"#更新和升级软件包\n",[147,117610,117611,117613,117615,117618,117620,117622,117624,117627],{"class":149,"line":1495},[147,117612,24850],{"class":2237},[147,117614,117587],{"class":504},[147,117616,117617],{"class":504}," update",[147,117619,26464],{"class":157},[147,117621,24850],{"class":2237},[147,117623,117587],{"class":504},[147,117625,117626],{"class":504}," upgrade",[147,117628,101253],{"class":448},[147,117630,117631],{"class":149,"line":1586},[147,117632,117633],{"class":458},"#列出可更新的软件包及版本信息\n",[147,117635,117636,117639,117642],{"class":149,"line":1592},[147,117637,117638],{"class":2237},"apt",[147,117640,117641],{"class":504}," list",[147,117643,117644],{"class":448}," --upgradable\n",[147,117646,117647],{"class":149,"line":1604},[147,117648,117649],{"class":458},"#彻底升级（处理依赖关系，可能删除旧包）\n",[147,117651,117652,117654,117656],{"class":149,"line":1886},[147,117653,24850],{"class":2237},[147,117655,117587],{"class":504},[147,117657,117658],{"class":504}," full-upgrade\n",[147,117660,117661],{"class":149,"line":1891},[147,117662,117663],{"class":458},"#设置指定版本\n",[147,117665,117666,117668,117670,117672,117674,117677,117679,117681,117683,117685,117688,117690],{"class":149,"line":1897},[147,117667,24850],{"class":2237},[147,117669,117587],{"class":504},[147,117671,24107],{"class":504},[147,117673,29176],{"class":397},[147,117675,117676],{"class":504},"package_nam",[147,117678,474],{"class":157},[147,117680,1359],{"class":397},[147,117682,445],{"class":504},[147,117684,1309],{"class":397},[147,117686,117687],{"class":504},"version_numbe",[147,117689,1069],{"class":157},[147,117691,51580],{"class":397},[147,117693,117694],{"class":149,"line":1902},[147,117695,117696],{"class":458},"#只安装软件包不升级\n",[147,117698,117699,117701,117703,117705,117707,117709,117711,117713],{"class":149,"line":1916},[147,117700,24850],{"class":2237},[147,117702,117587],{"class":504},[147,117704,24107],{"class":504},[147,117706,29176],{"class":397},[147,117708,117676],{"class":504},[147,117710,474],{"class":157},[147,117712,1359],{"class":397},[147,117714,117715],{"class":448}," --no-upgrade\n",[147,117717,117718],{"class":149,"line":1921},[147,117719,117720],{"class":458},"#只升级，不存在就不安装\n",[147,117722,117723,117725,117727,117729,117731,117733,117735,117737],{"class":149,"line":1927},[147,117724,24850],{"class":2237},[147,117726,117587],{"class":504},[147,117728,24107],{"class":504},[147,117730,29176],{"class":397},[147,117732,117676],{"class":504},[147,117734,474],{"class":157},[147,117736,1359],{"class":397},[147,117738,117739],{"class":448}," --only-upgrade\n",[147,117741,117742],{"class":149,"line":1948},[147,117743,2674],{"emptyLinePlaceholder":324},[147,117745,117746],{"class":149,"line":1953},[147,117747,117748],{"class":458},"#安装指定的软件命令\n",[147,117750,117751,117753,117755,117757,117759,117761,117763],{"class":149,"line":1967},[147,117752,24850],{"class":2237},[147,117754,117587],{"class":504},[147,117756,24107],{"class":504},[147,117758,29176],{"class":397},[147,117760,117676],{"class":504},[147,117762,474],{"class":157},[147,117764,51580],{"class":397},[147,117766,117767],{"class":149,"line":1972},[147,117768,2674],{"emptyLinePlaceholder":324},[147,117770,117771],{"class":149,"line":2001},[147,117772,117773],{"class":458},"#安装多个软件包\n",[147,117775,117776,117778,117780,117782,117784,117787,117790,117792,117794,117797,117799,117801],{"class":149,"line":2006},[147,117777,24850],{"class":2237},[147,117779,117587],{"class":504},[147,117781,24107],{"class":504},[147,117783,29176],{"class":397},[147,117785,117786],{"class":504},"package_",[147,117788,117789],{"class":397},"1>",[147,117791,29176],{"class":397},[147,117793,117786],{"class":504},[147,117795,117796],{"class":397},"2>",[147,117798,29176],{"class":397},[147,117800,117786],{"class":504},[147,117802,117803],{"class":397},"3>\n",[147,117805,117806],{"class":149,"line":2023},[147,117807,2674],{"emptyLinePlaceholder":324},[147,117809,117810],{"class":149,"line":2028},[147,117811,117812],{"class":458},"#更新指定的软件命令\n",[147,117814,117815,117817,117819,117821,117823,117825,117827],{"class":149,"line":2033},[147,117816,24850],{"class":2237},[147,117818,117587],{"class":504},[147,117820,117617],{"class":504},[147,117822,29176],{"class":397},[147,117824,117676],{"class":504},[147,117826,474],{"class":157},[147,117828,51580],{"class":397},[147,117830,117831],{"class":149,"line":2038},[147,117832,2674],{"emptyLinePlaceholder":324},[147,117834,117835],{"class":149,"line":2052},[147,117836,117837],{"class":458},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[147,117839,117840,117842,117845,117847,117849,117851],{"class":149,"line":2057},[147,117841,117638],{"class":2237},[147,117843,117844],{"class":504}," show",[147,117846,29176],{"class":397},[147,117848,117676],{"class":504},[147,117850,474],{"class":157},[147,117852,51580],{"class":397},[147,117854,117855],{"class":149,"line":2851},[147,117856,2674],{"emptyLinePlaceholder":324},[147,117858,117859],{"class":149,"line":2865},[147,117860,117861],{"class":458},"#删除软件包命令\n",[147,117863,117864,117866,117868,117870,117872,117874,117876],{"class":149,"line":2873},[147,117865,24850],{"class":2237},[147,117867,117587],{"class":504},[147,117869,26353],{"class":504},[147,117871,29176],{"class":397},[147,117873,117676],{"class":504},[147,117875,474],{"class":157},[147,117877,51580],{"class":397},[147,117879,117880],{"class":149,"line":2878},[147,117881,2674],{"emptyLinePlaceholder":324},[147,117883,117884],{"class":149,"line":2884},[147,117885,117886],{"class":458},"# 清理旧版本和缓存（释放磁盘空间）\n",[147,117888,117889,117891,117893,117896],{"class":149,"line":2890},[147,117890,24850],{"class":2237},[147,117892,117587],{"class":504},[147,117894,117895],{"class":504}," autoremove",[147,117897,117898],{"class":458},"  # 删除不再需要的依赖和库文件\n",[147,117900,117901,117903,117905,117908],{"class":149,"line":2895},[147,117902,24850],{"class":2237},[147,117904,117587],{"class":504},[147,117906,117907],{"class":504}," clean",[147,117909,117910],{"class":458},"       # 清理下载的缓存包\n",[147,117912,117913],{"class":149,"line":8222},[147,117914,2674],{"emptyLinePlaceholder":324},[147,117916,117917],{"class":149,"line":8246},[147,117918,117919],{"class":458},"#移除软件包及配置文件\n",[147,117921,117922,117924,117926,117929,117931,117933,117935],{"class":149,"line":8251},[147,117923,24850],{"class":2237},[147,117925,117587],{"class":504},[147,117927,117928],{"class":504}," purge",[147,117930,29176],{"class":397},[147,117932,117676],{"class":504},[147,117934,474],{"class":157},[147,117936,51580],{"class":397},[147,117938,117939],{"class":149,"line":8257},[147,117940,2674],{"emptyLinePlaceholder":324},[147,117942,117943],{"class":149,"line":8284},[147,117944,117945],{"class":458},"#查找软件包命令\n",[147,117947,117948,117950,117952,117955,117957,117960,117962],{"class":149,"line":8289},[147,117949,24850],{"class":2237},[147,117951,117587],{"class":504},[147,117953,117954],{"class":504}," search",[147,117956,29176],{"class":397},[147,117958,117959],{"class":504},"keywor",[147,117961,713],{"class":157},[147,117963,51580],{"class":397},[147,117965,117966],{"class":149,"line":8295},[147,117967,2674],{"emptyLinePlaceholder":324},[147,117969,117970],{"class":149,"line":8307},[147,117971,117972],{"class":458},"#列出所有已安装的包\n",[147,117974,117975,117977,117979],{"class":149,"line":8319},[147,117976,117638],{"class":2237},[147,117978,117641],{"class":504},[147,117980,117981],{"class":448}," --installed\n",[147,117983,117984],{"class":149,"line":8331},[147,117985,2674],{"emptyLinePlaceholder":324},[147,117987,117988],{"class":149,"line":9990},[147,117989,117990],{"class":458},"#列出所有已安装的包的版本信息\n",[147,117992,117993,117995,117997],{"class":149,"line":10015},[147,117994,117638],{"class":2237},[147,117996,117641],{"class":504},[147,117998,117999],{"class":448}," --all-versions\n",[308,118001,118002],{},"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":143,"searchDepth":312,"depth":312,"links":118004},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117549,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":118011,"title":118012,"body":118013,"description":321,"extension":322,"meta":118754,"navigation":324,"path":118755,"seo":118756,"stem":118757,"__hash__":118758},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":118014,"toc":118741},[118015,118018,118022,118025,118031,118035,118039,118045,118050,118055,118060,118065,118070,118073,118076,118079,118082,118086,118089,118094,118097,118102,118105,118110,118117,118120,118123,118126,118129,118132,118143,118147,118151,118156,118161,118165,118170,118174,118179,118183,118187,118192,118195,118240,118245,118249,118253,118258,118264,118269,118279,118284,118294,118299,118304,118331,118335,118338,118343,118346,118371,118375,118380,118383,118388,118393,118413,118418,118421,118436,118440,118493,118496,118501,118505,118508,118523,118526,118529,118534,118538,118542,118545,118549,118553,118556,118561,118566,118570,118577,118585,118588,118595,118600,118605,118608,118613,118620,118625,118632,118636,118638,118643,118647,118650,118653,118658,118661,118666,118669,118674,118679,118684,118688,118693,118697,118738],[10,118016,118012],{"id":118017},"_2-linux装机教程",[14,118019,118021],{"id":118020},"_21-实体机","2.1 实体机",[19,118023,118024],{},"使用清华源：（Ubuntu24.04）",[19,118026,118027],{},[637,118028,118029],{"href":118029,"rel":118030},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[24138],[14,118032,118034],{"id":118033},"_22-普通虚拟机","2.2 普通虚拟机",[367,118036,118038],{"id":118037},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,118040,118041],{},[637,118042,118043],{"href":118043,"rel":118044},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[24138],[19,118046,118047],{},[29,118048],{"alt":143,"src":118049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,118051,118052],{},[29,118053],{"alt":143,"src":118054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,118056,118057],{},[29,118058],{"alt":143,"src":118059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,118061,118062],{},[29,118063],{"alt":143,"src":118064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,118066,118067],{},[29,118068],{"alt":143,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,118071,118072],{},"内存4G（4096MB）；",[19,118074,118075],{},"CPU给4个核；",[19,118077,118078],{},"硬盘动态分配60G；",[19,118080,118081],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[367,118083,118085],{"id":118084},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,118087,118088],{},"按照1.1的步骤下载Ubuntu",[19,118090,118091],{},[29,118092],{"alt":143,"src":118093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,118095,118096],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,118098,118099],{},[29,118100],{"alt":143,"src":118101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,118103,118104],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,118106,118107],{},[29,118108],{"alt":143,"src":118109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,118111,118112,118113,118116],{},"选择“正常安装”(找不到都用Alt+F7)， ",[234,118114,118115],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,118118,118119],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,118121,118122],{},"将改动写入磁盘吗 继续",[19,118124,118125],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,118127,118128],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,118130,118131],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,118133,118134,118135,118138,118139,118142],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[234,118136,118137],{},"除了"," 选不发送系统信息与不升级之外， ",[234,118140,118141],{},"其它"," 都跳过或前进）",[367,118144,118146],{"id":118145},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22271,118148,118150],{"id":118149},"_2231-全屏","2.2.3.1 全屏",[19,118152,118153],{},[29,118154],{"alt":143,"src":118155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,118157,118158],{},[29,118159],{"alt":143,"src":118160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22271,118162,118164],{"id":118163},"_2232-文件交换","2.2.3.2 文件交换",[19,118166,118167],{},[29,118168],{"alt":143,"src":118169},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22271,118171,118173],{"id":118172},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,118175,118176],{},[29,118177],{"alt":143,"src":118178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,118180,118182],{"id":118181},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[367,118184,118186],{"id":118185},"_231-简介与优缺点","2.3.1 简介与优缺点",[350,118188,118189],{},[353,118190,118191],{},"什么情况下推荐？",[19,118193,118194],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[350,118196,118197],{"start":312},[353,118198,118199,118200],{},"优缺点：",[350,118201,118202,118232],{},[353,118203,118204,118205],{},"优点：",[350,118206,118207,118210,118217,118220,118223,118226,118229],{},[353,118208,118209],{},"WSL2是最好的Linux发行版;(bushi)",[353,118211,118212,118213,118216],{},"性能损耗极低。且比在Windows上跑深度性能 ",[234,118214,118215],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[353,118218,118219],{},"非常方便调用USB设备，可以USB直通;",[353,118221,118222],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[353,118224,118225],{},"非常方便Win与WSL2互相传文件等协同操作;",[353,118227,118228],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[353,118230,118231],{},"非常方便使用Windows的VScode远程开发;",[353,118233,118234,118235],{},"缺点：",[350,118236,118237],{},[353,118238,118239],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,118241,118242],{},[29,118243],{"alt":143,"src":118244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[367,118246,118248],{"id":118247},"_232-安装教程","2.3.2 安装教程",[22271,118250,118252],{"id":118251},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[350,118254,118255],{},[353,118256,118257],{},"方法一(图形界面)",[19,118259,118260,118261,24892],{},"用Win+R输入",[51,118262,118263],{},"appwiz.cpl",[19,118265,118266],{},[29,118267],{"alt":143,"src":118268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,118270,118271,118272,118275,118276,26747],{},"点击OK进入 ",[234,118273,118274],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[234,118277,118278],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,118280,118281],{},[29,118282],{"alt":143,"src":118283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,118285,118286,118287,101290,118290,118293],{},"选择 ",[234,118288,118289],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[234,118291,118292],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,118295,118296],{},[29,118297],{"alt":143,"src":118298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[350,118300,118301],{"start":312},[353,118302,118303],{},"方法二(命令行)",[138,118305,118309],{"className":118306,"code":118307,"language":118308,"meta":143,"style":143},"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",[51,118310,118311,118316,118321,118326],{"__ignoreMap":143},[147,118312,118313],{"class":149,"line":150},[147,118314,118315],{},"# 开启 Linux 子系统\n",[147,118317,118318],{"class":149,"line":312},[147,118319,118320],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[147,118322,118323],{"class":149,"line":1454},[147,118324,118325],{},"# 开启虚拟机平台\n",[147,118327,118328],{"class":149,"line":1469},[147,118329,118330],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22271,118332,118334],{"id":118333},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,118336,118337],{},"用管理员权限打开powershell",[19,118339,118340],{},[29,118341],{"alt":143,"src":118342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,118344,118345],{},"升级WSL并设置默认版本为WSL2",[138,118347,118349],{"className":118306,"code":118348,"language":118308,"meta":143,"style":143},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[51,118350,118351,118356,118361,118366],{"__ignoreMap":143},[147,118352,118353],{"class":149,"line":150},[147,118354,118355],{},"# 更新 wsl\n",[147,118357,118358],{"class":149,"line":312},[147,118359,118360],{},"wsl --update\n",[147,118362,118363],{"class":149,"line":1454},[147,118364,118365],{},"# 将 wsl 版本设置为 wsl2\n",[147,118367,118368],{"class":149,"line":1469},[147,118369,118370],{},"wsl --set-default-version 2\n",[22271,118372,118374],{"id":118373},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[350,118376,118377],{},[353,118378,118379],{},"方式一(商店下载)",[19,118381,118382],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,118384,118385],{},[29,118386],{"alt":143,"src":118387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[350,118389,118390],{"start":312},[353,118391,118392],{},"方式二(命令行安装)",[138,118394,118396],{"className":118306,"code":118395,"language":118308,"meta":143,"style":143},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[51,118397,118398,118403,118408],{"__ignoreMap":143},[147,118399,118400],{"class":149,"line":150},[147,118401,118402],{},"# 列出可安装的 Linux 版本\n",[147,118404,118405],{"class":149,"line":312},[147,118406,118407],{},"#（需要科学手段）\n",[147,118409,118410],{"class":149,"line":1454},[147,118411,118412],{},"wsl --list --online\n",[19,118414,118415],{},[29,118416],{"alt":143,"src":118417},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,118419,118420],{},"选择对应发行版并安装",[138,118422,118424],{"className":118306,"code":118423,"language":118308,"meta":143,"style":143},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[51,118425,118426,118431],{"__ignoreMap":143},[147,118427,118428],{"class":149,"line":150},[147,118429,118430],{},"# Ubuntu安装完毕后需要重启系统\n",[147,118432,118433],{"class":149,"line":312},[147,118434,118435],{},"wsl --install -d Ubuntu-24.04\n",[22271,118437,118439],{"id":118438},"_2324-查看系统状态","2.3.2.4 查看系统状态",[138,118441,118443],{"className":118306,"code":118442,"language":118308,"meta":143,"style":143},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[51,118444,118445,118450,118455,118460,118465,118469,118473,118478,118483,118488],{"__ignoreMap":143},[147,118446,118447],{"class":149,"line":150},[147,118448,118449],{},"# 查看 wsl\n",[147,118451,118452],{"class":149,"line":312},[147,118453,118454],{},"wsl -l\n",[147,118456,118457],{"class":149,"line":1454},[147,118458,118459],{},"# 查看 wsl 运行版本或模式\n",[147,118461,118462],{"class":149,"line":1469},[147,118463,118464],{},"wsl -l -v\n",[147,118466,118467],{"class":149,"line":1475},[147,118468,2674],{"emptyLinePlaceholder":324},[147,118470,118471],{"class":149,"line":1489},[147,118472,2674],{"emptyLinePlaceholder":324},[147,118474,118475],{"class":149,"line":1495},[147,118476,118477],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[147,118479,118480],{"class":149,"line":1586},[147,118481,118482],{},"wsl --set-version \u003Cdistro> 2\n",[147,118484,118485],{"class":149,"line":1592},[147,118486,118487],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[147,118489,118490],{"class":149,"line":1604},[147,118491,118492],{},"wsl --unregister \u003Cdistro>\n",[19,118494,118495],{},"输出Version为2即正常",[19,118497,118498],{},[29,118499],{"alt":143,"src":118500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22271,118502,118504],{"id":118503},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,118506,118507],{},"直接在Powershell里输入wsl命令进入子系统",[138,118509,118511],{"className":118306,"code":118510,"language":118308,"meta":143,"style":143},"# 进入子系统\nwsl\n",[51,118512,118513,118518],{"__ignoreMap":143},[147,118514,118515],{"class":149,"line":150},[147,118516,118517],{},"# 进入子系统\n",[147,118519,118520],{"class":149,"line":312},[147,118521,118522],{},"wsl\n",[19,118524,118525],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,118527,118528],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,118530,118531],{},[29,118532],{"alt":143,"src":118533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[367,118535,118537],{"id":118536},"_233-配置各种环境","2.3.3 配置各种环境",[22271,118539,118541],{"id":118540},"_2331-换源","2.3.3.1 换源",[19,118543,118544],{},"(同实体机LINUX，往下找教程)",[22271,118546,118548],{"id":118547},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[23183,118550,118552],{"id":118551},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,118554,118555],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,118557,118558],{},[29,118559],{"alt":143,"src":118560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,118562,118563],{},[29,118564],{"alt":143,"src":118565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[23183,118567,118569],{"id":118568},"_23322-cuda","2.3.3.2.2 CUDA",[19,118571,118572,118573],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[637,118574,118575],{"href":118575,"rel":118576},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[24138],[19,118578,118579,118582],{},[29,118580],{"alt":143,"src":118581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[29,118583],{"alt":143,"src":118584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,118586,118587],{},"在下方的网站，选择合适的版本。",[19,118589,118590,118591],{},"WSL2 专属 CUDA 指南：",[637,118592,118593],{"href":118593,"rel":118594},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[24138],[19,118596,118597],{},[234,118598,118599],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,118601,118602],{},[29,118603],{"alt":143,"src":118604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,118606,118607],{},"挨行敲一遍",[19,118609,118610],{},[29,118611],{"alt":143,"src":118612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,118614,118615,118616,118619],{},"敲完后，输入",[51,118617,118618],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,118621,118622],{},[29,118623],{"alt":143,"src":118624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,118626,118627,118628,118631],{},"（请详看下方教程的",[234,118629,118630],{},"安装CUDA的配置环境来看","如何配置环境）",[23183,118633,118635],{"id":118634},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,118637,118544],{},[19,118639,118640],{},[29,118641],{"alt":143,"src":118642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22271,118644,118646],{"id":118645},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,118648,118649],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,118651,118652],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,118654,118655],{},[29,118656],{"alt":143,"src":118657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,118659,118660],{},"连接WSL2",[19,118662,118663],{},[29,118664],{"alt":143,"src":118665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,118667,118668],{},"远程开发成功。",[19,118670,118671],{},[29,118672],{"alt":143,"src":118673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,118675,118676],{},[29,118677],{"alt":143,"src":118678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,118680,118681],{},[29,118682],{"alt":143,"src":118683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22271,118685,118687],{"id":118686},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,118689,118690],{},[29,118691],{"alt":143,"src":118692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22271,118694,118696],{"id":118695},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[138,118698,118700],{"className":117566,"code":118699,"language":117568,"meta":143,"style":143},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[51,118701,118702,118710,118718,118729,118733],{"__ignoreMap":143},[147,118703,118704,118706,118708],{"class":149,"line":150},[147,118705,24850],{"class":2237},[147,118707,117587],{"class":504},[147,118709,26516],{"class":504},[147,118711,118712,118714,118716],{"class":149,"line":312},[147,118713,24850],{"class":2237},[147,118715,117587],{"class":504},[147,118717,117603],{"class":504},[147,118719,118720,118722,118724,118726],{"class":149,"line":1454},[147,118721,24850],{"class":2237},[147,118723,117587],{"class":504},[147,118725,24107],{"class":504},[147,118727,118728],{"class":504}," mesa-utils\n",[147,118730,118731],{"class":149,"line":1469},[147,118732,2674],{"emptyLinePlaceholder":324},[147,118734,118735],{"class":149,"line":1475},[147,118736,118737],{"class":458},"#然后重启wsl2即可\n",[308,118739,118740],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":143,"searchDepth":312,"depth":312,"links":118742},[118743,118744,118749],{"id":118020,"depth":312,"text":118021},{"id":118033,"depth":312,"text":118034,"children":118745},[118746,118747,118748],{"id":118037,"depth":1454,"text":118038},{"id":118084,"depth":1454,"text":118085},{"id":118145,"depth":1454,"text":118146},{"id":118181,"depth":312,"text":118182,"children":118750},[118751,118752,118753],{"id":118185,"depth":1454,"text":118186},{"id":118247,"depth":1454,"text":118248},{"id":118536,"depth":1454,"text":118537},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":118012,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118760,"title":118761,"body":118762,"description":321,"extension":322,"meta":121698,"navigation":324,"path":121699,"seo":121700,"stem":121701,"__hash__":121702},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118763,"toc":121670},[118764,118767,118771,118777,118781,118787,118791,118979,118982,118987,118991,118995,118998,119001,119007,119012,119015,119018,119023,119056,119061,119065,119142,119145,119150,119154,119157,119196,119199,119208,119226,119231,119238,119355,119360,119363,119390,119395,119399,119408,119458,119465,119469,119472,119486,119493,119527,119532,119536,119559,119562,119567,119571,119574,119577,119580,119622,119626,119629,119632,119673,119677,119681,119684,119689,119694,119697,119720,119723,119731,119736,119739,119744,119749,119752,119757,119761,119766,119789,119794,119856,119864,119869,119874,119877,119882,119885,119890,119895,119913,119918,119924,119929,119943,119947,119950,119953,119956,119999,120002,120007,120108,120111,120116,120120,120124,120161,120165,120169,120173,120219,120223,120268,120272,120279,120287,120342,120345,120422,120425,120448,120452,120455,120460,120465,120473,120476,120481,120486,120491,120494,120499,120508,120511,120516,120519,120590,120595,120598,120603,120606,120611,120614,120619,120622,120627,120632,120635,120710,120713,120726,120731,120734,120748,120751,120780,120785,120814,120817,120822,120826,120831,120840,120843,120848,120851,120856,120859,120862,120867,120870,120875,120880,120883,120888,120891,121016,121021,121051,121054,121059,121064,121081,121084,121127,121130,121157,121162,121175,121318,121322,121327,121341,121344,121395,121398,121428,121431,121447,121452,121466,121469,121536,121541,121550,121555,121558,121570,121575,121582,121606,121609,121614,121617,121636,121641,121648,121660,121667],[10,118765,118761],{"id":118766},"_3-安装必备配置",[14,118768,118770],{"id":118769},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[138,118772,118775],{"className":118773,"code":118774,"language":5461},[5459],"  打开下方网站（注意，该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",[51,118776,118774],{"__ignoreMap":143},[367,118778,118780],{"id":118779},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[138,118782,118785],{"className":118783,"code":118784,"language":5461},[5459],"  输入以下命令\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",[51,118786,118784],{"__ignoreMap":143},[367,118788,118790],{"id":118789},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[138,118792,118796],{"className":118793,"code":118794,"language":118795,"meta":143,"style":143},"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",[51,118797,118798,118806,118817,118829,118843,118847,118857,118862,118866,118870,118875,118879,118891,118895,118900,118904,118915,118919,118935,118939,118950,118954,118959,118963,118971],{"__ignoreMap":143},[147,118799,118800,118802,118804],{"class":149,"line":150},[147,118801,24850],{"class":2237},[147,118803,117587],{"class":504},[147,118805,26516],{"class":504},[147,118807,118808,118810,118812,118814],{"class":149,"line":312},[147,118809,24850],{"class":2237},[147,118811,117587],{"class":504},[147,118813,24107],{"class":504},[147,118815,118816],{"class":504}," vim\n",[147,118818,118819,118821,118824,118826],{"class":149,"line":1454},[147,118820,24850],{"class":2237},[147,118822,118823],{"class":504}," rm",[147,118825,25599],{"class":448},[147,118827,118828],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list\n",[147,118830,118831,118833,118835,118837,118840],{"class":149,"line":1469},[147,118832,24850],{"class":2237},[147,118834,118823],{"class":504},[147,118836,25599],{"class":448},[147,118838,118839],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[147,118841,118842],{"class":448},"**\n",[147,118844,118845],{"class":149,"line":1475},[147,118846,2674],{"emptyLinePlaceholder":324},[147,118848,118849,118851,118854],{"class":149,"line":1489},[147,118850,24850],{"class":2237},[147,118852,118853],{"class":504}," vim",[147,118855,118856],{"class":504}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[147,118858,118859],{"class":149,"line":1495},[147,118860,118861],{"class":504},"```\n",[147,118863,118864],{"class":149,"line":1586},[147,118865,2674],{"emptyLinePlaceholder":324},[147,118867,118868],{"class":149,"line":1592},[147,118869,2674],{"emptyLinePlaceholder":324},[147,118871,118872],{"class":149,"line":1604},[147,118873,118874],{"class":2237},"选择好Ubuntu版本后，复制下方的内容。\n",[147,118876,118877],{"class":149,"line":1886},[147,118878,2674],{"emptyLinePlaceholder":324},[147,118880,118881,118883,118886,118889],{"class":149,"line":1891},[147,118882,625],{"class":397},[147,118884,118885],{"class":504},"[](",[147,118887,118888],{"class":2237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[147,118890,407],{"class":504},[147,118892,118893],{"class":149,"line":1897},[147,118894,2674],{"emptyLinePlaceholder":324},[147,118896,118897],{"class":149,"line":1902},[147,118898,118899],{"class":2237},"粘贴进去\n",[147,118901,118902],{"class":149,"line":1916},[147,118903,2674],{"emptyLinePlaceholder":324},[147,118905,118906,118908,118910,118913],{"class":149,"line":1921},[147,118907,625],{"class":397},[147,118909,118885],{"class":504},[147,118911,118912],{"class":2237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[147,118914,407],{"class":504},[147,118916,118917],{"class":149,"line":1927},[147,118918,2674],{"emptyLinePlaceholder":324},[147,118920,118921,118924,118927,118930,118932],{"class":149,"line":1948},[147,118922,118923],{"class":2237},"按一下ESC，然后英文冒号，输入",[147,118925,118926],{"class":504}," `",[147,118928,118929],{"class":2237},":wq!",[147,118931,1371],{"class":504},[147,118933,118934],{"class":2237},"然后回车\n",[147,118936,118937],{"class":149,"line":1953},[147,118938,2674],{"emptyLinePlaceholder":324},[147,118940,118941,118943,118945,118948],{"class":149,"line":1967},[147,118942,625],{"class":397},[147,118944,118885],{"class":504},[147,118946,118947],{"class":2237},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[147,118949,407],{"class":504},[147,118951,118952],{"class":149,"line":1972},[147,118953,2674],{"emptyLinePlaceholder":324},[147,118955,118956],{"class":149,"line":2001},[147,118957,118958],{"class":2237},"输入以下命令\n",[147,118960,118961],{"class":149,"line":2006},[147,118962,2674],{"emptyLinePlaceholder":324},[147,118964,118965,118968],{"class":149,"line":2023},[147,118966,118967],{"class":504},"```",[147,118969,118970],{"class":2237},"Bash\n",[147,118972,118973,118975,118977],{"class":149,"line":2028},[147,118974,24850],{"class":2237},[147,118976,117587],{"class":504},[147,118978,26516],{"class":504},[19,118980,118981],{},"这里被替换成对应学校则成功",[19,118983,118984],{},[29,118985],{"alt":143,"src":118986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,118988,118990],{"id":118989},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[367,118992,118994],{"id":118993},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,118996,118997],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,118999,119000],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,119002,119003],{},[637,119004,119005],{"href":119005,"rel":119006},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[24138],[19,119008,119009],{},[29,119010],{"alt":143,"src":119011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,119013,119014],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,119016,119017],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,119019,119020],{},[29,119021],{"alt":143,"src":119022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[138,119024,119026],{"className":117566,"code":119025,"language":117568,"meta":143,"style":143},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[51,119027,119028,119033,119040,119045],{"__ignoreMap":143},[147,119029,119030],{"class":149,"line":150},[147,119031,119032],{"class":458},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[147,119034,119035,119037],{"class":149,"line":312},[147,119036,101548],{"class":448},[147,119038,119039],{"class":504}," ~\u002FDownloads\n",[147,119041,119042],{"class":149,"line":1454},[147,119043,119044],{"class":458},"#下方chrome安装包名不一定是这个，根据名字来看\n",[147,119046,119047,119049,119051,119053],{"class":149,"line":1469},[147,119048,24850],{"class":2237},[147,119050,117587],{"class":504},[147,119052,24107],{"class":504},[147,119054,119055],{"class":504}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,119057,119058],{},[29,119059],{"alt":143,"src":119060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[367,119062,119064],{"id":119063},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[138,119066,119068],{"className":117566,"code":119067,"language":117568,"meta":143,"style":143},"# 老版\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",[51,119069,119070,119075,119083,119094,119099,119103,119108,119118,119126,119137],{"__ignoreMap":143},[147,119071,119072],{"class":149,"line":150},[147,119073,119074],{"class":458},"# 老版\n",[147,119076,119077,119079,119081],{"class":149,"line":312},[147,119078,24850],{"class":2237},[147,119080,117587],{"class":504},[147,119082,26516],{"class":504},[147,119084,119085,119087,119089,119091],{"class":149,"line":1454},[147,119086,24850],{"class":2237},[147,119088,117587],{"class":504},[147,119090,24107],{"class":504},[147,119092,119093],{"class":504}," neofetch\n",[147,119095,119096],{"class":149,"line":1469},[147,119097,119098],{"class":2237},"neofetch\n",[147,119100,119101],{"class":149,"line":1475},[147,119102,2674],{"emptyLinePlaceholder":324},[147,119104,119105],{"class":149,"line":1489},[147,119106,119107],{"class":458},"# 新版\n",[147,119109,119110,119112,119115],{"class":149,"line":1495},[147,119111,24850],{"class":2237},[147,119113,119114],{"class":504}," add-apt-repository",[147,119116,119117],{"class":504}," ppa:zhangsongcui3371\u002Ffastfetch\n",[147,119119,119120,119122,119124],{"class":149,"line":1586},[147,119121,24850],{"class":2237},[147,119123,117587],{"class":504},[147,119125,26516],{"class":504},[147,119127,119128,119130,119132,119134],{"class":149,"line":1592},[147,119129,24850],{"class":2237},[147,119131,117587],{"class":504},[147,119133,24107],{"class":504},[147,119135,119136],{"class":504}," fastfetch\n",[147,119138,119139],{"class":149,"line":1604},[147,119140,119141],{"class":2237},"fastfetch\n",[19,119143,119144],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,119146,119147],{},[29,119148],{"alt":143,"src":119149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[367,119151,119153],{"id":119152},"_323-移除snap应用","3.2.3 移除snap应用",[19,119155,119156],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[138,119158,119160],{"className":117566,"code":119159,"language":117568,"meta":143,"style":143},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[51,119161,119162,119174,119185],{"__ignoreMap":143},[147,119163,119164,119166,119168,119171],{"class":149,"line":150},[147,119165,24850],{"class":2237},[147,119167,26787],{"class":504},[147,119169,119170],{"class":504}," disable",[147,119172,119173],{"class":504}," snapd.service\n",[147,119175,119176,119178,119180,119182],{"class":149,"line":312},[147,119177,24850],{"class":2237},[147,119179,26787],{"class":504},[147,119181,119170],{"class":504},[147,119183,119184],{"class":504}," snapd.socket\n",[147,119186,119187,119189,119191,119193],{"class":149,"line":1454},[147,119188,24850],{"class":2237},[147,119190,26787],{"class":504},[147,119192,119170],{"class":504},[147,119194,119195],{"class":504}," snapd.seeded.service\n",[19,119197,119198],{},"然后查看snap应用列表",[19,119200,119201,119202,119207],{},"根据你安装的选择不同（最小安装或普通安装），有",[637,119203,119206],{"href":119204,"rel":119205},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[24138],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[138,119209,119211],{"className":117566,"code":119210,"language":117568,"meta":143,"style":143},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[51,119212,119213,119218],{"__ignoreMap":143},[147,119214,119215],{"class":149,"line":150},[147,119216,119217],{"class":458},"# 查询当前系统上snap安装了哪些app\n",[147,119219,119220,119223],{"class":149,"line":312},[147,119221,119222],{"class":2237},"snap",[147,119224,119225],{"class":504}," list\n",[19,119227,119228],{},[29,119229],{"alt":143,"src":119230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,119232,119233,119234,119237],{},"卸载掉图中所有应用，按照 ",[234,119235,119236],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[138,119239,119241],{"className":117566,"code":119240,"language":117568,"meta":143,"style":143},"#移除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",[51,119242,119243,119248,119260,119265,119276,119281,119292,119297,119308,119313,119317,119322,119333,119344],{"__ignoreMap":143},[147,119244,119245],{"class":149,"line":150},[147,119246,119247],{"class":458},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[147,119249,119250,119252,119255,119257],{"class":149,"line":312},[147,119251,24850],{"class":2237},[147,119253,119254],{"class":504}," snap",[147,119256,26353],{"class":504},[147,119258,119259],{"class":504}," snap-store\n",[147,119261,119262],{"class":149,"line":1454},[147,119263,119264],{"class":458},"#移除firefox浏览器\n",[147,119266,119267,119269,119271,119273],{"class":149,"line":1469},[147,119268,24850],{"class":2237},[147,119270,119254],{"class":504},[147,119272,26353],{"class":504},[147,119274,119275],{"class":504}," firefox\n",[147,119277,119278],{"class":149,"line":1475},[147,119279,119280],{"class":458},"#移除gnome-42-2204\n",[147,119282,119283,119285,119287,119289],{"class":149,"line":1489},[147,119284,24850],{"class":2237},[147,119286,119254],{"class":504},[147,119288,26353],{"class":504},[147,119290,119291],{"class":504}," gnome-42-2204\n",[147,119293,119294],{"class":149,"line":1495},[147,119295,119296],{"class":458},"#移除gtk-common-themes\n",[147,119298,119299,119301,119303,119305],{"class":149,"line":1586},[147,119300,24850],{"class":2237},[147,119302,119254],{"class":504},[147,119304,26353],{"class":504},[147,119306,119307],{"class":504}," gtk-common-themes\n",[147,119309,119310],{"class":149,"line":1592},[147,119311,119312],{"class":458},"#移除其它...\n",[147,119314,119315],{"class":149,"line":1604},[147,119316,2948],{"class":157},[147,119318,119319],{"class":149,"line":1886},[147,119320,119321],{"class":458},"#移除core22,bare以及snapd\n",[147,119323,119324,119326,119328,119330],{"class":149,"line":1891},[147,119325,24850],{"class":2237},[147,119327,119254],{"class":504},[147,119329,26353],{"class":504},[147,119331,119332],{"class":504}," core22\n",[147,119334,119335,119337,119339,119341],{"class":149,"line":1897},[147,119336,24850],{"class":2237},[147,119338,119254],{"class":504},[147,119340,26353],{"class":504},[147,119342,119343],{"class":504}," bare\n",[147,119345,119346,119348,119350,119352],{"class":149,"line":1902},[147,119347,24850],{"class":2237},[147,119349,119254],{"class":504},[147,119351,26353],{"class":504},[147,119353,119354],{"class":504}," snapd\n",[19,119356,119357],{},[29,119358],{"alt":143,"src":119359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,119361,119362],{},"输入以下命令查看是否还有snap包",[138,119364,119366],{"className":117566,"code":119365,"language":117568,"meta":143,"style":143},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[51,119367,119368,119374,119378,119382,119386],{"__ignoreMap":143},[147,119369,119370,119372],{"class":149,"line":150},[147,119371,119222],{"class":2237},[147,119373,119225],{"class":504},[147,119375,119376],{"class":149,"line":312},[147,119377,119074],{"class":458},[147,119379,119380],{"class":149,"line":1454},[147,119381,119098],{"class":2237},[147,119383,119384],{"class":149,"line":1469},[147,119385,119107],{"class":458},[147,119387,119388],{"class":149,"line":1475},[147,119389,119141],{"class":2237},[19,119391,119392],{},[29,119393],{"alt":143,"src":119394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[367,119396,119398],{"id":119397},"_324-移除snap","3.2.4 移除snap",[19,119400,119401,119402,119407],{},"在删除掉",[637,119403,119406],{"href":119404,"rel":119405},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[24138],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[138,119409,119411],{"className":117566,"code":119410,"language":117568,"meta":143,"style":143}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[51,119412,119413,119418,119431,119436,119447],{"__ignoreMap":143},[147,119414,119415],{"class":149,"line":150},[147,119416,119417],{"class":458}," #使用apt移除掉snap\n",[147,119419,119420,119422,119424,119426,119429],{"class":149,"line":312},[147,119421,24850],{"class":2237},[147,119423,117587],{"class":504},[147,119425,117895],{"class":504},[147,119427,119428],{"class":448}," --purge",[147,119430,119354],{"class":504},[147,119432,119433],{"class":149,"line":1454},[147,119434,119435],{"class":458},"#移除snapd的一些目录\n",[147,119437,119438,119440,119442,119444],{"class":149,"line":1469},[147,119439,24850],{"class":2237},[147,119441,118823],{"class":504},[147,119443,25599],{"class":448},[147,119445,119446],{"class":504}," \u002Fvar\u002Fcache\u002Fsnapd\n",[147,119448,119449,119451,119453,119455],{"class":149,"line":1475},[147,119450,24850],{"class":2237},[147,119452,118823],{"class":504},[147,119454,25599],{"class":448},[147,119456,119457],{"class":504}," ~\u002Fsnap\n",[19,119459,119460,119461,119464],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[51,119462,119463],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[367,119466,119468],{"id":119467},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,119470,119471],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[138,119473,119475],{"className":117566,"code":119474,"language":117568,"meta":143,"style":143},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[51,119476,119477],{"__ignoreMap":143},[147,119478,119479,119481,119483],{"class":149,"line":150},[147,119480,24850],{"class":2237},[147,119482,118853],{"class":504},[147,119484,119485],{"class":504}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,119487,119488,119489,119492],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[51,119490,119491],{},":wq"," 回车",[138,119494,119496],{"className":117566,"code":119495,"language":117568,"meta":143,"style":143},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[51,119497,119498,119505,119519],{"__ignoreMap":143},[147,119499,119500,119503],{"class":149,"line":150},[147,119501,119502],{"class":2237},"Package:",[147,119504,119354],{"class":504},[147,119506,119507,119510,119513,119516],{"class":149,"line":312},[147,119508,119509],{"class":2237},"Pin:",[147,119511,119512],{"class":504}," release",[147,119514,119515],{"class":504}," a=",[147,119517,119518],{"class":448},"*\n",[147,119520,119521,119524],{"class":149,"line":1454},[147,119522,119523],{"class":2237},"Pin-Priority:",[147,119525,119526],{"class":448}," -10\n",[19,119528,119529],{},[29,119530],{"alt":143,"src":119531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[367,119533,119535],{"id":119534},"_326-测试是否成功","3.2.6 测试是否成功",[138,119537,119539],{"className":117566,"code":119538,"language":117568,"meta":143,"style":143},"sudo apt update\nsudo apt install firefox\n",[51,119540,119541,119549],{"__ignoreMap":143},[147,119542,119543,119545,119547],{"class":149,"line":150},[147,119544,24850],{"class":2237},[147,119546,117587],{"class":504},[147,119548,26516],{"class":504},[147,119550,119551,119553,119555,119557],{"class":149,"line":312},[147,119552,24850],{"class":2237},[147,119554,117587],{"class":504},[147,119556,24107],{"class":504},[147,119558,119275],{"class":504},[19,119560,119561],{},"这里提示snapd无法被安装，就证明成功了",[19,119563,119564],{},[29,119565],{"alt":143,"src":119566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[367,119568,119570],{"id":119569},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,119572,119573],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,119575,119576],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,119578,119579],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[138,119581,119583],{"className":117566,"code":119582,"language":117568,"meta":143,"style":143},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[51,119584,119585,119590,119599,119604,119612],{"__ignoreMap":143},[147,119586,119587],{"class":149,"line":150},[147,119588,119589],{"class":458},"# 添加Mozilla提供的源\n",[147,119591,119592,119594,119596],{"class":149,"line":312},[147,119593,24850],{"class":2237},[147,119595,119114],{"class":504},[147,119597,119598],{"class":504}," ppa:mozillateam\u002Fppa\n",[147,119600,119601],{"class":149,"line":1454},[147,119602,119603],{"class":458},"# 安装Firefox\n",[147,119605,119606,119608,119610],{"class":149,"line":1469},[147,119607,24850],{"class":2237},[147,119609,117587],{"class":504},[147,119611,26516],{"class":504},[147,119613,119614,119616,119618,119620],{"class":149,"line":1475},[147,119615,24850],{"class":2237},[147,119617,117587],{"class":504},[147,119619,24107],{"class":504},[147,119621,119275],{"class":504},[367,119623,119625],{"id":119624},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,119627,119628],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,119630,119631],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[138,119633,119635],{"className":117566,"code":119634,"language":117568,"meta":143,"style":143},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[51,119636,119637,119642,119652,119660,119664],{"__ignoreMap":143},[147,119638,119639],{"class":149,"line":150},[147,119640,119641],{"class":458},"#删掉禁止安装snap的配置文件\n",[147,119643,119644,119646,119648,119650],{"class":149,"line":312},[147,119645,24850],{"class":2237},[147,119647,118823],{"class":504},[147,119649,25599],{"class":448},[147,119651,119485],{"class":504},[147,119653,119654,119656,119658],{"class":149,"line":1454},[147,119655,24850],{"class":2237},[147,119657,117587],{"class":504},[147,119659,26516],{"class":504},[147,119661,119662],{"class":149,"line":1469},[147,119663,2674],{"emptyLinePlaceholder":324},[147,119665,119666,119668,119670],{"class":149,"line":1475},[147,119667,24850],{"class":2237},[147,119669,117587],{"class":504},[147,119671,119672],{"class":504}," dist-update\n",[14,119674,119676],{"id":119675},"_33-中文输入法","3.3 中文输入法",[367,119678,119680],{"id":119679},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,119682,119683],{},"官网下载搜狗输入法",[19,119685,119686],{},[29,119687],{"alt":143,"src":119688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,119690,119691],{},[29,119692],{"alt":143,"src":119693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,119695,119696],{},"打开终端输入如下",[138,119698,119700],{"className":117566,"code":119699,"language":117568,"meta":143,"style":143},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[51,119701,119702,119709],{"__ignoreMap":143},[147,119703,119704,119706],{"class":149,"line":150},[147,119705,101548],{"class":448},[147,119707,119708],{"class":504}," ~\u002FDownloads\u002F\n",[147,119710,119711,119713,119715,119717],{"class":149,"line":312},[147,119712,24850],{"class":2237},[147,119714,117587],{"class":504},[147,119716,24107],{"class":504},[147,119718,119719],{"class":504}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,119721,119722],{},"打开Fcitx",[19,119724,119725,119728],{},[29,119726],{"alt":143,"src":119727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[29,119729],{"alt":143,"src":119730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,119732,119733],{},[29,119734],{"alt":143,"src":119735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,119737,119738],{},"添加搜狗输入法",[19,119740,119741],{},[29,119742],{"alt":143,"src":119743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,119745,119746],{},[29,119747],{"alt":143,"src":119748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,119750,119751],{},"将搜狗输入法设置为唯一输入法",[19,119753,119754],{},[29,119755],{"alt":143,"src":119756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[367,119758,119760],{"id":119759},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[350,119762,119763],{},[353,119764,119765],{},"卸载旧输入法",[138,119767,119769],{"className":118793,"code":119768,"language":118795,"meta":143,"style":143},"sudo apt purge fcitx* ibus*\n",[51,119770,119771],{"__ignoreMap":143},[147,119772,119773,119775,119777,119779,119782,119784,119787],{"class":149,"line":150},[147,119774,24850],{"class":2237},[147,119776,117587],{"class":504},[147,119778,117928],{"class":504},[147,119780,119781],{"class":504}," fcitx",[147,119783,854],{"class":448},[147,119785,119786],{"class":504}," ibus",[147,119788,119518],{"class":448},[350,119790,119791],{"start":312},[353,119792,119793],{},"安装Fcitx5",[138,119795,119797],{"className":117566,"code":119796,"language":117568,"meta":143,"style":143},"# 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",[51,119798,119799,119804,119818,119822,119827,119836,119844],{"__ignoreMap":143},[147,119800,119801],{"class":149,"line":150},[147,119802,119803],{"class":458},"# Ubuntu22.04及以上、Debian12及以上\n",[147,119805,119806,119808,119810,119812,119815],{"class":149,"line":312},[147,119807,24850],{"class":2237},[147,119809,117587],{"class":504},[147,119811,24107],{"class":504},[147,119813,119814],{"class":504}," fcitx5",[147,119816,119817],{"class":504}," fcitx5-chinese-addons\n",[147,119819,119820],{"class":149,"line":1454},[147,119821,2674],{"emptyLinePlaceholder":324},[147,119823,119824],{"class":149,"line":1469},[147,119825,119826],{"class":458},"# Ubuntu20.04\n",[147,119828,119829,119831,119833],{"class":149,"line":1475},[147,119830,24850],{"class":2237},[147,119832,119114],{"class":504},[147,119834,119835],{"class":504}," ppa:zhsj\u002Ffcitx5\n",[147,119837,119838,119840,119842],{"class":149,"line":1489},[147,119839,24850],{"class":2237},[147,119841,117587],{"class":504},[147,119843,26516],{"class":504},[147,119845,119846,119848,119850,119852,119854],{"class":149,"line":1495},[147,119847,24850],{"class":2237},[147,119849,117587],{"class":504},[147,119851,24107],{"class":504},[147,119853,119814],{"class":504},[147,119855,119817],{"class":504},[350,119857,119858,119861],{"start":1454},[353,119859,119860],{},"Reboot System",[353,119862,119863],{},"启动Fcitx5",[19,119865,119866],{},[29,119867],{"alt":143,"src":119868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[350,119870,119871],{"start":1475},[353,119872,119873],{},"修改一些设置",[19,119875,119876],{},"将Pinyin和Keyboard - English US加入到左边。",[19,119878,119879],{},[29,119880],{"alt":143,"src":119881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,119883,119884],{},"添加快捷键以便于更好切换中英文",[19,119886,119887],{},[29,119888],{"alt":143,"src":119889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[350,119891,119892],{"start":1489},[353,119893,119894],{},"重启",[138,119896,119898],{"className":118793,"code":119897,"language":118795,"meta":143,"style":143},"sudo shutdown -r now\n",[51,119899,119900],{"__ignoreMap":143},[147,119901,119902,119904,119907,119910],{"class":149,"line":150},[147,119903,24850],{"class":2237},[147,119905,119906],{"class":504}," shutdown",[147,119908,119909],{"class":448}," -r",[147,119911,119912],{"class":504}," now\n",[350,119914,119915],{"start":1495},[353,119916,119917],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,119919,119920],{},[637,119921,119922],{"href":119922,"rel":119923},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[24138],[350,119925,119926],{"start":1586},[353,119927,119928],{},"再重启",[138,119930,119931],{"className":118793,"code":119897,"language":118795,"meta":143,"style":143},[51,119932,119933],{"__ignoreMap":143},[147,119934,119935,119937,119939,119941],{"class":149,"line":150},[147,119936,24850],{"class":2237},[147,119938,119906],{"class":504},[147,119940,119909],{"class":448},[147,119942,119912],{"class":504},[14,119944,119946],{"id":119945},"_34-pip3源替换","3.4 pip3源替换",[19,119948,119949],{},"非Debian系发行版需要做。",[19,119951,119952],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,119954,119955],{},"使用dnf的系统也可能不用做。",[138,119957,119959],{"className":117566,"code":119958,"language":117568,"meta":143,"style":143},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[51,119960,119961,119966,119973,119978,119983],{"__ignoreMap":143},[147,119962,119963],{"class":149,"line":150},[147,119964,119965],{"class":458},"# 检查是否已安装 pip\n",[147,119967,119968,119971],{"class":149,"line":312},[147,119969,119970],{"class":2237},"pip3",[147,119972,26567],{"class":448},[147,119974,119975],{"class":149,"line":1454},[147,119976,119977],{"class":458},"# 如果未安装，先安装 pip3（见下方）\n",[147,119979,119980],{"class":149,"line":1469},[147,119981,119982],{"class":458},"# 配置 pip 使用清华源\n",[147,119984,119985,119987,119990,119993,119996],{"class":149,"line":1475},[147,119986,119970],{"class":2237},[147,119988,119989],{"class":504}," config",[147,119991,119992],{"class":504}," set",[147,119994,119995],{"class":504}," global.index-url",[147,119997,119998],{"class":504}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,120000,120001],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,120003,120004],{},[29,120005],{"alt":143,"src":120006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[138,120008,120010],{"className":117566,"code":120009,"language":117568,"meta":143,"style":143},"#安装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",[51,120011,120012,120017,120025,120036,120040,120045,120064,120068,120073,120085,120089,120094],{"__ignoreMap":143},[147,120013,120014],{"class":149,"line":150},[147,120015,120016],{"class":458},"#安装pip3\n",[147,120018,120019,120021,120023],{"class":149,"line":312},[147,120020,24850],{"class":2237},[147,120022,117587],{"class":504},[147,120024,26516],{"class":504},[147,120026,120027,120029,120031,120033],{"class":149,"line":1454},[147,120028,24850],{"class":2237},[147,120030,26350],{"class":504},[147,120032,24107],{"class":504},[147,120034,120035],{"class":504}," python3-pip\n",[147,120037,120038],{"class":149,"line":1469},[147,120039,2674],{"emptyLinePlaceholder":324},[147,120041,120042],{"class":149,"line":1475},[147,120043,120044],{"class":458},"#更新pip3\n",[147,120046,120047,120049,120051,120053,120055,120057,120060,120062],{"class":149,"line":1489},[147,120048,101151],{"class":2237},[147,120050,101154],{"class":448},[147,120052,101177],{"class":504},[147,120054,24107],{"class":504},[147,120056,26704],{"class":448},[147,120058,120059],{"class":504}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[147,120061,101182],{"class":448},[147,120063,101185],{"class":504},[147,120065,120066],{"class":149,"line":1495},[147,120067,2674],{"emptyLinePlaceholder":324},[147,120069,120070],{"class":149,"line":1586},[147,120071,120072],{"class":458},"#设置pip源为清华源\n",[147,120074,120075,120077,120079,120081,120083],{"class":149,"line":1592},[147,120076,119970],{"class":2237},[147,120078,119989],{"class":504},[147,120080,119992],{"class":504},[147,120082,119995],{"class":504},[147,120084,119998],{"class":504},[147,120086,120087],{"class":149,"line":1604},[147,120088,2674],{"emptyLinePlaceholder":324},[147,120090,120091],{"class":149,"line":1886},[147,120092,120093],{"class":458},"#测试\n",[147,120095,120096,120098,120100,120102,120104,120106],{"class":149,"line":1891},[147,120097,101151],{"class":2237},[147,120099,101154],{"class":448},[147,120101,101177],{"class":504},[147,120103,24107],{"class":504},[147,120105,101182],{"class":448},[147,120107,101185],{"class":504},[19,120109,120110],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,120112,120113],{},[29,120114],{"alt":143,"src":120115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,120117,120119],{"id":120118},"_35-显卡驱动安装","3.5 显卡驱动安装",[367,120121,120123],{"id":120122},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[138,120125,120127],{"className":118793,"code":120126,"language":118795,"meta":143,"style":143},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[51,120128,120129,120134,120149,120154],{"__ignoreMap":143},[147,120130,120131],{"class":149,"line":150},[147,120132,120133],{"class":458},"# 如果是使用apt安装的驱动\n",[147,120135,120136,120138,120140,120142,120144,120147],{"class":149,"line":312},[147,120137,24850],{"class":2237},[147,120139,26350],{"class":504},[147,120141,26353],{"class":504},[147,120143,119428],{"class":448},[147,120145,120146],{"class":504}," nvidia",[147,120148,119518],{"class":448},[147,120150,120151],{"class":149,"line":1454},[147,120152,120153],{"class":458},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[147,120155,120156,120158],{"class":149,"line":1469},[147,120157,24850],{"class":2237},[147,120159,120160],{"class":504}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[367,120162,120164],{"id":120163},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22271,120166,120168],{"id":120167},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[23183,120170,120172],{"id":120171},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[138,120174,120176],{"className":118793,"code":120175,"language":118795,"meta":143,"style":143},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[51,120177,120178,120183,120194,120199,120209,120214],{"__ignoreMap":143},[147,120179,120180],{"class":149,"line":150},[147,120181,120182],{"class":458},"# 安装英伟达驱动\n",[147,120184,120185,120187,120189,120191],{"class":149,"line":312},[147,120186,24850],{"class":2237},[147,120188,117587],{"class":504},[147,120190,24107],{"class":504},[147,120192,120193],{"class":504}," nvidia-driver-版本号\n",[147,120195,120196],{"class":149,"line":1454},[147,120197,120198],{"class":458},"# 重启 \n",[147,120200,120201,120203,120205,120207],{"class":149,"line":1469},[147,120202,24850],{"class":2237},[147,120204,119906],{"class":504},[147,120206,119909],{"class":448},[147,120208,119912],{"class":504},[147,120210,120211],{"class":149,"line":1475},[147,120212,120213],{"class":458},"# 检查驱动是否安装成功\n",[147,120215,120216],{"class":149,"line":1489},[147,120217,120218],{"class":2237},"nvidia-smi\n",[23183,120220,120222],{"id":120221},"_35212-debian","3.5.2.1.2 Debian",[138,120224,120226],{"className":118793,"code":120225,"language":118795,"meta":143,"style":143},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[51,120227,120228,120232,120246,120250,120260,120264],{"__ignoreMap":143},[147,120229,120230],{"class":149,"line":150},[147,120231,120182],{"class":458},[147,120233,120234,120236,120238,120240,120243],{"class":149,"line":312},[147,120235,24850],{"class":2237},[147,120237,117587],{"class":504},[147,120239,24107],{"class":504},[147,120241,120242],{"class":504}," nvidia-driver",[147,120244,120245],{"class":504}," nvidia-settings\n",[147,120247,120248],{"class":149,"line":1454},[147,120249,120198],{"class":458},[147,120251,120252,120254,120256,120258],{"class":149,"line":1469},[147,120253,24850],{"class":2237},[147,120255,119906],{"class":504},[147,120257,119909],{"class":448},[147,120259,119912],{"class":504},[147,120261,120262],{"class":149,"line":1475},[147,120263,120213],{"class":458},[147,120265,120266],{"class":149,"line":1489},[147,120267,120218],{"class":2237},[22271,120269,120271],{"id":120270},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,120273,120274,120275,120278],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[234,120276,120277],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,120280,120281,120282],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23826,120283,120284],{},[234,120285,120286],{},"（也可以不禁用桌面环境，直接进行下一步。）",[138,120288,120290],{"className":118793,"code":120289,"language":118795,"meta":143,"style":143},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[51,120291,120292,120297,120307,120312,120325,120330],{"__ignoreMap":143},[147,120293,120294],{"class":149,"line":150},[147,120295,120296],{"class":458},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[147,120298,120299,120301,120304],{"class":149,"line":312},[147,120300,24850],{"class":2237},[147,120302,120303],{"class":504}," telinit",[147,120305,120306],{"class":448}," 3\n",[147,120308,120309],{"class":149,"line":1454},[147,120310,120311],{"class":458},"# ubuntu 使用下方命令\n",[147,120313,120314,120316,120319,120322],{"class":149,"line":1469},[147,120315,24850],{"class":2237},[147,120317,120318],{"class":504}," service",[147,120320,120321],{"class":504}," lightdm",[147,120323,120324],{"class":504}," stop\n",[147,120326,120327],{"class":149,"line":1475},[147,120328,120329],{"class":458},"# Fedora 使用下方命令\n",[147,120331,120332,120334,120336,120339],{"class":149,"line":1489},[147,120333,24850],{"class":2237},[147,120335,26787],{"class":504},[147,120337,120338],{"class":504}," isolate",[147,120340,120341],{"class":504}," multi-user.target\n",[19,120343,120344],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[138,120346,120348],{"className":118793,"code":120347,"language":118795,"meta":143,"style":143},"# 编译环境+准备工作\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",[51,120349,120350,120355,120366,120371,120378,120383,120395,120400,120407,120412],{"__ignoreMap":143},[147,120351,120352],{"class":149,"line":150},[147,120353,120354],{"class":458},"# 编译环境+准备工作\n",[147,120356,120357,120359,120361,120363],{"class":149,"line":312},[147,120358,24850],{"class":2237},[147,120360,117587],{"class":504},[147,120362,24107],{"class":504},[147,120364,120365],{"class":504}," build-essential\n",[147,120367,120368],{"class":149,"line":1454},[147,120369,120370],{"class":458},"# 进入到.run目录中\n",[147,120372,120373,120375],{"class":149,"line":1469},[147,120374,101548],{"class":448},[147,120376,120377],{"class":504}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[147,120379,120380],{"class":149,"line":1475},[147,120381,120382],{"class":458},"# 给驱动文件增加可执行权限：\n",[147,120384,120385,120387,120389,120392],{"class":149,"line":1489},[147,120386,24850],{"class":2237},[147,120388,24853],{"class":504},[147,120390,120391],{"class":504}," a+x",[147,120393,120394],{"class":504}," NVIDIA-Linux-x86_64-550.107.02.run\n",[147,120396,120397],{"class":149,"line":1495},[147,120398,120399],{"class":458},"# 然后执行安装：\n",[147,120401,120402,120404],{"class":149,"line":1586},[147,120403,24850],{"class":2237},[147,120405,120406],{"class":504}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[147,120408,120409],{"class":149,"line":1592},[147,120410,120411],{"class":458},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[147,120413,120414,120416,120419],{"class":149,"line":1604},[147,120415,24850],{"class":2237},[147,120417,120418],{"class":504}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[147,120420,120421],{"class":448},"  --no-opengl-files\n",[19,120423,120424],{},"安装完毕重启即可",[138,120426,120428],{"className":118793,"code":120427,"language":118795,"meta":143,"style":143},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[51,120429,120430,120434,120440,120444],{"__ignoreMap":143},[147,120431,120432],{"class":149,"line":150},[147,120433,120198],{"class":458},[147,120435,120436,120438],{"class":149,"line":312},[147,120437,24850],{"class":2237},[147,120439,26921],{"class":504},[147,120441,120442],{"class":149,"line":1454},[147,120443,120213],{"class":458},[147,120445,120446],{"class":149,"line":1469},[147,120447,120218],{"class":2237},[367,120449,120451],{"id":120450},"_353-安装cuda","3.5.3 安装CUDA",[19,120453,120454],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,120456,120457],{},[29,120458],{"alt":143,"src":120459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[350,120461,120462],{},[353,120463,120464],{},"先查看显卡驱动所支持的最高CUDA版本",[138,120466,120467],{"className":118793,"code":120218,"language":118795,"meta":143,"style":143},[51,120468,120469],{"__ignoreMap":143},[147,120470,120471],{"class":149,"line":150},[147,120472,120218],{"class":2237},[19,120474,120475],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,120477,120478],{},[29,120479],{"alt":143,"src":120480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[350,120482,120483],{"start":312},[353,120484,120485],{},"下载CUDA并安装CUDA",[19,120487,118572,120488],{},[637,120489,118575],{"href":118575,"rel":120490},[24138],[19,120492,120493],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,120495,120496],{},[29,120497],{"alt":143,"src":120498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,120500,120501,120502,120507],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[637,120503,120506],{"href":120504,"rel":120505},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[24138],"Vinci机器人队单片机教程","）",[19,120509,120510],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,120512,120513],{},[29,120514],{"alt":143,"src":120515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,120517,120518],{},"将最下方框框里的命令敲入终端",[138,120520,120522],{"className":118793,"code":120521,"language":118795,"meta":143,"style":143},"# 在当前文件夹下创建一个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",[51,120523,120524,120529,120538,120543,120550,120555,120563,120568,120579,120584],{"__ignoreMap":143},[147,120525,120526],{"class":149,"line":150},[147,120527,120528],{"class":458},"# 在当前文件夹下创建一个ttt的子文件夹\n",[147,120530,120531,120533,120535],{"class":149,"line":312},[147,120532,101538],{"class":2237},[147,120534,29490],{"class":448},[147,120536,120537],{"class":504}," .\u002Fttt\n",[147,120539,120540],{"class":149,"line":1454},[147,120541,120542],{"class":458},"# 进入ttt文件夹\n",[147,120544,120545,120547],{"class":149,"line":1469},[147,120546,101548],{"class":448},[147,120548,120549],{"class":504}," ttt\n",[147,120551,120552],{"class":149,"line":1475},[147,120553,120554],{"class":458},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[147,120556,120557,120560],{"class":149,"line":1489},[147,120558,120559],{"class":2237},"wget",[147,120561,120562],{"class":504}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[147,120564,120565],{"class":149,"line":1495},[147,120566,120567],{"class":458},"# 给予权限\n",[147,120569,120570,120572,120574,120576],{"class":149,"line":1586},[147,120571,24850],{"class":2237},[147,120573,24853],{"class":504},[147,120575,120391],{"class":504},[147,120577,120578],{"class":504}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[147,120580,120581],{"class":149,"line":1592},[147,120582,120583],{"class":458},"# 运行脚本\n",[147,120585,120586,120588],{"class":149,"line":1604},[147,120587,24850],{"class":2237},[147,120589,120578],{"class":504},[19,120591,120592],{},[29,120593],{"alt":143,"src":120594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,120596,120597],{},"正在安装中：",[19,120599,120600],{},[29,120601],{"alt":143,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,120604,120605],{},"输入accept接受即可",[19,120607,120608],{},[29,120609],{"alt":143,"src":120610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,120612,120613],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,120615,120616],{},[29,120617],{"alt":143,"src":120618},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,120620,120621],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,120623,120624],{},[29,120625],{"alt":143,"src":120626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[350,120628,120629],{"start":1454},[353,120630,120631],{},"配置环境",[19,120633,120634],{},"根据上方确认一下路径，比如我上面红色框起来的为",[138,120636,120638],{"className":118793,"code":120637,"language":118795,"meta":143,"style":143},"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",[51,120639,120640,120656,120671],{"__ignoreMap":143},[147,120641,120642,120645,120648,120651,120654],{"class":149,"line":150},[147,120643,120644],{"class":2237},"Please",[147,120646,120647],{"class":504}," make",[147,120649,120650],{"class":504}," sure",[147,120652,120653],{"class":504}," that",[147,120655,2948],{"class":157},[147,120657,120658,120660,120663,120666,120669],{"class":149,"line":312},[147,120659,52544],{"class":2237},[147,120661,120662],{"class":504},"   PATH",[147,120664,120665],{"class":504}," includes",[147,120667,120668],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[147,120670,2948],{"class":157},[147,120672,120673,120675,120678,120680,120683,120686,120688,120691,120694,120697,120700,120702,120705,120707],{"class":149,"line":1454},[147,120674,52544],{"class":2237},[147,120676,120677],{"class":504},"   LD_LIBRARY_PATH",[147,120679,120665],{"class":504},[147,120681,120682],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[147,120684,120685],{"class":504}," or,",[147,120687,5483],{"class":504},[147,120689,120690],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[147,120692,120693],{"class":504}," to",[147,120695,120696],{"class":504}," \u002Fetc\u002Fld.so.conf",[147,120698,120699],{"class":504}," and",[147,120701,27504],{"class":504},[147,120703,120704],{"class":504}," ldconfig",[147,120706,64877],{"class":504},[147,120708,120709],{"class":504}," root\n",[19,120711,120712],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[138,120714,120716],{"className":118793,"code":120715,"language":118795,"meta":143,"style":143},"which nvcc\n",[51,120717,120718],{"__ignoreMap":143},[147,120719,120720,120723],{"class":149,"line":150},[147,120721,120722],{"class":448},"which",[147,120724,120725],{"class":504}," nvcc\n",[19,120727,120728],{},[29,120729],{"alt":143,"src":120730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,120732,120733],{},"所以我进行以下操作：",[138,120735,120737],{"className":118793,"code":120736,"language":118795,"meta":143,"style":143},"sudo vim ~\u002F.bashrc\n",[51,120738,120739],{"__ignoreMap":143},[147,120740,120741,120743,120745],{"class":149,"line":150},[147,120742,24850],{"class":2237},[147,120744,118853],{"class":504},[147,120746,120747],{"class":504}," ~\u002F.bashrc\n",[19,120749,120750],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[138,120752,120754],{"className":118793,"code":120753,"language":118795,"meta":143,"style":143},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[51,120755,120756,120768],{"__ignoreMap":143},[147,120757,120758,120760,120763,120765],{"class":149,"line":150},[147,120759,25316],{"class":397},[147,120761,120762],{"class":157}," PATH",[147,120764,445],{"class":397},[147,120766,120767],{"class":157},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[147,120769,120770,120772,120775,120777],{"class":149,"line":312},[147,120771,25316],{"class":397},[147,120773,120774],{"class":157}," LD_LIBRARY_PATH",[147,120776,445],{"class":397},[147,120778,120779],{"class":157},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,120781,120782],{},[29,120783],{"alt":143,"src":120784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[138,120786,120788],{"className":118793,"code":120787,"language":118795,"meta":143,"style":143},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[51,120789,120790,120795,120801,120806],{"__ignoreMap":143},[147,120791,120792],{"class":149,"line":150},[147,120793,120794],{"class":458},"# 刷新当前终端的环境变量\n",[147,120796,120797,120799],{"class":149,"line":312},[147,120798,101165],{"class":448},[147,120800,120747],{"class":504},[147,120802,120803],{"class":149,"line":1454},[147,120804,120805],{"class":458},"# 验证CUDA是否安装成功\n",[147,120807,120808,120811],{"class":149,"line":1469},[147,120809,120810],{"class":2237},"nvcc",[147,120812,120813],{"class":448}," -V\n",[19,120815,120816],{},"出现下图这种则安装成功。",[19,120818,120819],{},[29,120820],{"alt":143,"src":120821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[367,120823,120825],{"id":120824},"_354-安装cudnn","3.5.4 安装cuDNN",[350,120827,120828],{},[353,120829,120830],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,120832,120833,120834,120839],{},"前往 NVIDIA cuDNN 下载页面：",[637,120835,120838],{"href":120836,"rel":120837},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[24138],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,120841,120842],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,120844,120845],{},[29,120846],{"alt":143,"src":120847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,120849,120850],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,120852,120853],{},[29,120854],{"alt":143,"src":120855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,120857,120858],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,120860,120861],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,120863,120864],{},[234,120865,120866],{},"我这里选择所有Linux X86_64最通用的办法：",[19,120868,120869],{},"下载好的：",[19,120871,120872],{},[29,120873],{"alt":143,"src":120874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[350,120876,120877],{"start":312},[353,120878,120879],{},"安装cuDNN",[19,120881,120882],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,120884,120885],{},[29,120886],{"alt":143,"src":120887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,120889,120890],{},"解压文件，并复制到对应位置完成安装",[138,120892,120894],{"className":118793,"code":120893,"language":118795,"meta":143,"style":143},"# 解压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",[51,120895,120896,120901,120912,120917,120924,120929,120945,120959,120964,120975,120984,120988,121004],{"__ignoreMap":143},[147,120897,120898],{"class":149,"line":150},[147,120899,120900],{"class":458},"# 解压cuDNN文件\n",[147,120902,120903,120906,120909],{"class":149,"line":312},[147,120904,120905],{"class":2237},"tar",[147,120907,120908],{"class":448}," -xvf",[147,120910,120911],{"class":504}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[147,120913,120914],{"class":149,"line":1454},[147,120915,120916],{"class":458},"# cd进文件夹\n",[147,120918,120919,120921],{"class":149,"line":1469},[147,120920,101548],{"class":448},[147,120922,120923],{"class":504}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[147,120925,120926],{"class":149,"line":1475},[147,120927,120928],{"class":458},"# 复制cuDNN文件到CUDA目录\n",[147,120930,120931,120933,120935,120938,120940,120943],{"class":149,"line":1489},[147,120932,24850],{"class":2237},[147,120934,28135],{"class":504},[147,120936,120937],{"class":504}," include\u002Fcudnn",[147,120939,854],{"class":448},[147,120941,120942],{"class":504},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[147,120944,2948],{"class":157},[147,120946,120947,120949,120951,120954,120956],{"class":149,"line":1495},[147,120948,24850],{"class":2237},[147,120950,28135],{"class":504},[147,120952,120953],{"class":504}," lib\u002Flibcudnn",[147,120955,854],{"class":448},[147,120957,120958],{"class":504},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[147,120960,120961],{"class":149,"line":1586},[147,120962,120963],{"class":458},"# 对比一下有没有缺文件\n",[147,120965,120966,120968,120971,120973],{"class":149,"line":1592},[147,120967,27035],{"class":2237},[147,120969,120970],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[147,120972,854],{"class":448},[147,120974,2948],{"class":157},[147,120976,120977,120979,120982],{"class":149,"line":1604},[147,120978,27035],{"class":2237},[147,120980,120981],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[147,120983,119518],{"class":448},[147,120985,120986],{"class":149,"line":1886},[147,120987,120567],{"class":458},[147,120989,120990,120992,120994,120997,120999,121001],{"class":149,"line":1891},[147,120991,24850],{"class":2237},[147,120993,24853],{"class":504},[147,120995,120996],{"class":504}," a+r",[147,120998,120970],{"class":504},[147,121000,854],{"class":448},[147,121002,121003],{"class":157},"   \n",[147,121005,121006,121008,121010,121012,121014],{"class":149,"line":1897},[147,121007,24850],{"class":2237},[147,121009,24853],{"class":504},[147,121011,120996],{"class":504},[147,121013,120981],{"class":504},[147,121015,119518],{"class":448},[350,121017,121018],{"start":1454},[353,121019,121020],{},"检查是否安装成功",[138,121022,121024],{"className":118793,"code":121023,"language":118795,"meta":143,"style":143},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[51,121025,121026,121031],{"__ignoreMap":143},[147,121027,121028],{"class":149,"line":150},[147,121029,121030],{"class":458},"# 检查cuDNN版本命令\n",[147,121032,121033,121036,121039,121041,121043,121046,121049],{"class":149,"line":312},[147,121034,121035],{"class":2237},"cat",[147,121037,121038],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[147,121040,25383],{"class":397},[147,121042,30510],{"class":2237},[147,121044,121045],{"class":504}," CUDNN_MAJOR",[147,121047,121048],{"class":448}," -A",[147,121050,47997],{"class":448},[19,121052,121053],{},"出现下图这样的就是安装成功了",[19,121055,121056],{},[29,121057],{"alt":143,"src":121058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[350,121060,121061],{"start":1469},[353,121062,121063],{},"软链接(一般不需要)",[138,121065,121067],{"className":118793,"code":121066,"language":118795,"meta":143,"style":143},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[51,121068,121069,121074],{"__ignoreMap":143},[147,121070,121071],{"class":149,"line":150},[147,121072,121073],{"class":458},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[147,121075,121076,121078],{"class":149,"line":312},[147,121077,24850],{"class":2237},[147,121079,121080],{"class":504}," ldconfig\n",[19,121082,121083],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[138,121085,121090],{"className":121086,"code":121087,"language":121088,"meta":121089,"style":143},"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",[51,121091,121092,121097,121102,121107,121112,121117,121122],{"__ignoreMap":143},[147,121093,121094],{"class":149,"line":150},[147,121095,121096],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[147,121098,121099],{"class":149,"line":312},[147,121100,121101],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[147,121103,121104],{"class":149,"line":1454},[147,121105,121106],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[147,121108,121109],{"class":149,"line":1469},[147,121110,121111],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[147,121113,121114],{"class":149,"line":1475},[147,121115,121116],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[147,121118,121119],{"class":149,"line":1489},[147,121120,121121],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[147,121123,121124],{"class":149,"line":1495},[147,121125,121126],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,121128,121129],{},"运行下方的命令",[138,121131,121133],{"className":118793,"code":121132,"language":118795,"meta":143,"style":143},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[51,121134,121135,121140,121147,121152],{"__ignoreMap":143},[147,121136,121137],{"class":149,"line":150},[147,121138,121139],{"class":458},"# cd进入CUDA路径\n",[147,121141,121142,121144],{"class":149,"line":312},[147,121143,101548],{"class":448},[147,121145,121146],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[147,121148,121149],{"class":149,"line":1454},[147,121150,121151],{"class":458}," # 查看本路径下的需要软链接的文件名\n",[147,121153,121154],{"class":149,"line":1469},[147,121155,121156],{"class":2237}," ls\n",[19,121158,121159],{},[29,121160],{"alt":143,"src":121161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,121163,121164,121165,18683,121168,18683,121171,121174],{},"如上图，我需要将",[51,121166,121167],{},"libcudnn_xxx_xxxxx.so.8.9.7",[51,121169,121170],{},"libcudnn_xxx_xxxxx.so.8",[51,121172,121173],{},"libcudnn_xxx_xxxxx.so","软链接",[138,121176,121178],{"className":118793,"code":121177,"language":118795,"meta":143,"style":143},"# 创建符号链接。对于每个 .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",[51,121179,121180,121185,121201,121215,121229,121243,121257,121271,121285,121290,121296,121301],{"__ignoreMap":143},[147,121181,121182],{"class":149,"line":150},[147,121183,121184],{"class":458},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[147,121186,121187,121189,121192,121195,121198],{"class":149,"line":312},[147,121188,24850],{"class":2237},[147,121190,121191],{"class":504}," ln",[147,121193,121194],{"class":448}," -sf",[147,121196,121197],{"class":504}," libcudnn_cnn_train.so.8.9.7",[147,121199,121200],{"class":504}," libcudnn_cnn_train.so.8\n",[147,121202,121203,121205,121207,121209,121212],{"class":149,"line":1454},[147,121204,24850],{"class":2237},[147,121206,121191],{"class":504},[147,121208,121194],{"class":448},[147,121210,121211],{"class":504}," libcudnn_adv_infer.so.8.9.7",[147,121213,121214],{"class":504}," libcudnn_adv_infer.so.8\n",[147,121216,121217,121219,121221,121223,121226],{"class":149,"line":1469},[147,121218,24850],{"class":2237},[147,121220,121191],{"class":504},[147,121222,121194],{"class":448},[147,121224,121225],{"class":504}," libcudnn_adv_train.so.8.9.7",[147,121227,121228],{"class":504}," libcudnn_adv_train.so.8\n",[147,121230,121231,121233,121235,121237,121240],{"class":149,"line":1475},[147,121232,24850],{"class":2237},[147,121234,121191],{"class":504},[147,121236,121194],{"class":448},[147,121238,121239],{"class":504}," libcudnn_cnn_infer.so.8.9.7",[147,121241,121242],{"class":504}," libcudnn_cnn_infer.so.8\n",[147,121244,121245,121247,121249,121251,121254],{"class":149,"line":1489},[147,121246,24850],{"class":2237},[147,121248,121191],{"class":504},[147,121250,121194],{"class":448},[147,121252,121253],{"class":504}," libcudnn.so.8.9.7",[147,121255,121256],{"class":504}," libcudnn.so.8\n",[147,121258,121259,121261,121263,121265,121268],{"class":149,"line":1495},[147,121260,24850],{"class":2237},[147,121262,121191],{"class":504},[147,121264,121194],{"class":448},[147,121266,121267],{"class":504}," libcudnn_ops_infer.so.8.9.7",[147,121269,121270],{"class":504}," libcudnn_ops_infer.so.8\n",[147,121272,121273,121275,121277,121279,121282],{"class":149,"line":1586},[147,121274,24850],{"class":2237},[147,121276,121191],{"class":504},[147,121278,121194],{"class":448},[147,121280,121281],{"class":504}," libcudnn_ops_train.so.8.9.7",[147,121283,121284],{"class":504}," libcudnn_ops_train.so.8\n",[147,121286,121287],{"class":149,"line":1592},[147,121288,121289],{"class":458},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[147,121291,121292,121294],{"class":149,"line":1604},[147,121293,24850],{"class":2237},[147,121295,121080],{"class":504},[147,121297,121298],{"class":149,"line":1886},[147,121299,121300],{"class":458},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[147,121302,121303,121305,121308,121311,121313,121316],{"class":149,"line":1891},[147,121304,27035],{"class":2237},[147,121306,121307],{"class":448}," -l",[147,121309,121310],{"class":504}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[147,121312,854],{"class":448},[147,121314,121315],{"class":504},".so",[147,121317,119518],{"class":448},[367,121319,121321],{"id":121320},"_355-常见问题","3.5.5 常见问题",[350,121323,121324],{},[353,121325,121326],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[138,121328,121330],{"className":118793,"code":121329,"language":118795,"meta":143,"style":143},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[51,121331,121332],{"__ignoreMap":143},[147,121333,121334,121336,121338],{"class":149,"line":150},[147,121335,24850],{"class":2237},[147,121337,118853],{"class":504},[147,121339,121340],{"class":504}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,121342,121343],{},"blacklist-nouveau.conf文件内容如下：",[138,121345,121347],{"className":118793,"code":121346,"language":118795,"meta":143,"style":143},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[51,121348,121349,121357,121364,121376,121386],{"__ignoreMap":143},[147,121350,121351,121354],{"class":149,"line":150},[147,121352,121353],{"class":2237},"blacklist",[147,121355,121356],{"class":504}," nouveau\n",[147,121358,121359,121361],{"class":149,"line":312},[147,121360,121353],{"class":2237},[147,121362,121363],{"class":504}," lbm-nouveau\n",[147,121365,121366,121368,121371,121374],{"class":149,"line":1454},[147,121367,116200],{"class":2237},[147,121369,121370],{"class":504}," nouveau",[147,121372,121373],{"class":504}," modeset=",[147,121375,3359],{"class":448},[147,121377,121378,121381,121383],{"class":149,"line":1469},[147,121379,121380],{"class":448},"alias",[147,121382,121370],{"class":504},[147,121384,121385],{"class":504}," off\n",[147,121387,121388,121390,121393],{"class":149,"line":1475},[147,121389,121380],{"class":448},[147,121391,121392],{"class":504}," lbm-nouveau",[147,121394,121385],{"class":504},[19,121396,121397],{},"接着运行下方命令",[138,121399,121401],{"className":118793,"code":121400,"language":118795,"meta":143,"style":143},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[51,121402,121403,121413,121418],{"__ignoreMap":143},[147,121404,121405,121407,121410],{"class":149,"line":150},[147,121406,24850],{"class":2237},[147,121408,121409],{"class":504}," update-initramfs",[147,121411,121412],{"class":448}," -u\n",[147,121414,121415],{"class":149,"line":312},[147,121416,121417],{"class":2237},"或者\n",[147,121419,121420,121422,121425],{"class":149,"line":1454},[147,121421,24850],{"class":2237},[147,121423,121424],{"class":504}," dracut",[147,121426,121427],{"class":448}," --force\n",[19,121429,121430],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[138,121432,121434],{"className":118793,"code":121433,"language":118795,"meta":143,"style":143},"lsmod | grep nouveau\n",[51,121435,121436],{"__ignoreMap":143},[147,121437,121438,121441,121443,121445],{"class":149,"line":150},[147,121439,121440],{"class":2237},"lsmod",[147,121442,25383],{"class":397},[147,121444,30510],{"class":2237},[147,121446,121356],{"class":504},[350,121448,121449],{"start":312},[353,121450,121451],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[138,121453,121455],{"className":118793,"code":121454,"language":118795,"meta":143,"style":143},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[51,121456,121457],{"__ignoreMap":143},[147,121458,121459,121461,121463],{"class":149,"line":150},[147,121460,24850],{"class":2237},[147,121462,118853],{"class":504},[147,121464,121465],{"class":504}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,121467,121468],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[138,121470,121472],{"className":118793,"code":121471,"language":118795,"meta":143,"style":143},"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",[51,121473,121474,121482,121490,121498,121505,121513,121523,121531],{"__ignoreMap":143},[147,121475,121476,121479],{"class":149,"line":150},[147,121477,121478],{"class":2237},"Section",[147,121480,121481],{"class":504}," \"OutputClass\"\n",[147,121483,121484,121487],{"class":149,"line":312},[147,121485,121486],{"class":2237},"   Identifier",[147,121488,121489],{"class":504}," \"nvidia\"\n",[147,121491,121492,121495],{"class":149,"line":1454},[147,121493,121494],{"class":2237},"   MatchDriver",[147,121496,121497],{"class":504}," \"nvidia-drm\"\n",[147,121499,121500,121503],{"class":149,"line":1469},[147,121501,121502],{"class":2237},"   Driver",[147,121504,121489],{"class":504},[147,121506,121507,121510],{"class":149,"line":1475},[147,121508,121509],{"class":2237},"   Option",[147,121511,121512],{"class":504}," \"AllowEmptyInitialConfiguration\"\n",[147,121514,121515,121517,121520],{"class":149,"line":1489},[147,121516,121509],{"class":2237},[147,121518,121519],{"class":504}," \"PrimaryGPU\"",[147,121521,121522],{"class":504}," \"yes\"\n",[147,121524,121525,121528],{"class":149,"line":1495},[147,121526,121527],{"class":2237},"   ModulePath",[147,121529,121530],{"class":504}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[147,121532,121533],{"class":149,"line":1586},[147,121534,121535],{"class":2237},"EndSection\n",[350,121537,121538],{"start":1454},[353,121539,121540],{},"安装N卡驱动提示错误",[138,121542,121544],{"className":121086,"code":121543,"language":121088,"meta":121089,"style":143},"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",[51,121545,121546],{"__ignoreMap":143},[147,121547,121548],{"class":149,"line":150},[147,121549,121543],{},[350,121551,121552],{},[353,121553,121554],{},"检查当前运行的内核版本：",[19,121556,121557],{},"运行以下命令以查看你当前正在使用的内核版本：",[138,121559,121561],{"className":117566,"code":121560,"language":117568,"meta":143,"style":143},"uname -r\n",[51,121562,121563],{"__ignoreMap":143},[147,121564,121565,121567],{"class":149,"line":150},[147,121566,70477],{"class":2237},[147,121568,121569],{"class":448}," -r\n",[350,121571,121572],{"start":312},[353,121573,121574],{},"安装内核开发文件：",[19,121576,121577,121578,121581],{},"确保你已经安装了与当前内核版本相匹配的 ",[51,121579,121580],{},"kernel-devel"," 包。运行以下命令来安装：",[138,121583,121585],{"className":117566,"code":121584,"language":117568,"meta":143,"style":143},"sudo dnf install kernel-devel-$(uname -r)\n",[51,121586,121587],{"__ignoreMap":143},[147,121588,121589,121591,121593,121595,121598,121600,121602,121604],{"class":149,"line":150},[147,121590,24850],{"class":2237},[147,121592,26589],{"class":504},[147,121594,24107],{"class":504},[147,121596,121597],{"class":504}," kernel-devel-",[147,121599,25373],{"class":157},[147,121601,70477],{"class":2237},[147,121603,119909],{"class":448},[147,121605,407],{"class":157},[19,121607,121608],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[350,121610,121611],{"start":1454},[353,121612,121613],{},"安装内核源代码（如果需要）：",[19,121615,121616],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[138,121618,121620],{"className":117566,"code":121619,"language":117568,"meta":143,"style":143},"sudo dnf install kernel-headers kernel-source\n",[51,121621,121622],{"__ignoreMap":143},[147,121623,121624,121626,121628,121630,121633],{"class":149,"line":150},[147,121625,24850],{"class":2237},[147,121627,26589],{"class":504},[147,121629,24107],{"class":504},[147,121631,121632],{"class":504}," kernel-headers",[147,121634,121635],{"class":504}," kernel-source\n",[350,121637,121638],{"start":1469},[353,121639,121640],{},"检查安装：",[19,121642,121643,121644,121647],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[51,121645,121646],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[138,121649,121651],{"className":117566,"code":121650,"language":117568,"meta":143,"style":143},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[51,121652,121653],{"__ignoreMap":143},[147,121654,121655,121657],{"class":149,"line":150},[147,121656,27035],{"class":2237},[147,121658,121659],{"class":504}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,121661,121662,121663,121666],{},"如果仍然遇到问题，可以通过 ",[51,121664,121665],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[308,121668,121669],{},"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":143,"searchDepth":312,"depth":312,"links":121671},[121672,121676,121686,121690,121691],{"id":118769,"depth":312,"text":118770,"children":121673},[121674,121675],{"id":118779,"depth":1454,"text":118780},{"id":118789,"depth":1454,"text":118790},{"id":118989,"depth":312,"text":118990,"children":121677},[121678,121679,121680,121681,121682,121683,121684,121685],{"id":118993,"depth":1454,"text":118994},{"id":119063,"depth":1454,"text":119064},{"id":119152,"depth":1454,"text":119153},{"id":119397,"depth":1454,"text":119398},{"id":119467,"depth":1454,"text":119468},{"id":119534,"depth":1454,"text":119535},{"id":119569,"depth":1454,"text":119570},{"id":119624,"depth":1454,"text":119625},{"id":119675,"depth":312,"text":119676,"children":121687},[121688,121689],{"id":119679,"depth":1454,"text":119680},{"id":119759,"depth":1454,"text":119760},{"id":119945,"depth":312,"text":119946},{"id":120118,"depth":312,"text":120119,"children":121692},[121693,121694,121695,121696,121697],{"id":120122,"depth":1454,"text":120123},{"id":120163,"depth":1454,"text":120164},{"id":120450,"depth":1454,"text":120451},{"id":120824,"depth":1454,"text":120825},{"id":121320,"depth":1454,"text":121321},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118761,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121704,"title":121705,"body":121706,"description":321,"extension":322,"meta":122046,"navigation":324,"path":122047,"seo":122048,"stem":122049,"__hash__":122050},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121707,"toc":122044},[121708,121711,121716,121719,121965,121970,121973,122009,122012,122041],[10,121709,121705],{"id":121710},"_4-命令教程长期积累",[350,121712,121713],{},[353,121714,121715],{},"大多数命令",[19,121717,121718],{},"常用 Linux 命令速查：",[138,121720,121722],{"className":117566,"code":121721,"language":117568,"meta":143,"style":143},"# 文件与目录\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",[51,121723,121724,121729,121736,121743,121751,121758,121765,121773,121781,121788,121795,121803,121807,121812,121819,121827,121834,121838,121843,121850,121858,121866,121874,121882,121886,121891,121899,121906,121913,121921,121929,121933,121938,121947,121956],{"__ignoreMap":143},[147,121725,121726],{"class":149,"line":150},[147,121727,121728],{"class":458},"# 文件与目录\n",[147,121730,121731,121733],{"class":149,"line":312},[147,121732,27035],{"class":2237},[147,121734,121735],{"class":458},"        # 列出目录内容\n",[147,121737,121738,121740],{"class":149,"line":1454},[147,121739,101548],{"class":448},[147,121741,121742],{"class":458},"        # 切换目录\n",[147,121744,121745,121748],{"class":149,"line":1469},[147,121746,121747],{"class":448},"pwd",[147,121749,121750],{"class":458},"       # 显示当前路径\n",[147,121752,121753,121755],{"class":149,"line":1475},[147,121754,101538],{"class":2237},[147,121756,121757],{"class":458},"     # 创建目录\n",[147,121759,121760,121762],{"class":149,"line":1489},[147,121761,25596],{"class":2237},[147,121763,121764],{"class":458},"        # 删除文件或目录\n",[147,121766,121767,121770],{"class":149,"line":1495},[147,121768,121769],{"class":2237},"cp",[147,121771,121772],{"class":458},"        # 复制文件或目录\n",[147,121774,121775,121778],{"class":149,"line":1586},[147,121776,121777],{"class":2237},"mv",[147,121779,121780],{"class":458},"        # 移动\u002F重命名文件或目录\n",[147,121782,121783,121785],{"class":149,"line":1592},[147,121784,101555],{"class":2237},[147,121786,121787],{"class":458},"     # 创建空文件\n",[147,121789,121790,121792],{"class":149,"line":1604},[147,121791,121035],{"class":2237},[147,121793,121794],{"class":458},"       # 查看文件内容\n",[147,121796,121797,121800],{"class":149,"line":1886},[147,121798,121799],{"class":2237},"head\u002Ftail",[147,121801,121802],{"class":458}," # 查看文件头部\u002F尾部\n",[147,121804,121805],{"class":149,"line":1891},[147,121806,2674],{"emptyLinePlaceholder":324},[147,121808,121809],{"class":149,"line":1897},[147,121810,121811],{"class":458},"# 权限管理\n",[147,121813,121814,121816],{"class":149,"line":1902},[147,121815,24885],{"class":2237},[147,121817,121818],{"class":458},"     # 修改文件权限\n",[147,121820,121821,121824],{"class":149,"line":1916},[147,121822,121823],{"class":2237},"chown",[147,121825,121826],{"class":458},"     # 修改文件所有者\n",[147,121828,121829,121831],{"class":149,"line":1921},[147,121830,24850],{"class":2237},[147,121832,121833],{"class":458},"      # 以管理员身份执行\n",[147,121835,121836],{"class":149,"line":1927},[147,121837,2674],{"emptyLinePlaceholder":324},[147,121839,121840],{"class":149,"line":1948},[147,121841,121842],{"class":458},"# 系统信息\n",[147,121844,121845,121847],{"class":149,"line":1953},[147,121846,70477],{"class":2237},[147,121848,121849],{"class":458},"     # 系统信息\n",[147,121851,121852,121855],{"class":149,"line":1967},[147,121853,121854],{"class":2237},"df",[147,121856,121857],{"class":458},"        # 磁盘使用情况\n",[147,121859,121860,121863],{"class":149,"line":1972},[147,121861,121862],{"class":2237},"free",[147,121864,121865],{"class":458},"      # 内存使用情况\n",[147,121867,121868,121871],{"class":149,"line":2001},[147,121869,121870],{"class":2237},"top\u002Fhtop",[147,121872,121873],{"class":458},"  # 进程监控\n",[147,121875,121876,121879],{"class":149,"line":2006},[147,121877,121878],{"class":2237},"ps",[147,121880,121881],{"class":458},"        # 查看进程\n",[147,121883,121884],{"class":149,"line":2023},[147,121885,2674],{"emptyLinePlaceholder":324},[147,121887,121888],{"class":149,"line":2028},[147,121889,121890],{"class":458},"# 网络\n",[147,121892,121893,121896],{"class":149,"line":2033},[147,121894,121895],{"class":2237},"ping",[147,121897,121898],{"class":458},"      # 测试网络连通性\n",[147,121900,121901,121903],{"class":149,"line":2038},[147,121902,27123],{"class":2237},[147,121904,121905],{"class":458},"      # 发送 HTTP 请求\n",[147,121907,121908,121910],{"class":149,"line":2052},[147,121909,120559],{"class":2237},[147,121911,121912],{"class":458},"      # 下载文件\n",[147,121914,121915,121918],{"class":149,"line":2057},[147,121916,121917],{"class":2237},"ssh",[147,121919,121920],{"class":458},"       # 远程登录\n",[147,121922,121923,121926],{"class":149,"line":2851},[147,121924,121925],{"class":2237},"scp",[147,121927,121928],{"class":458},"       # 远程文件传输\n",[147,121930,121931],{"class":149,"line":2865},[147,121932,2674],{"emptyLinePlaceholder":324},[147,121934,121935],{"class":149,"line":2873},[147,121936,121937],{"class":458},"# 包管理（Debian\u002FUbuntu）\n",[147,121939,121940,121942,121944],{"class":149,"line":2878},[147,121941,117638],{"class":2237},[147,121943,117617],{"class":504},[147,121945,121946],{"class":458},"   # 更新软件源\n",[147,121948,121949,121951,121953],{"class":149,"line":2884},[147,121950,117638],{"class":2237},[147,121952,24107],{"class":504},[147,121954,121955],{"class":458},"  # 安装软件包\n",[147,121957,121958,121960,121962],{"class":149,"line":2890},[147,121959,117638],{"class":2237},[147,121961,26353],{"class":504},[147,121963,121964],{"class":458},"   # 卸载软件包\n",[350,121966,121967],{"start":312},[353,121968,121969],{},"KDE Dolphin 以root打开",[19,121971,121972],{},"kde5",[138,121974,121976],{"className":117566,"code":121975,"language":117568,"meta":143,"style":143},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[51,121977,121978],{"__ignoreMap":143},[147,121979,121980,121983,121986,121989,121991,121993,121996,121999,122001,122004,122006],{"class":149,"line":150},[147,121981,121982],{"class":2237},"pkexec",[147,121984,121985],{"class":504}," env",[147,121987,121988],{"class":504}," DISPLAY=",[147,121990,28417],{"class":157},[147,121992,28475],{"class":504},[147,121994,121995],{"class":157},"$XAUTHORITY ",[147,121997,121998],{"class":504},"KDE_SESSION_VERSION=",[147,122000,718],{"class":448},[147,122002,122003],{"class":504}," KDE_FULL_SESSION=",[147,122005,1637],{"class":448},[147,122007,122008],{"class":504}," dolphin\n",[19,122010,122011],{},"kde6",[138,122013,122015],{"className":117566,"code":122014,"language":117568,"meta":143,"style":143},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[51,122016,122017],{"__ignoreMap":143},[147,122018,122019,122021,122023,122025,122027,122029,122031,122033,122035,122037,122039],{"class":149,"line":150},[147,122020,121982],{"class":2237},[147,122022,121985],{"class":504},[147,122024,121988],{"class":504},[147,122026,28417],{"class":157},[147,122028,28475],{"class":504},[147,122030,121995],{"class":157},[147,122032,121998],{"class":504},[147,122034,743],{"class":448},[147,122036,122003],{"class":504},[147,122038,1637],{"class":448},[147,122040,122008],{"class":504},[308,122042,122043],{},"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":143,"searchDepth":312,"depth":312,"links":122045},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121705,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":122052,"title":122053,"body":122054,"description":321,"extension":322,"meta":122068,"navigation":324,"path":122069,"seo":122070,"stem":122071,"__hash__":122072},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":122055,"toc":122066},[122056,122059],[10,122057,122053],{"id":122058},"_5-各种环境配置",[19,122060,122061],{},[637,122062,122065],{"href":122063,"rel":122064},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[24138],"电控组环境搭建大全",{"title":143,"searchDepth":312,"depth":312,"links":122067},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":122053,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":122074,"title":122075,"body":122076,"description":321,"extension":322,"meta":122424,"navigation":324,"path":122425,"seo":122426,"stem":122427,"__hash__":122428},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":122077,"toc":122416},[122078,122081,122085,122089,122093,122098,122105,122109,122402,122406,122413],[10,122079,122075],{"id":122080},"_6-拓展功能",[14,122082,122084],{"id":122083},"_61-wine","6.1 Wine",[14,122086,122088],{"id":122087},"_62-android","6.2 Android",[367,122090,122092],{"id":122091},"_621-i卡a卡","6.2.1 I卡、A卡",[350,122094,122095],{},[353,122096,122097],{},"Wayland-Waydroid(体验超级好)",[19,122099,122100,122101],{},"Waydroid 官网与安装指南：",[637,122102,122103],{"href":122103,"rel":122104},"https:\u002F\u002Fwaydro.id\u002F",[24138],[367,122106,122108],{"id":122107},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[350,122110,122111],{},[353,122112,122113,122114,122116,122117,122121,122123,122126,122131,122328],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53989,122115],{},"BlissOS 官网下载：",[637,122118,122119],{"href":122119,"rel":122120},"https:\u002F\u002Fblissos.org\u002F",[24138],[53989,122122],{},[29,122124],{"alt":143,"src":122125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[350,122127,122128],{"start":1454},[353,122129,122130],{},"比较推荐的配置",[138,122132,122134],{"className":117566,"code":122133,"language":117568,"meta":143,"style":143},"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",[51,122135,122136,122143,122153,122163,122173,122185,122195,122202,122212,122221,122230,122240,122250,122259,122269,122279,122291,122301,122310,122320],{"__ignoreMap":143},[147,122137,122138,122141],{"class":149,"line":150},[147,122139,122140],{"class":2237},"qemu-system-x86_64",[147,122142,24952],{"class":448},[147,122144,122145,122148,122151],{"class":149,"line":312},[147,122146,122147],{"class":448},"        -M",[147,122149,122150],{"class":504}," q35,vmport=off",[147,122152,24952],{"class":448},[147,122154,122155,122158,122161],{"class":149,"line":1454},[147,122156,122157],{"class":448},"        -accel",[147,122159,122160],{"class":504}," kvm",[147,122162,24952],{"class":448},[147,122164,122165,122168,122171],{"class":149,"line":1469},[147,122166,122167],{"class":448},"        -cpu",[147,122169,122170],{"class":504}," qemu64,+sse3,+sse4.2",[147,122172,24952],{"class":448},[147,122174,122175,122178,122181,122183],{"class":149,"line":1475},[147,122176,122177],{"class":448},"        -smp",[147,122179,122180],{"class":504}," 8,cores=",[147,122182,692],{"class":448},[147,122184,24952],{"class":448},[147,122186,122187,122190,122193],{"class":149,"line":1489},[147,122188,122189],{"class":448},"        -m",[147,122191,122192],{"class":504}," 6G",[147,122194,24952],{"class":448},[147,122196,122197,122200],{"class":149,"line":1495},[147,122198,122199],{"class":448},"        -usb",[147,122201,24952],{"class":448},[147,122203,122204,122207,122210],{"class":149,"line":1586},[147,122205,122206],{"class":448},"        -device",[147,122208,122209],{"class":504}," virtio-tablet",[147,122211,24952],{"class":448},[147,122213,122214,122216,122219],{"class":149,"line":1592},[147,122215,122206],{"class":448},[147,122217,122218],{"class":504}," virtio-keyboard",[147,122220,24952],{"class":448},[147,122222,122223,122225,122228],{"class":149,"line":1604},[147,122224,122206],{"class":448},[147,122226,122227],{"class":504}," usb-tablet",[147,122229,24952],{"class":448},[147,122231,122232,122235,122238],{"class":149,"line":1886},[147,122233,122234],{"class":448},"        -bios",[147,122236,122237],{"class":504}," OVMF-pure-efi64.fd",[147,122239,24952],{"class":448},[147,122241,122242,122245,122248],{"class":149,"line":1891},[147,122243,122244],{"class":448},"        -net",[147,122246,122247],{"class":504}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[147,122249,24952],{"class":448},[147,122251,122252,122254,122257],{"class":149,"line":1897},[147,122253,122244],{"class":448},[147,122255,122256],{"class":504}," nic,model=virtio",[147,122258,24952],{"class":448},[147,122260,122261,122264,122267],{"class":149,"line":1902},[147,122262,122263],{"class":448},"        -audio",[147,122265,122266],{"class":504}," sdl,model=hda",[147,122268,24952],{"class":448},[147,122270,122271,122274,122277],{"class":149,"line":1916},[147,122272,122273],{"class":448},"        -display",[147,122275,122276],{"class":504}," sdl,gl=on,show-cursor=on",[147,122278,24952],{"class":448},[147,122280,122281,122283,122286,122289],{"class":149,"line":1921},[147,122282,122206],{"class":448},[147,122284,122285],{"class":504}," virtio-vga-gl,xres=1920,yres=",[147,122287,122288],{"class":448},"1080",[147,122290,24952],{"class":448},[147,122292,122293,122296,122299],{"class":149,"line":1927},[147,122294,122295],{"class":448},"        -drive",[147,122297,122298],{"class":504}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[147,122300,24952],{"class":448},[147,122302,122303,122305,122308],{"class":149,"line":1948},[147,122304,122295],{"class":448},[147,122306,122307],{"class":504}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[147,122309,24952],{"class":448},[147,122311,122312,122315,122318],{"class":149,"line":1953},[147,122313,122314],{"class":448},"        -monitor",[147,122316,122317],{"class":504}," stdio",[147,122319,24952],{"class":448},[147,122321,122322,122325],{"class":149,"line":1967},[147,122323,122324],{"class":448},"        -serial",[147,122326,122327],{"class":504}," none\n",[350,122329,122330],{"start":1475},[353,122331,122332,122333],{},"常用操作：",[350,122334,122335,122338,122394],{},[353,122336,122337],{},"全屏：Ctrl+Alt+F",[353,122339,122340,122341,122346],{},"adb调试",[350,122342,122343],{},[353,122344,122345],{},"使Linux与Android用ADB连接。",[138,122347,122349],{"className":117566,"code":122348,"language":117568,"meta":143,"style":143},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[51,122350,122351,122356,122367,122372,122384,122389],{"__ignoreMap":143},[147,122352,122353],{"class":149,"line":150},[147,122354,122355],{"class":458},"# 连接安卓\n",[147,122357,122358,122361,122364],{"class":149,"line":312},[147,122359,122360],{"class":2237},"adb",[147,122362,122363],{"class":504}," connect",[147,122365,122366],{"class":448}," 127.0.0.1\n",[147,122368,122369],{"class":149,"line":1454},[147,122370,122371],{"class":458},"# 打开shell\n",[147,122373,122374,122376,122378,122381],{"class":149,"line":1469},[147,122375,122360],{"class":2237},[147,122377,27157],{"class":448},[147,122379,122380],{"class":504}," 127.0.0.1:5555",[147,122382,122383],{"class":504}," shell\n",[147,122385,122386],{"class":149,"line":1475},[147,122387,122388],{"class":458},"# 使用root权限\n",[147,122390,122391],{"class":149,"line":1489},[147,122392,122393],{"class":2237},"su\n",[353,122395,122396,122397],{},"中文输入法",[350,122398,122399],{},[353,122400,122401],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,122403,122405],{"id":122404},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,122407,122408,122409],{},"rEFInd 官网与文档：",[637,122410,122411],{"href":122411,"rel":122412},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[24138],[308,122414,122415],{},"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":143,"searchDepth":312,"depth":312,"links":122417},[122418,122419,122423],{"id":122083,"depth":312,"text":122084},{"id":122087,"depth":312,"text":122088,"children":122420},[122421,122422],{"id":122091,"depth":1454,"text":122092},{"id":122107,"depth":1454,"text":122108},{"id":122404,"depth":312,"text":122405},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":122075,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122430,"title":122431,"body":122432,"description":321,"extension":322,"meta":125731,"navigation":324,"path":125732,"seo":125733,"stem":125734,"__hash__":125735},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122433,"toc":125705},[122434,122437,122441,122444,122451,122701,122704,122776,122779,122783,122787,122792,122795,122798,122801,122806,122809,122812,122815,122820,122823,122828,122831,122834,122839,122842,122847,122850,122854,122858,122861,122866,122869,122883,122886,122889,122898,122901,122910,122913,122916,122925,122928,122937,122940,122943,122952,122955,122958,122973,122976,122979,122988,122993,122996,122999,123008,123011,123020,123023,123032,123035,123044,123049,123052,123060,123065,123068,123077,123080,123088,123093,123096,123105,123108,123111,123115,123118,123123,123126,123131,123145,123150,123155,123166,123171,123177,123182,123197,123202,123205,123210,123215,123220,123228,123233,123240,123245,123256,123261,123264,123268,123271,123274,123279,123282,123301,123306,123309,123318,123323,123326,123348,123351,123381,123384,123389,123392,123406,123411,123430,123433,123436,123441,123453,123458,123463,123466,123471,123474,123489,123492,123497,123502,123506,123511,123551,123554,123558,123564,123570,123575,123578,123585,123590,123597,123600,123603,123610,123624,123627,123687,123690,123704,123716,123719,123722,123725,123789,123792,123795,123798,123818,123821,123826,123833,123837,123840,123844,123849,123854,123858,123861,123864,123906,123911,123914,123936,123951,123953,123958,123970,124030,124032,124034,124088,124090,124092,124098,124103,124106,124111,124115,124118,124180,124185,124188,124190,124194,124206,124288,124290,124292,124346,124352,124354,124358,124363,124365,124370,124374,124394,124429,124433,124436,124439,124442,124449,124452,124464,124467,124482,124485,124504,124552,124555,124572,124575,124589,124594,124597,124606,124621,124633,124671,124676,124685,124690,124695,124721,124730,124734,124738,124743,124746,124750,124754,124759,124762,124767,124770,124775,124778,124783,124786,124790,124795,124798,124803,124806,124810,124815,124818,124823,124826,124831,124834,124838,124843,124846,124851,124854,124859,124862,124866,124871,124874,124879,124882,124887,124890,124895,124898,124903,124906,124911,124914,124918,124923,124926,124931,124938,124942,124947,124950,124955,124958,124962,124967,124970,124973,124976,124979,124982,124986,124989,124999,125004,125009,125031,125036,125041,125048,125052,125057,125060,125063,125068,125071,125074,125077,125080,125083,125086,125089,125092,125095,125098,125101,125104,125109,125114,125119,125124,125129,125134,125139,125142,125146,125149,125153,125158,125163,125168,125173,125177,125183,125191,125196,125199,125204,125219,125222,125227,125261,125276,125279,125334,125360,125372,125375,125384,125387,125402,125407,125410,125416,125421,125424,125429,125432,125437,125442,125449,125452,125467,125470,125505,125510,125518,125556,125559,125562,125567,125570,125575,125586,125620,125625,125628,125637,125642,125648,125651,125656,125665,125670,125673,125676,125681,125689,125692,125697,125702],[10,122435,122431],{"id":122436},"_7-其他操作",[14,122438,122440],{"id":122439},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,122442,122443],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,122445,122446,122447,122450],{},"进入工控机的硬盘目录，进入",[51,122448,122449],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[138,122452,122456],{"className":122453,"code":122454,"language":122455,"meta":143,"style":143},"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",[51,122457,122458,122466,122477,122484,122491,122503,122510,122522,122533,122544,122551,122558,122565,122577,122589,122596,122608,122620,122627,122639,122651,122663,122674,122681,122692],{"__ignoreMap":143},[147,122459,122460,122463],{"class":149,"line":150},[147,122461,122462],{"class":153},"network",[147,122464,122465],{"class":157},": \n",[147,122467,122468,122471,122473,122475],{"class":149,"line":312},[147,122469,122470],{"class":153},"  version",[147,122472,51710],{"class":157},[147,122474,477],{"class":448},[147,122476,2948],{"class":157},[147,122478,122479,122482],{"class":149,"line":1454},[147,122480,122481],{"class":153},"  wifis",[147,122483,122465],{"class":157},[147,122485,122486,122489],{"class":149,"line":1469},[147,122487,122488],{"class":153},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[147,122490,122465],{"class":157},[147,122492,122493,122496,122498,122501],{"class":149,"line":1475},[147,122494,122495],{"class":153},"      renderer",[147,122497,51710],{"class":157},[147,122499,122500],{"class":504},"NetworkManager",[147,122502,2948],{"class":157},[147,122504,122505,122508],{"class":149,"line":1489},[147,122506,122507],{"class":153},"      match",[147,122509,122465],{"class":157},[147,122511,122512,122515,122517,122520],{"class":149,"line":1495},[147,122513,122514],{"class":153},"        name",[147,122516,51710],{"class":157},[147,122518,122519],{"class":504},"\"wlan0\"",[147,122521,2948],{"class":157},[147,122523,122524,122527,122529,122531],{"class":149,"line":1586},[147,122525,122526],{"class":153},"      dhcp4",[147,122528,51710],{"class":157},[147,122530,1637],{"class":448},[147,122532,2948],{"class":157},[147,122534,122535,122538,122540,122542],{"class":149,"line":1592},[147,122536,122537],{"class":153},"      dhcp6",[147,122539,51710],{"class":157},[147,122541,1637],{"class":448},[147,122543,2948],{"class":157},[147,122545,122546,122549],{"class":149,"line":1604},[147,122547,122548],{"class":153},"      access-points",[147,122550,122465],{"class":157},[147,122552,122553,122556],{"class":149,"line":1886},[147,122554,122555],{"class":504},"        \"EMIS_Vinci_Robocon_5G\"",[147,122557,122465],{"class":157},[147,122559,122560,122563],{"class":149,"line":1891},[147,122561,122562],{"class":153},"          auth",[147,122564,122465],{"class":157},[147,122566,122567,122570,122572,122575],{"class":149,"line":1897},[147,122568,122569],{"class":153},"            key-management",[147,122571,51710],{"class":157},[147,122573,122574],{"class":504},"\"psk\"",[147,122576,2948],{"class":157},[147,122578,122579,122582,122584,122587],{"class":149,"line":1902},[147,122580,122581],{"class":153},"            password",[147,122583,51710],{"class":157},[147,122585,122586],{"class":504},"\"vinci666\"",[147,122588,2948],{"class":157},[147,122590,122591,122594],{"class":149,"line":1916},[147,122592,122593],{"class":153},"          networkmanager",[147,122595,122465],{"class":157},[147,122597,122598,122601,122603,122606],{"class":149,"line":1921},[147,122599,122600],{"class":153},"            uuid",[147,122602,51710],{"class":157},[147,122604,122605],{"class":504},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[147,122607,2948],{"class":157},[147,122609,122610,122613,122615,122618],{"class":149,"line":1927},[147,122611,122612],{"class":153},"            name",[147,122614,51710],{"class":157},[147,122616,122617],{"class":504},"\"EMIS_Vinci_Robocon_5G\"",[147,122619,2948],{"class":157},[147,122621,122622,122625],{"class":149,"line":1948},[147,122623,122624],{"class":153},"            passthrough",[147,122626,122465],{"class":157},[147,122628,122629,122632,122634,122637],{"class":149,"line":1953},[147,122630,122631],{"class":153},"              wifi-security.auth-alg",[147,122633,51710],{"class":157},[147,122635,122636],{"class":504},"\"open\"",[147,122638,2948],{"class":157},[147,122640,122641,122644,122646,122649],{"class":149,"line":1967},[147,122642,122643],{"class":153},"              ipv6.addr-gen-mode",[147,122645,51710],{"class":157},[147,122647,122648],{"class":504},"\"default\"",[147,122650,2948],{"class":157},[147,122652,122653,122656,122658,122661],{"class":149,"line":1972},[147,122654,122655],{"class":153},"              ipv6.ip6-privacy",[147,122657,51710],{"class":157},[147,122659,122660],{"class":504},"\"-1\"",[147,122662,2948],{"class":157},[147,122664,122665,122668,122670,122672],{"class":149,"line":2001},[147,122666,122667],{"class":153},"              proxy._",[147,122669,51710],{"class":157},[147,122671,7926],{"class":504},[147,122673,2948],{"class":157},[147,122675,122676,122679],{"class":149,"line":2006},[147,122677,122678],{"class":153},"      networkmanager",[147,122680,122465],{"class":157},[147,122682,122683,122686,122688,122690],{"class":149,"line":2023},[147,122684,122685],{"class":153},"        uuid",[147,122687,51710],{"class":157},[147,122689,122605],{"class":504},[147,122691,2948],{"class":157},[147,122693,122694,122696,122698],{"class":149,"line":2028},[147,122695,122514],{"class":153},[147,122697,51710],{"class":157},[147,122699,122700],{"class":504},"\"EMIS_Vinci_Robocon_5G\"\n",[19,122702,122703],{},"将其改为新wifi的名和密码：",[138,122705,122707],{"className":122453,"code":122706,"language":122455,"meta":143,"style":143},"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",[51,122708,122709,122715,122724,122730,122737,122746,122754,122760,122766],{"__ignoreMap":143},[147,122710,122711,122713],{"class":149,"line":150},[147,122712,122462],{"class":153},[147,122714,4013],{"class":157},[147,122716,122717,122719,122721],{"class":149,"line":312},[147,122718,122470],{"class":153},[147,122720,51710],{"class":157},[147,122722,122723],{"class":448},"2\n",[147,122725,122726,122728],{"class":149,"line":1454},[147,122727,122481],{"class":153},[147,122729,4013],{"class":157},[147,122731,122732,122735],{"class":149,"line":1469},[147,122733,122734],{"class":153},"    wlan0",[147,122736,4013],{"class":157},[147,122738,122739,122741,122743],{"class":149,"line":1475},[147,122740,122526],{"class":153},[147,122742,51710],{"class":157},[147,122744,122745],{"class":448},"true\n",[147,122747,122748,122750,122752],{"class":149,"line":1489},[147,122749,122537],{"class":153},[147,122751,51710],{"class":157},[147,122753,122745],{"class":448},[147,122755,122756,122758],{"class":149,"line":1495},[147,122757,122548],{"class":153},[147,122759,4013],{"class":157},[147,122761,122762,122764],{"class":149,"line":1586},[147,122763,122555],{"class":504},[147,122765,4013],{"class":157},[147,122767,122768,122771,122773],{"class":149,"line":1592},[147,122769,122770],{"class":153},"          password",[147,122772,51710],{"class":157},[147,122774,122775],{"class":504},"\"vinci666\"\n",[19,122777,122778],{},"工控机开机即可连上网。",[14,122780,122782],{"id":122781},"_72-ssh远程开发","7.2 SSH远程开发",[367,122784,122786],{"id":122785},"_721-环境准备","7.2.1 环境准备",[19,122788,122789],{},[234,122790,122791],{},"1.硬件准备",[19,122793,122794],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,122796,122797],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,122799,122800],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,122802,122803],{},[234,122804,122805],{},"2.设置固定IP",[19,122807,122808],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,122810,122811],{},"1.进入设置界面",[19,122813,122814],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,122816,122817],{},[29,122818],{"alt":143,"src":122819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,122821,122822],{},"2.配置所连接的网络",[19,122824,122825],{},[29,122826],{"alt":143,"src":122827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,122829,122830],{},"3.设置固定IP",[19,122832,122833],{},"查看当前IP地址。",[19,122835,122836],{},[29,122837],{"alt":143,"src":122838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,122840,122841],{},"设置固定IP。",[19,122843,122844],{},[29,122845],{"alt":143,"src":122846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,122848,122849],{},"至此，IP配置完毕。",[367,122851,122853],{"id":122852},"_722-环境搭建","7.2.2 环境搭建",[19,122855,122856],{},[234,122857,26027],{},[19,122859,122860],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,122862,122863],{},[234,122864,122865],{},"实现",[19,122867,122868],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[350,122870,122871,122874,122877,122880],{},[353,122872,122873],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[353,122875,122876],{},"远程主机启动SSH服务；",[353,122878,122879],{},"本地主机登陆远程主机；",[353,122881,122882],{},"实现数据传输。",[19,122884,122885],{},"1.安装SSH客户端与服务端",[19,122887,122888],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[138,122890,122892],{"className":121086,"code":122891,"language":121088,"meta":121089,"style":143}," sudo apt install openssh-server\n",[51,122893,122894],{"__ignoreMap":143},[147,122895,122896],{"class":149,"line":150},[147,122897,122891],{},[19,122899,122900],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[138,122902,122904],{"className":121086,"code":122903,"language":121088,"meta":121089,"style":143},"sudo apt install openssh-client\n",[51,122905,122906],{"__ignoreMap":143},[147,122907,122908],{"class":149,"line":150},[147,122909,122903],{},[19,122911,122912],{},"2.远程主机启动SSH服务",[19,122914,122915],{},"远程主机启动 ssh 服务命令如下：",[138,122917,122919],{"className":121086,"code":122918,"language":121088,"meta":121089,"style":143},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[51,122920,122921],{"__ignoreMap":143},[147,122922,122923],{"class":149,"line":150},[147,122924,122918],{},[19,122926,122927],{},"启动后可使用如下命令查看服务是否正常运行：",[138,122929,122931],{"className":121086,"code":122930,"language":121088,"meta":121089,"style":143},"ps -e | grep ssh\n",[51,122932,122933],{"__ignoreMap":143},[147,122934,122935],{"class":149,"line":150},[147,122936,122930],{},[19,122938,122939],{},"如果启动成功，会包含 sshd 程序。",[19,122941,122942],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[138,122944,122946],{"className":121086,"code":122945,"language":121088,"meta":121089,"style":143},"sudo systemctl enable ssh\n",[51,122947,122948],{"__ignoreMap":143},[147,122949,122950],{"class":149,"line":150},[147,122951,122945],{},[19,122953,122954],{},"3.本地远程登录",[19,122956,122957],{},"登录远程主机可以调用如下命令:",[138,122959,122961],{"className":117566,"code":122960,"language":117568,"meta":143,"style":143},"ssh -X 用户名@ip地址\n",[51,122962,122963],{"__ignoreMap":143},[147,122964,122965,122967,122970],{"class":149,"line":150},[147,122966,121917],{"class":2237},[147,122968,122969],{"class":448}," -X",[147,122971,122972],{"class":504}," 用户名@ip地址\n",[19,122974,122975],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,122977,122978],{},"如果退出，可以调用exit命令：",[138,122980,122982],{"className":121086,"code":122981,"language":121088,"meta":121089,"style":143},"exit\n",[51,122983,122984],{"__ignoreMap":143},[147,122985,122986],{"class":149,"line":150},[147,122987,122981],{},[19,122989,122990],{},[234,122991,122992],{},"4.实现数据传输",[19,122994,122995],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,122997,122998],{},"上传文件指令格式如下：",[138,123000,123002],{"className":121086,"code":123001,"language":121088,"meta":121089,"style":143},"scp 本地文件路径 账号@ip:路径\n",[51,123003,123004],{"__ignoreMap":143},[147,123005,123006],{"class":149,"line":150},[147,123007,123001],{},[19,123009,123010],{},"上传文件夹指令格式如下：",[138,123012,123014],{"className":121086,"code":123013,"language":121088,"meta":121089,"style":143},"scp -r 本地文件夹路径 账号@ip:路径\n",[51,123015,123016],{"__ignoreMap":143},[147,123017,123018],{"class":149,"line":150},[147,123019,123013],{},[19,123021,123022],{},"下载文件指令格式如下：",[138,123024,123026],{"className":121086,"code":123025,"language":121088,"meta":121089,"style":143},"scp 账号@ip:路径 本地文件夹路径\n",[51,123027,123028],{"__ignoreMap":143},[147,123029,123030],{"class":149,"line":150},[147,123031,123025],{},[19,123033,123034],{},"下载文件夹指令格式如下：",[138,123036,123038],{"className":121086,"code":123037,"language":121088,"meta":121089,"style":143},"scp -r 账号@ip:路径 本地文件夹路径\n",[51,123039,123040],{"__ignoreMap":143},[147,123041,123042],{"class":149,"line":150},[147,123043,123037],{},[19,123045,123046],{},[234,123047,123048],{},"优化",[19,123050,123051],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[350,123053,123054,123057],{},[353,123055,123056],{},"本地生成密钥对；",[353,123058,123059],{},"将公钥上传至远程主机。",[19,123061,123062],{},[234,123063,123064],{},"1.生成密钥对",[19,123066,123067],{},"本地客户端生成公私钥：（一路回车默认即可）",[138,123069,123071],{"className":121086,"code":123070,"language":121088,"meta":121089,"style":143},"ssh-keygen\n",[51,123072,123073],{"__ignoreMap":143},[147,123074,123075],{"class":149,"line":150},[147,123076,123070],{},[19,123078,123079],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[350,123081,123082,123085],{},[353,123083,123084],{},"id_rsa （私钥）；",[353,123086,123087],{},"id_rsa.pub (公钥)。",[19,123089,123090],{},[234,123091,123092],{},"2.公钥上传",[19,123094,123095],{},"上传指令如下：",[138,123097,123099],{"className":121086,"code":123098,"language":121088,"meta":121089,"style":143},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[51,123100,123101],{"__ignoreMap":143},[147,123102,123103],{"class":149,"line":150},[147,123104,123098],{},[19,123106,123107],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,123109,123110],{},"以后再远程登录就无需录入密码了。",[367,123112,123114],{"id":123113},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,123116,123117],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,123119,123120],{},[234,123121,123122],{},"1.准备工作",[19,123124,123125],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,123127,123128],{},[234,123129,123130],{},"2.为VScode安装远程开发插件",[19,123132,123133,123134,123137,123138,123141,123142,28659],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[51,123135,123136],{},"扩展：商店","的搜索栏输入",[51,123139,123140],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[51,123143,123144],{},"安装",[19,123146,123147],{},[29,123148],{"alt":143,"src":123149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,123151,123152],{},[234,123153,123154],{},"3.配置远程连接",[19,123156,123157,123158,123161,123162,123165],{},"步骤1：使用快捷键",[51,123159,123160],{},"ctrl + shift + p","打开命令输入窗口，并输入",[51,123163,123164],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,123167,123168],{},[29,123169],{"alt":143,"src":123170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,123172,123173,123174,28659],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[51,123175,123176],{},"Add New SSH Host",[19,123178,123179],{},[29,123180],{"alt":143,"src":123181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,123183,123184,123185,123188,123189,123192,123193,123196],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[51,123186,123187],{},"ssh +X ubuntu@192.168.43.164","，其中，",[51,123190,123191],{},"ubuntu","需要替换为你的登录用户名，",[51,123194,123195],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,123198,123199],{},[29,123200],{"alt":143,"src":123201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,123203,123204],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,123206,123207],{},[29,123208],{"alt":143,"src":123209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,123211,123212],{},[29,123213],{"alt":143,"src":123214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,123216,123217],{},[234,123218,123219],{},"4.使用",[19,123221,123222,123223,123161,123225,123227],{},"步骤1：继续使用快捷键",[51,123224,123160],{},[51,123226,123164],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,123229,123230],{},[29,123231],{"alt":143,"src":123232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,123234,123235,123236,123239],{},"或者，也可以点击侧边栏的",[51,123237,123238],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,123241,123242],{},[29,123243],{"alt":143,"src":123244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,123246,123247,123248,123251,123252,123255],{},"步骤2：选择菜单栏的",[51,123249,123250],{},"文件","下的",[51,123253,123254],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,123257,123258],{},[29,123259],{"alt":143,"src":123260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,123262,123263],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,123265,123267],{"id":123266},"_73-远程桌面","7.3 远程桌面",[19,123269,123270],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,123272,123273],{},"我们选择使用VNC来看。",[350,123275,123276],{},[353,123277,123278],{},"安装VNC服务器：",[19,123280,123281],{},"这里以TigerVNC为例进行安装：",[138,123283,123285],{"className":117566,"code":123284,"language":117568,"meta":143,"style":143},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[51,123286,123287],{"__ignoreMap":143},[147,123288,123289,123291,123293,123295,123298],{"class":149,"line":150},[147,123290,24850],{"class":2237},[147,123292,117587],{"class":504},[147,123294,24107],{"class":504},[147,123296,123297],{"class":504}," tigervnc-standalone-server",[147,123299,123300],{"class":504}," tigervnc-common\n",[350,123302,123303],{"start":312},[353,123304,123305],{},"设置VNC密码：",[19,123307,123308],{},"为VNC用户设置密码，运行以下命令：",[138,123310,123312],{"className":117566,"code":123311,"language":117568,"meta":143,"style":143},"vncpasswd\n",[51,123313,123314],{"__ignoreMap":143},[147,123315,123316],{"class":149,"line":150},[147,123317,123311],{"class":2237},[350,123319,123320],{"start":1454},[353,123321,123322],{},"配置VNC启动脚本:",[19,123324,123325],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[138,123327,123329],{"className":117566,"code":123328,"language":117568,"meta":143,"style":143},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[51,123330,123331,123340],{"__ignoreMap":143},[147,123332,123333,123335,123337],{"class":149,"line":150},[147,123334,101538],{"class":2237},[147,123336,29490],{"class":448},[147,123338,123339],{"class":504}," ~\u002F.vnc\n",[147,123341,123342,123345],{"class":149,"line":312},[147,123343,123344],{"class":2237},"nano",[147,123346,123347],{"class":504}," ~\u002F.vnc\u002Fxstartup\n",[19,123349,123350],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[138,123352,123354],{"className":117566,"code":123353,"language":117568,"meta":143,"style":143},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[51,123355,123356,123361,123369,123376],{"__ignoreMap":143},[147,123357,123358],{"class":149,"line":150},[147,123359,123360],{"class":458},"#!\u002Fbin\u002Fsh\n",[147,123362,123363,123366],{"class":149,"line":312},[147,123364,123365],{"class":448},"unset",[147,123367,123368],{"class":504}," SESSION_MANAGER\n",[147,123370,123371,123373],{"class":149,"line":1454},[147,123372,123365],{"class":448},[147,123374,123375],{"class":504}," DBUS_SESSION_BUS_ADDRESS\n",[147,123377,123378],{"class":149,"line":1469},[147,123379,123380],{"class":2237},"gnome-session\n",[19,123382,123383],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[350,123385,123386],{"start":1469},[353,123387,123388],{},"给予执行权限：",[19,123390,123391],{},"为xstartup文件设置执行权限：",[138,123393,123395],{"className":117566,"code":123394,"language":117568,"meta":143,"style":143},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[51,123396,123397],{"__ignoreMap":143},[147,123398,123399,123401,123404],{"class":149,"line":150},[147,123400,24885],{"class":2237},[147,123402,123403],{"class":504}," +x",[147,123405,123347],{"class":504},[350,123407,123408],{"start":1475},[353,123409,123410],{},"启动VNC服务器：",[138,123412,123414],{"className":117566,"code":123413,"language":117568,"meta":143,"style":143},"vncserver -geometry 1920x1080 -localhost=0\n",[51,123415,123416],{"__ignoreMap":143},[147,123417,123418,123421,123424,123427],{"class":149,"line":150},[147,123419,123420],{"class":2237},"vncserver",[147,123422,123423],{"class":448}," -geometry",[147,123425,123426],{"class":504}," 1920x1080",[147,123428,123429],{"class":448}," -localhost=0\n",[19,123431,123432],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,123434,123435],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[350,123437,123438],{"start":1489},[353,123439,123440],{},"查看已开启的VNC服务器：",[138,123442,123444],{"className":117566,"code":123443,"language":117568,"meta":143,"style":143},"vncserver -list\n",[51,123445,123446],{"__ignoreMap":143},[147,123447,123448,123450],{"class":149,"line":150},[147,123449,123420],{"class":2237},[147,123451,123452],{"class":448}," -list\n",[19,123454,123455],{},[29,123456],{"alt":143,"src":123457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[350,123459,123460],{"start":1495},[353,123461,123462],{},"连接到VNC服务器：",[19,123464,123465],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[350,123467,123468],{"start":1586},[353,123469,123470],{},"停止VNC服务器：",[19,123472,123473],{},"如果需要停止VNC服务器，可以使用以下命令：",[138,123475,123477],{"className":117566,"code":123476,"language":117568,"meta":143,"style":143},"vncserver -kill :1\n",[51,123478,123479],{"__ignoreMap":143},[147,123480,123481,123483,123486],{"class":149,"line":150},[147,123482,123420],{"class":2237},[147,123484,123485],{"class":448}," -kill",[147,123487,123488],{"class":504}," :1\n",[19,123490,123491],{},"将:1替换为你实际使用的显示编号。",[19,123493,123494],{},[29,123495],{"alt":143,"src":123496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,123498,123499],{},[29,123500],{"alt":143,"src":123501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,123503,123505],{"id":123504},"_74-usb端口设置","7.4 USB端口设置",[19,123507,123508],{},[234,123509,123510],{},"首先先配置好权限",[138,123512,123514],{"className":117566,"code":123513,"language":117568,"meta":143,"style":143},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[51,123515,123516,123521,123534,123541,123546],{"__ignoreMap":143},[147,123517,123518],{"class":149,"line":150},[147,123519,123520],{"class":458},"# 将用户权限提高\n",[147,123522,123523,123525,123527,123529,123532],{"class":149,"line":312},[147,123524,24850],{"class":2237},[147,123526,26848],{"class":504},[147,123528,26851],{"class":448},[147,123530,123531],{"class":504}," dialout",[147,123533,26856],{"class":157},[147,123535,123536,123538],{"class":149,"line":1454},[147,123537,26875],{"class":2237},[147,123539,123540],{"class":504}," dialout\n",[147,123542,123543],{"class":149,"line":1469},[147,123544,123545],{"class":458},"# 查看下面命令是否输出dialout（若输出才正常）\n",[147,123547,123548],{"class":149,"line":1475},[147,123549,123550],{"class":2237},"groups\n",[19,123552,123553],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[367,123555,123557],{"id":123556},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,123559,123560,123563],{},[234,123561,123562],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,123565,123566,123569],{},[234,123567,123568],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,123571,123572],{},[234,123573,123574],{},"流程如下：",[19,123576,123577],{},"（1）.查找设备idVendor和idProduct",[19,123579,123580,123581,123584],{},"接入两个USB设备，在终端调用指令",[51,123582,123583],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,123586,123587],{},[29,123588],{"alt":143,"src":123589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,123591,123592,123593,123596],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[51,123594,123595],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,123598,123599],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,123601,123602],{},"（2）.编写映射规则",[19,123604,123605,123606,123609],{},"在",[51,123607,123608],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[138,123611,123613],{"className":117566,"code":123612,"language":117568,"meta":143,"style":143},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[51,123614,123615],{"__ignoreMap":143},[147,123616,123617,123619,123621],{"class":149,"line":150},[147,123618,24850],{"class":2237},[147,123620,118853],{"class":504},[147,123622,123623],{"class":504}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,123625,123626],{},"输入如下内容：",[138,123628,123630],{"className":117566,"code":123629,"language":117568,"meta":143,"style":143},"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",[51,123631,123632,123662],{"__ignoreMap":143},[147,123633,123634,123637,123639,123642,123645,123648,123651,123653,123656,123659],{"class":149,"line":150},[147,123635,123636],{"class":157},"KERNEL",[147,123638,445],{"class":397},[147,123640,123641],{"class":504},"=\"ttyUSB*\",",[147,123643,123644],{"class":2237}," ATTRS",[147,123646,123647],{"class":504},"{idVendor}==",[147,123649,123650],{"class":2237},"\"10c4\"",[147,123652,777],{"class":2237},[147,123654,123655],{"class":504}," ATTRS{idProduct}==\"ea60\",",[147,123657,123658],{"class":504}," MODE:=\"0777\",",[147,123660,123661],{"class":504}," SYMLINK+=\"mylidar\"\n",[147,123663,123664,123666,123668,123670,123672,123674,123677,123679,123682,123684],{"class":149,"line":312},[147,123665,123636],{"class":157},[147,123667,445],{"class":397},[147,123669,123641],{"class":504},[147,123671,123644],{"class":2237},[147,123673,123647],{"class":504},[147,123675,123676],{"class":2237},"\"1a86\"",[147,123678,777],{"class":2237},[147,123680,123681],{"class":504}," ATTRS{idProduct}==\"7523\",",[147,123683,123658],{"class":504},[147,123685,123686],{"class":504}," SYMLINK+=\"mycar\"\n",[19,123688,123689],{},"代码解释：",[1406,123691,123692,123695,123698,123701],{},[353,123693,123694],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[353,123696,123697],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[353,123699,123700],{},"SYMLINK是符号连接，即绑定的别名；",[353,123702,123703],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,123705,123706,123707,123710,123713],{},"***小提示：***",[23826,123708,123709],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[51,123711,123712],{},"\u002Fetc\u002Fudev\u002Frule.d",[23826,123714,123715],{},"目录即可。",[19,123717,123718],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,123720,123721],{},"（3）.使规则生效",[19,123723,123724],{},"在终端下输入如下指令：",[138,123726,123728],{"className":117566,"code":123727,"language":117568,"meta":143,"style":143},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[51,123729,123730,123735,123747,123758,123762,123767,123780],{"__ignoreMap":143},[147,123731,123732],{"class":149,"line":150},[147,123733,123734],{"class":458},"# Ubuntu用下方命令\n",[147,123736,123737,123739,123741,123744],{"class":149,"line":312},[147,123738,24850],{"class":2237},[147,123740,120318],{"class":504},[147,123742,123743],{"class":504}," udev",[147,123745,123746],{"class":504}," reload\n",[147,123748,123749,123751,123753,123755],{"class":149,"line":1454},[147,123750,24850],{"class":2237},[147,123752,120318],{"class":504},[147,123754,123743],{"class":504},[147,123756,123757],{"class":504}," restart\n",[147,123759,123760],{"class":149,"line":1469},[147,123761,2674],{"emptyLinePlaceholder":324},[147,123763,123764],{"class":149,"line":1475},[147,123765,123766],{"class":458},"#Fedora用下方命令\n",[147,123768,123769,123771,123774,123777],{"class":149,"line":1489},[147,123770,24850],{"class":2237},[147,123772,123773],{"class":504}," udevadm",[147,123775,123776],{"class":504}," control",[147,123778,123779],{"class":448}," --reload\n",[147,123781,123782,123784,123786],{"class":149,"line":1495},[147,123783,24850],{"class":2237},[147,123785,123773],{"class":504},[147,123787,123788],{"class":504}," trigger\n",[19,123790,123791],{},"再重新插拔设备即可。",[19,123793,123794],{},"（4）.测试",[19,123796,123797],{},"终端下输入如下指令",[138,123799,123801],{"className":117566,"code":123800,"language":117568,"meta":143,"style":143},"ll \u002Fdev | grep ttyUSB\n",[51,123802,123803],{"__ignoreMap":143},[147,123804,123805,123808,123811,123813,123815],{"class":149,"line":150},[147,123806,123807],{"class":2237},"ll",[147,123809,123810],{"class":504}," \u002Fdev",[147,123812,25383],{"class":397},[147,123814,30510],{"class":2237},[147,123816,123817],{"class":504}," ttyUSB\n",[19,123819,123820],{},"运行结果如下：",[19,123822,123823],{},[29,123824],{"alt":143,"src":123825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,123827,123828,123829,123832],{},"也可以多次插拔USB设备，会发现设备端口",[51,123830,123831],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,123834,123835],{},[234,123836,118234],{},[19,123838,123839],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[367,123841,123843],{"id":123842},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,123845,123846,123848],{},[234,123847,123562],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,123850,123851,123853],{},[234,123852,123568],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,123855,123856],{},[234,123857,123574],{},[19,123859,123860],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,123862,123863],{},"调用如下指令查看第一台雷达的USB信息：",[138,123865,123867],{"className":117566,"code":123866,"language":117568,"meta":143,"style":143},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[51,123868,123869,123889],{"__ignoreMap":143},[147,123870,123871,123874,123876,123879,123882,123884,123886],{"class":149,"line":150},[147,123872,123873],{"class":2237},"udevadm",[147,123875,70094],{"class":504},[147,123877,123878],{"class":448}," --attribute-walk",[147,123880,123881],{"class":448}," --name=\u002Fdev\u002FttyUSB0",[147,123883,25383],{"class":397},[147,123885,30510],{"class":2237},[147,123887,123888],{"class":504}," KERNELS\n",[147,123890,123891,123893,123895,123897,123900,123902,123904],{"class":149,"line":312},[147,123892,123873],{"class":2237},[147,123894,70094],{"class":504},[147,123896,123878],{"class":448},[147,123898,123899],{"class":448}," --name=\u002Fdev\u002FttyACM0",[147,123901,25383],{"class":397},[147,123903,30510],{"class":2237},[147,123905,123888],{"class":504},[19,123907,123908],{},[29,123909],{"alt":143,"src":123910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,123912,123913],{},"调用如下指令查看第二台雷达的USB信息：",[138,123915,123917],{"className":117566,"code":123916,"language":117568,"meta":143,"style":143},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[51,123918,123919],{"__ignoreMap":143},[147,123920,123921,123923,123925,123927,123930,123932,123934],{"class":149,"line":150},[147,123922,123873],{"class":2237},[147,123924,70094],{"class":504},[147,123926,123878],{"class":448},[147,123928,123929],{"class":448}," --name=\u002Fdev\u002FttyUSB1",[147,123931,25383],{"class":397},[147,123933,30510],{"class":2237},[147,123935,123888],{"class":504},[19,123937,123938,123939,123942,123943,123946,123947,123950],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[51,123940,123941],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[51,123944,123945],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[234,123948,123949],{},"唯一性标识","”。",[19,123952,123602],{},[19,123954,123605,123955,123957],{},[51,123956,123608],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[138,123959,123960],{"className":117566,"code":123612,"language":117568,"meta":143,"style":143},[51,123961,123962],{"__ignoreMap":143},[147,123963,123964,123966,123968],{"class":149,"line":150},[147,123965,24850],{"class":2237},[147,123967,118853],{"class":504},[147,123969,123623],{"class":504},[138,123971,123973],{"className":117566,"code":123972,"language":117568,"meta":143,"style":143},"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",[51,123974,123975,124004],{"__ignoreMap":143},[147,123976,123977,123979,123981,123983,123986,123988,123991,123994,123996,123999,124001],{"class":149,"line":150},[147,123978,123636],{"class":157},[147,123980,445],{"class":397},[147,123982,123641],{"class":504},[147,123984,123985],{"class":157}," KERNELS",[147,123987,445],{"class":397},[147,123989,123990],{"class":504},"=\"1-1.3:1.0\",",[147,123992,123993],{"class":2237}," MODE:",[147,123995,445],{"class":504},[147,123997,123998],{"class":2237},"\"0777\"",[147,124000,777],{"class":2237},[147,124002,124003],{"class":504}," SYMLINK+=\"rplidar_front\"\n",[147,124005,124006,124008,124010,124012,124014,124016,124019,124021,124023,124025,124027],{"class":149,"line":312},[147,124007,123636],{"class":157},[147,124009,445],{"class":397},[147,124011,123641],{"class":504},[147,124013,123985],{"class":157},[147,124015,445],{"class":397},[147,124017,124018],{"class":504},"=\"1-1.4:1.0\",",[147,124020,123993],{"class":2237},[147,124022,445],{"class":504},[147,124024,123998],{"class":2237},[147,124026,777],{"class":2237},[147,124028,124029],{"class":504}," SYMLINK+=\"rplidar_back\"\n",[19,124031,123721],{},[19,124033,123724],{},[138,124035,124036],{"className":117566,"code":123727,"language":117568,"meta":143,"style":143},[51,124037,124038,124042,124052,124062,124066,124070,124080],{"__ignoreMap":143},[147,124039,124040],{"class":149,"line":150},[147,124041,123734],{"class":458},[147,124043,124044,124046,124048,124050],{"class":149,"line":312},[147,124045,24850],{"class":2237},[147,124047,120318],{"class":504},[147,124049,123743],{"class":504},[147,124051,123746],{"class":504},[147,124053,124054,124056,124058,124060],{"class":149,"line":1454},[147,124055,24850],{"class":2237},[147,124057,120318],{"class":504},[147,124059,123743],{"class":504},[147,124061,123757],{"class":504},[147,124063,124064],{"class":149,"line":1469},[147,124065,2674],{"emptyLinePlaceholder":324},[147,124067,124068],{"class":149,"line":1475},[147,124069,123766],{"class":458},[147,124071,124072,124074,124076,124078],{"class":149,"line":1489},[147,124073,24850],{"class":2237},[147,124075,123773],{"class":504},[147,124077,123776],{"class":504},[147,124079,123779],{"class":448},[147,124081,124082,124084,124086],{"class":149,"line":1495},[147,124083,24850],{"class":2237},[147,124085,123773],{"class":504},[147,124087,123788],{"class":504},[19,124089,123791],{},[19,124091,123794],{},[19,124093,123797,124094,124097],{},[51,124095,124096],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,124099,124100],{},[29,124101],{"alt":143,"src":124102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,124104,124105],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,124107,124108,124110],{},[234,124109,118234],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[367,124112,124114],{"id":124113},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,124116,124117],{},"（1）.查看所连接的主机USB接口的信息",[138,124119,124121],{"className":117566,"code":124120,"language":117568,"meta":143,"style":143},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[51,124122,124123,124153],{"__ignoreMap":143},[147,124124,124125,124127,124129,124132,124134,124136,124138,124140,124143,124146,124148,124151],{"class":149,"line":150},[147,124126,123873],{"class":2237},[147,124128,70094],{"class":504},[147,124130,124131],{"class":448}," -a",[147,124133,29490],{"class":448},[147,124135,28696],{"class":157},[147,124137,123873],{"class":2237},[147,124139,70094],{"class":504},[147,124141,124142],{"class":448}," -q",[147,124144,124145],{"class":504}," path",[147,124147,25389],{"class":448},[147,124149,124150],{"class":504}," \u002Fdev\u002FttyACM0",[147,124152,407],{"class":157},[147,124154,124155,124157,124159,124161,124163,124165,124167,124169,124171,124173,124175,124178],{"class":149,"line":312},[147,124156,123873],{"class":2237},[147,124158,70094],{"class":504},[147,124160,124131],{"class":448},[147,124162,29490],{"class":448},[147,124164,28696],{"class":157},[147,124166,123873],{"class":2237},[147,124168,70094],{"class":504},[147,124170,124142],{"class":448},[147,124172,124145],{"class":504},[147,124174,25389],{"class":448},[147,124176,124177],{"class":504}," \u002Fdev\u002FttyUSB0",[147,124179,407],{"class":157},[19,124181,124182],{},[29,124183],{"alt":143,"src":124184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,124186,124187],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,124189,123602],{},[19,124191,123605,124192,123957],{},[51,124193,123608],{},[138,124195,124196],{"className":117566,"code":123612,"language":117568,"meta":143,"style":143},[51,124197,124198],{"__ignoreMap":143},[147,124199,124200,124202,124204],{"class":149,"line":150},[147,124201,24850],{"class":2237},[147,124203,118853],{"class":504},[147,124205,123623],{"class":504},[138,124207,124209],{"className":117566,"code":124208,"language":117568,"meta":143,"style":143},"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",[51,124210,124211,124239,124265],{"__ignoreMap":143},[147,124212,124213,124215,124217,124220,124222,124224,124226,124228,124231,124234,124236],{"class":149,"line":150},[147,124214,123636],{"class":157},[147,124216,445],{"class":397},[147,124218,124219],{"class":504},"=\"ttyACM*\",",[147,124221,123644],{"class":2237},[147,124223,123647],{"class":504},[147,124225,123676],{"class":2237},[147,124227,777],{"class":2237},[147,124229,124230],{"class":504}," ATTRS{idProduct}==\"55d4\",",[147,124232,124233],{"class":504}," ATTRS{serial}==\"0001\",",[147,124235,123658],{"class":504},[147,124237,124238],{"class":504}," SYMLINK+=\"ttyACM_MCU\"\n",[147,124240,124241,124243,124245,124247,124249,124251,124253,124255,124257,124260,124262],{"class":149,"line":312},[147,124242,123636],{"class":157},[147,124244,445],{"class":397},[147,124246,124219],{"class":504},[147,124248,123644],{"class":2237},[147,124250,123647],{"class":504},[147,124252,123676],{"class":2237},[147,124254,777],{"class":2237},[147,124256,124230],{"class":504},[147,124258,124259],{"class":504}," ATTRS{serial}==\"0002\",",[147,124261,123658],{"class":504},[147,124263,124264],{"class":504}," SYMLINK+=\"ttyACM_Lidar\"\n",[147,124266,124267,124269,124271,124273,124275,124277,124279,124281,124283,124285],{"class":149,"line":1454},[147,124268,123636],{"class":157},[147,124270,445],{"class":397},[147,124272,123641],{"class":504},[147,124274,123644],{"class":2237},[147,124276,123647],{"class":504},[147,124278,123676],{"class":2237},[147,124280,777],{"class":2237},[147,124282,123681],{"class":504},[147,124284,123658],{"class":504},[147,124286,124287],{"class":504}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,124289,123721],{},[19,124291,123724],{},[138,124293,124294],{"className":117566,"code":123727,"language":117568,"meta":143,"style":143},[51,124295,124296,124300,124310,124320,124324,124328,124338],{"__ignoreMap":143},[147,124297,124298],{"class":149,"line":150},[147,124299,123734],{"class":458},[147,124301,124302,124304,124306,124308],{"class":149,"line":312},[147,124303,24850],{"class":2237},[147,124305,120318],{"class":504},[147,124307,123743],{"class":504},[147,124309,123746],{"class":504},[147,124311,124312,124314,124316,124318],{"class":149,"line":1454},[147,124313,24850],{"class":2237},[147,124315,120318],{"class":504},[147,124317,123743],{"class":504},[147,124319,123757],{"class":504},[147,124321,124322],{"class":149,"line":1469},[147,124323,2674],{"emptyLinePlaceholder":324},[147,124325,124326],{"class":149,"line":1475},[147,124327,123766],{"class":458},[147,124329,124330,124332,124334,124336],{"class":149,"line":1489},[147,124331,24850],{"class":2237},[147,124333,123773],{"class":504},[147,124335,123776],{"class":504},[147,124337,123779],{"class":448},[147,124339,124340,124342,124344],{"class":149,"line":1495},[147,124341,24850],{"class":2237},[147,124343,123773],{"class":504},[147,124345,123788],{"class":504},[19,124347,124348,124349],{},"再重新插拔设备即可，或者 ",[234,124350,124351],{},"直接重启系统。",[19,124353,123794],{},[19,124355,123797,124356,124097],{},[51,124357,124096],{},[19,124359,124360],{},[29,124361],{"alt":143,"src":124362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,124364,124105],{},[19,124366,124367,124369],{},[234,124368,118234],{}," 一些设备可能没有串口号等。",[367,124371,124373],{"id":124372},"_744-其他注意事项","7.4.4 其他注意事项",[19,124375,124376,124377,124379,124380,124383,124384,18683,124387,124390,124391,124393],{},"并非所有的USB设备端口号都是",[51,124378,123831],{},"的格式，比如Arduino的端口号可能是",[51,124381,124382],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[51,124385,124386],{},"videon",[51,124388,124389],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[51,124392,124386],{},"端口，绑定时需要关联的也是该接口。",[19,124395,124396,124397,124400,124401,124404,124405,124407,124408,124411,124412,124415,124416,124419,124420,124419,124423,124419,124426,28659],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[51,124398,124399],{},"KERNEL==\"ttyUSB*\"","修改为",[51,124402,124403],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[51,124406,124399],{},"修改为类似于",[51,124409,124410],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[51,124413,124414],{},"video[0,2,4,6]","表示可以绑定的端口为",[51,124417,124418],{},"video0","或",[51,124421,124422],{},"video2",[51,124424,124425],{},"video4",[51,124427,124428],{},"video6",[14,124430,124432],{"id":124431},"_75-挂载内网网页","7.5 挂载内网网页",[19,124434,124435],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,124437,124438],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,124440,124441],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,124443,124444,124445],{},"Termux 下载地址（F-Droid）：",[637,124446,124447],{"href":124447,"rel":124448},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[24138],[19,124450,124451],{},"首先打开app后，先更新软件缓存：",[138,124453,124455],{"className":117566,"code":124454,"language":117568,"meta":143,"style":143},"pkg update\n",[51,124456,124457],{"__ignoreMap":143},[147,124458,124459,124462],{"class":149,"line":150},[147,124460,124461],{"class":2237},"pkg",[147,124463,26516],{"class":504},[19,124465,124466],{},"然后换源",[138,124468,124470],{"className":117566,"code":124469,"language":117568,"meta":143,"style":143},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[51,124471,124472],{"__ignoreMap":143},[147,124473,124474,124476,124479],{"class":149,"line":150},[147,124475,123344],{"class":2237},[147,124477,124478],{"class":157}," $PREFIX",[147,124480,124481],{"class":504},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,124483,124484],{},"将该文件内容替换为下面：",[138,124486,124488],{"className":117566,"code":124487,"language":117568,"meta":143,"style":143},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[51,124489,124490],{"__ignoreMap":143},[147,124491,124492,124495,124498,124501],{"class":149,"line":150},[147,124493,124494],{"class":2237},"deb",[147,124496,124497],{"class":504}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[147,124499,124500],{"class":504}," stable",[147,124502,124503],{"class":504}," main\n",[1406,124505,124506,124533],{},[353,124507,124508,124509,124511,124512],{},"如果你使用的是",[51,124510,123344],{},"编辑器：",[1406,124513,124514,124521,124527],{},[353,124515,124516,124517,124520],{},"按 ",[51,124518,124519],{},"Ctrl+O"," 保存文件。",[353,124522,124516,124523,124526],{},[51,124524,124525],{},"Enter"," 确认文件名。",[353,124528,124516,124529,124532],{},[51,124530,124531],{},"Ctrl+X"," 退出编辑器。",[353,124534,124508,124535,124511,124538],{},[51,124536,124537],{},"vim",[1406,124539,124540,124546],{},[353,124541,124516,124542,124545],{},[51,124543,124544],{},"Esc"," 退出编辑模式。",[353,124547,124548,124549,124551],{},"输入 ",[51,124550,119491],{}," 保存并退出。",[19,124553,124554],{},"接下来重新更新软件源：",[138,124556,124558],{"className":117566,"code":124557,"language":117568,"meta":143,"style":143},"pkg update && pkg upgrade\n",[51,124559,124560],{"__ignoreMap":143},[147,124561,124562,124564,124566,124568,124570],{"class":149,"line":150},[147,124563,124461],{"class":2237},[147,124565,117617],{"class":504},[147,124567,26464],{"class":157},[147,124569,124461],{"class":2237},[147,124571,117603],{"class":504},[19,124573,124574],{},"安装python：",[138,124576,124578],{"className":117566,"code":124577,"language":117568,"meta":143,"style":143},"pkg install python\n",[51,124579,124580],{"__ignoreMap":143},[147,124581,124582,124584,124586],{"class":149,"line":150},[147,124583,124461],{"class":2237},[147,124585,24107],{"class":504},[147,124587,124588],{"class":504}," python\n",[19,124590,124591,26747],{},[234,124592,124593],{},"通过Termux访问设备存储",[19,124595,124596],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[138,124598,124600],{"className":117566,"code":124599,"language":117568,"meta":143,"style":143},"termux-setup-storage\n",[51,124601,124602],{"__ignoreMap":143},[147,124603,124604],{"class":149,"line":150},[147,124605,124599],{"class":2237},[350,124607,124608],{},[353,124609,124610,26747,124613],{},[234,124611,124612],{},"进入HTML文件所在的目录",[350,124614,124615],{},[353,124616,124617,124618,124620],{},"使用",[51,124619,101548],{},"命令进入HTML文件所在的目录：",[138,124622,124624],{"className":117566,"code":124623,"language":117568,"meta":143,"style":143},"cd ~\u002Fyour_html_folder\n",[51,124625,124626],{"__ignoreMap":143},[147,124627,124628,124630],{"class":149,"line":150},[147,124629,101548],{"class":448},[147,124631,124632],{"class":504}," ~\u002Fyour_html_folder\n",[350,124634,124635],{"start":312},[353,124636,124637,26747,124640,124645,124662],{},[234,124638,124639],{},"启动Python HTTP服务器",[350,124641,124642],{},[353,124643,124644],{},"运行以下命令启动一个简单的HTTP服务器：",[138,124646,124648],{"className":117566,"code":124647,"language":117568,"meta":143,"style":143},"python -m http.server 8000\n",[51,124649,124650],{"__ignoreMap":143},[147,124651,124652,124654,124656,124659],{"class":149,"line":150},[147,124653,30654],{"class":2237},[147,124655,101154],{"class":448},[147,124657,124658],{"class":504}," http.server",[147,124660,124661],{"class":448}," 8000\n",[350,124663,124664],{"start":1454},[353,124665,124666,124667,124670],{},"这会在端口",[51,124668,124669],{},"8000","上启动一个Web服务器。",[1406,124672,124673],{},[353,124674,124675],{},"启动服务器后，Termux会显示日志信息，例如：",[138,124677,124679],{"className":121086,"code":124678,"language":121088,"meta":121089,"style":143},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[51,124680,124681],{"__ignoreMap":143},[147,124682,124683],{"class":149,"line":150},[147,124684,124678],{},[1406,124686,124687],{},[353,124688,124689],{},"这表示服务器已成功启动。",[19,124691,124692],{},[234,124693,124694],{},"在浏览器中访问HTML文件",[350,124696,124697],{},[353,124698,124699,26747,124702,124707],{},[234,124700,124701],{},"在同一设备上访问",[350,124703,124704],{},[353,124705,124706],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[138,124708,124711],{"className":124709,"code":124710,"language":71937,"meta":143,"style":143},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[51,124712,124713],{"__ignoreMap":143},[147,124714,124715,124718],{"class":149,"line":150},[147,124716,124717],{"class":157},"http:",[147,124719,124720],{"class":458},"\u002F\u002Flocalhost:8000\n",[1406,124722,124723],{},[353,124724,124725,124726,124729],{},"如果HTML文件中有",[51,124727,124728],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,124731,124733],{"id":124732},"_76-linux重点知识","7.6 Linux重点知识",[367,124735,124737],{"id":124736},"_761-关于点的说明","7.6.1 关于点的说明",[19,124739,124740],{},[29,124741],{"alt":143,"src":124742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,124744,124745],{},"一点本目录，两点上目录",[367,124747,124749],{"id":124748},"_762-目录","7.6.2 目录",[22271,124751,124753],{"id":124752},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,124755,124756],{},[234,124757,124758],{},"\u002Fboot:",[19,124760,124761],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,124763,124764],{},[234,124765,124766],{},"\u002Fetc:",[19,124768,124769],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,124771,124772],{},[234,124773,124774],{},"\u002Flib：",[19,124776,124777],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,124779,124780],{},[234,124781,124782],{},"\u002Fsys:",[19,124784,124785],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22271,124787,124789],{"id":124788},"_7622-指令集合","7.6.2.2 指令集合",[19,124791,124792],{},[234,124793,124794],{},"\u002Fbin:",[19,124796,124797],{},"为二进制文件的缩写，存放最经常使用的命令",[19,124799,124800],{},[234,124801,124802],{},"\u002Fsbin:",[19,124804,124805],{},"只有系统管理员才能使用的程序和指令",[22271,124807,124809],{"id":124808},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,124811,124812],{},[234,124813,124814],{},"\u002Fdev:",[19,124816,124817],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,124819,124820],{},[234,124821,124822],{},"\u002Fmedia:",[19,124824,124825],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,124827,124828],{},[234,124829,124830],{},"\u002Fmnt:",[19,124832,124833],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22271,124835,124837],{"id":124836},"_7624-临时文件","7.6.2.4 临时文件",[19,124839,124840],{},[234,124841,124842],{},"\u002Frun:",[19,124844,124845],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,124847,124848],{},[234,124849,124850],{},"\u002Flost+found:",[19,124852,124853],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,124855,124856],{},[234,124857,124858],{},"\u002Ftmp:",[19,124860,124861],{},"这个目录是用来存放一些临时文件的",[22271,124863,124865],{"id":124864},"_7625-账户","7.6.2.5 账户",[19,124867,124868],{},[234,124869,124870],{},"\u002Froot：",[19,124872,124873],{},"系统管理员的用户主目录",[19,124875,124876,26747],{},[234,124877,124878],{},"\u002Fhome",[19,124880,124881],{},"用户的主目录，以用户的账号命名的",[19,124883,124884,26747],{},[234,124885,124886],{},"\u002Fusr",[19,124888,124889],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,124891,124892],{},[234,124893,124894],{},"\u002Fusr\u002Fbin：",[19,124896,124897],{},"系统用户使用的应用程序与指令",[19,124899,124900],{},[234,124901,124902],{},"\u002Fusr\u002Fsbin：",[19,124904,124905],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,124907,124908],{},[234,124909,124910],{},"\u002Fusr\u002Fsrc：",[19,124912,124913],{},"内核源代码默认的放置目录",[22271,124915,124917],{"id":124916},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,124919,124920],{},[234,124921,124922],{},"\u002Fvar：",[19,124924,124925],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,124927,124928],{},[234,124929,124930],{},"\u002Fproc:",[19,124932,124933,124934,124937],{},"管理 ",[234,124935,124936],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22271,124939,124941],{"id":124940},"_7627-扩展用的","7.6.2.7 扩展用的",[19,124943,124944],{},[234,124945,124946],{},"\u002Fopt:",[19,124948,124949],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,124951,124952],{},[234,124953,124954],{},"\u002Fsrv:",[19,124956,124957],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[367,124959,124961],{"id":124960},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,124963,124964],{},[29,124965],{"alt":143,"src":124966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,124968,124969],{},"windows-->linux:",[19,124971,124972],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,124974,124975],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,124977,124978],{},"linux传输文件到windows",[19,124980,124981],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[367,124983,124985],{"id":124984},"_764-易忘知识","7.6.4 易忘知识",[19,124987,124988],{},"操作系统内核查看",[138,124990,124991],{"className":117566,"code":121560,"language":117568,"meta":143,"style":143},[51,124992,124993],{"__ignoreMap":143},[147,124994,124995,124997],{"class":149,"line":150},[147,124996,70477],{"class":2237},[147,124998,121569],{"class":448},[19,125000,125001],{},[29,125002],{"alt":143,"src":125003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,125005,125006],{},[29,125007],{"alt":143,"src":125008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[138,125010,125012],{"className":117566,"code":125011,"language":117568,"meta":143,"style":143},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[51,125013,125014,125026],{"__ignoreMap":143},[147,125015,125016,125018,125021,125024],{"class":149,"line":150},[147,125017,121777],{"class":2237},[147,125019,125020],{"class":504}," mvtest",[147,125022,125023],{"class":504}," mvtest2",[147,125025,2948],{"class":157},[147,125027,125028],{"class":149,"line":312},[147,125029,125030],{"class":2237},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,125032,125033],{},[29,125034],{"alt":143,"src":125035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,125037,125038],{},[29,125039],{"alt":143,"src":125040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,125042,125043,125044,125047],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[51,125045,125046],{},"du -a"," 可以快速查看磁盘使用细节。",[367,125049,125051],{"id":125050},"_765-vim","7.6.5 Vim",[19,125053,125054],{},[29,125055],{"alt":143,"src":125056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,125058,125059],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,125061,125062],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,125064,125065],{},[234,125066,125067],{},"1.命令模式：",[19,125069,125070],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,125072,125073],{},"x 删除当前光标所在处的字符",[19,125075,125076],{},"：切换到底线命令模式，以在最底一行输入命令",[19,125078,125079],{},"a 进行插入模式，在光标下一个位置输入文本",[19,125081,125082],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,125084,125085],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,125087,125088],{},"dd 剪切当前行",[19,125090,125091],{},"yy 复制当前行",[19,125093,125094],{},"p 粘贴剪贴板内容到光标下方",[19,125096,125097],{},"P 粘贴剪贴板内容到光标上方",[19,125099,125100],{},"u 撤销上一次操作",[19,125102,125103],{},"ctrl+r 重做上一次操作",[19,125105,125106,125108],{},[1194,125107],{}," 保存文件",[19,125110,125111,125113],{},[1044,125112],{}," 退出Vim编辑器",[19,125115,125116,125118],{},[1044,125117],{},"! 强制退出Vim编辑器，不保存修改",[19,125120,125121],{},[234,125122,125123],{},"2.输入模式：",[19,125125,125126],{},[29,125127],{"alt":143,"src":125128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,125130,125131],{},[234,125132,125133],{},"3.底线命令模式：",[19,125135,125136],{},[29,125137],{"alt":143,"src":125138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,125140,125141],{},"按下esc可以退出底线命令模式",[367,125143,125145],{"id":125144},"_766-apt","7.6.6 apt",[19,125147,125148],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[367,125150,125152],{"id":125151},"_767-home与root的区别","7.6.7 home与root的区别",[19,125154,125155],{},[29,125156],{"alt":143,"src":125157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,125159,125160],{},[29,125161],{"alt":143,"src":125162},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,125164,125165],{},[29,125166],{"alt":143,"src":125167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,125169,125170],{},[29,125171],{"alt":143,"src":125172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[367,125174,125176],{"id":125175},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,125178,125179],{},[637,125180,125181],{"href":125181,"rel":125182},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[24138],[350,125184,125185,125188],{},[353,125186,125187],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[353,125189,125190],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,125192,125193],{},[29,125194],{"alt":143,"src":125195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,125197,125198],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,125200,125201],{},[29,125202],{"alt":143,"src":125203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[138,125205,125207],{"className":121086,"code":125206,"language":121088,"meta":121089,"style":143},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[51,125208,125209,125214],{"__ignoreMap":143},[147,125210,125211],{"class":149,"line":150},[147,125212,125213],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[147,125215,125216],{"class":149,"line":312},[147,125217,125218],{},".\u002Fpycharm.sh\n",[19,125220,125221],{},"3️⃣创建.desktop文件",[19,125223,125224],{},[234,125225,125226],{},"原理：",[1406,125228,125229,125239],{},[353,125230,125231,125232,125238],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[234,125233,125234,125237],{},[51,125235,125236],{},".desktop"," 文件"," 来识别应用。",[353,125240,125241,125243,125244],{},[51,125242,125236],{}," 文件相当于一个“应用注册表”，告诉系统：",[1406,125245,125246,125249,125252,125255,125258],{},[353,125247,125248],{},"应用名字（Name）",[353,125250,125251],{},"图标（Icon）",[353,125253,125254],{},"执行命令（Exec）",[353,125256,125257],{},"分类（Categories）",[353,125259,125260],{},"是否需要终端（Terminal）",[138,125262,125264],{"className":121086,"code":125263,"language":121088,"meta":121089,"style":143},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[51,125265,125266,125271],{"__ignoreMap":143},[147,125267,125268],{"class":149,"line":150},[147,125269,125270],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[147,125272,125273],{"class":149,"line":312},[147,125274,125275],{},"nano pycharm.desktop\n",[19,125277,125278],{},"nano是一个命令行下的编辑器，也可以使用vim",[138,125280,125282],{"className":121086,"code":125281,"language":121088,"meta":121089,"style":143},"[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",[51,125283,125284,125289,125294,125299,125304,125309,125314,125319,125324,125329],{"__ignoreMap":143},[147,125285,125286],{"class":149,"line":150},[147,125287,125288],{},"[Desktop Entry]\n",[147,125290,125291],{"class":149,"line":312},[147,125292,125293],{},"Version=1.0\n",[147,125295,125296],{"class":149,"line":1454},[147,125297,125298],{},"Type=Application\n",[147,125300,125301],{"class":149,"line":1469},[147,125302,125303],{},"Name=PyCharm\n",[147,125305,125306],{"class":149,"line":1475},[147,125307,125308],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[147,125310,125311],{"class":149,"line":1489},[147,125312,125313],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[147,125315,125316],{"class":149,"line":1495},[147,125317,125318],{},"Comment=JetBrains PyCharm IDE\n",[147,125320,125321],{"class":149,"line":1586},[147,125322,125323],{},"Categories=Development;IDE;\n",[147,125325,125326],{"class":149,"line":1592},[147,125327,125328],{},"Terminal=false\n",[147,125330,125331],{"class":149,"line":1604},[147,125332,125333],{},"StartupWMClass=jetbrains-pycharm\n",[1406,125335,125336,125342,125348,125354],{},[353,125337,125338,125341],{},[51,125339,125340],{},"Exec"," → 点击图标时执行的命令",[353,125343,125344,125347],{},[51,125345,125346],{},"Icon"," → 显示在菜单和桌面上的图标",[353,125349,125350,125353],{},[51,125351,125352],{},"Terminal=false"," → 不打开终端",[353,125355,125356,125359],{},[51,125357,125358],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125361,125362,125363],"blockquote",{},[19,125364,125365,125366,125368,125369],{},"可以理解成 ",[51,125367,125236],{}," 文件是 Linux 的 ",[234,125370,125371],{},"快捷方式配置文件",[19,125373,125374],{},"4️⃣设置可执行权限",[138,125376,125378],{"className":121086,"code":125377,"language":121088,"meta":121089,"style":143},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[51,125379,125380],{"__ignoreMap":143},[147,125381,125382],{"class":149,"line":150},[147,125383,125377],{},[19,125385,125386],{},"5️⃣桌面图标启动的话如下：",[138,125388,125390],{"className":121086,"code":125389,"language":121088,"meta":121089,"style":143},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[51,125391,125392,125397],{"__ignoreMap":143},[147,125393,125394],{"class":149,"line":150},[147,125395,125396],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[147,125398,125399],{"class":149,"line":312},[147,125400,125401],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[350,125403,125404],{"start":1454},[353,125405,125406],{},"下载Appimage文件实现软件的安装",[19,125408,125409],{},"1️⃣先下载appimage",[19,125411,125412],{},[637,125413,125414],{"href":125414,"rel":125415},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[24138],[19,125417,125418],{},[29,125419],{"alt":143,"src":125420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,125422,125423],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,125425,125426],{},[29,125427],{"alt":143,"src":125428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,125430,125431],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,125433,125434],{},[29,125435],{"alt":143,"src":125436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,125438,125439],{},[29,125440],{"alt":143,"src":125441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,125443,125444,125445,125448],{},"3️⃣给他们放在",[51,125446,125447],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,125450,125451],{},"4️⃣给软件执行权限",[138,125453,125455],{"className":121086,"code":125454,"language":121088,"meta":121089,"style":143},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[51,125456,125457,125462],{"__ignoreMap":143},[147,125458,125459],{"class":149,"line":150},[147,125460,125461],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[147,125463,125464],{"class":149,"line":312},[147,125465,125466],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,125468,125469],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[138,125471,125473],{"className":117566,"code":125472,"language":117568,"meta":143,"style":143},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[51,125474,125475,125482,125489,125495],{"__ignoreMap":143},[147,125476,125477,125479],{"class":149,"line":150},[147,125478,101548],{"class":448},[147,125480,125481],{"class":504}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[147,125483,125484,125486],{"class":149,"line":312},[147,125485,101555],{"class":2237},[147,125487,125488],{"class":504}," .\u002Fqqmusic.desktop\n",[147,125490,125491,125493],{"class":149,"line":1454},[147,125492,124537],{"class":2237},[147,125494,125488],{"class":504},[147,125496,125497,125499,125501,125503],{"class":149,"line":1469},[147,125498,24850],{"class":2237},[147,125500,24853],{"class":504},[147,125502,123403],{"class":504},[147,125504,125488],{"class":504},[19,125506,125507,125509],{},[51,125508,101555],{},"：一个 Linux 命令，主要功能是：",[1406,125511,125512,125515],{},[353,125513,125514],{},"如果文件不存在，就创建一个新的空文件",[353,125516,125517],{},"如果文件已存在，就更新该文件的最后修改时间",[138,125519,125521],{"className":121086,"code":125520,"language":121088,"meta":121089,"style":143},"[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",[51,125522,125523,125527,125532,125537,125542,125546,125551],{"__ignoreMap":143},[147,125524,125525],{"class":149,"line":150},[147,125526,125288],{},[147,125528,125529],{"class":149,"line":312},[147,125530,125531],{},"Name=QQ音乐\n",[147,125533,125534],{"class":149,"line":1454},[147,125535,125536],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[147,125538,125539],{"class":149,"line":1469},[147,125540,125541],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[147,125543,125544],{"class":149,"line":1475},[147,125545,125298],{},[147,125547,125548],{"class":149,"line":1489},[147,125549,125550],{},"Categories=Audio;Music;Player;\n",[147,125552,125553],{"class":149,"line":1495},[147,125554,125555],{},"Comment=QQ Music Client for Linux\n",[19,125557,125558],{},"将文件复制进去",[19,125560,125561],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,125563,125564],{},[29,125565],{"alt":143,"src":125566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,125568,125569],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,125571,125572],{},[29,125573],{"alt":143,"src":125574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,125576,125577,125578,125581,125582,125585],{},"如果你用的不是KDE，那么也可以直接修改",[51,125579,125580],{},"qqmuic.desktop","：在exec的末尾加上",[51,125583,125584],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[138,125587,125589],{"className":121086,"code":125588,"language":121088,"meta":121089,"style":143},"[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",[51,125590,125591,125595,125599,125604,125608,125612,125616],{"__ignoreMap":143},[147,125592,125593],{"class":149,"line":150},[147,125594,125288],{},[147,125596,125597],{"class":149,"line":312},[147,125598,125531],{},[147,125600,125601],{"class":149,"line":1454},[147,125602,125603],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[147,125605,125606],{"class":149,"line":1469},[147,125607,125541],{},[147,125609,125610],{"class":149,"line":1475},[147,125611,125298],{},[147,125613,125614],{"class":149,"line":1489},[147,125615,125550],{},[147,125617,125618],{"class":149,"line":1495},[147,125619,125555],{},[19,125621,125622],{},[29,125623],{"alt":143,"src":125624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,125626,125627],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[138,125629,125631],{"className":121086,"code":125630,"language":121088,"meta":121089,"style":143},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[51,125632,125633],{"__ignoreMap":143},[147,125634,125635],{"class":149,"line":150},[147,125636,125630],{},[350,125638,125639],{"start":1469},[353,125640,125641],{},"去Flathub上安装软件",[19,125643,125644],{},[637,125645,125646],{"href":125646,"rel":125647},"https:\u002F\u002Fflathub.org\u002F",[24138],[19,125649,125650],{},"1️⃣去上面的官网搜索软件+下载软件",[19,125652,125653],{},[29,125654],{"alt":143,"src":125655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[138,125657,125659],{"className":121086,"code":125658,"language":121088,"meta":121089,"style":143},"flatpak install flathub com.obsproject.Studio\n",[51,125660,125661],{"__ignoreMap":143},[147,125662,125663],{"class":149,"line":150},[147,125664,125658],{},[19,125666,125667],{},[29,125668],{"alt":143,"src":125669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,125671,125672],{},"2️⃣运行软件",[19,125674,125675],{},"a.官方方式：",[19,125677,125678],{},[29,125679],{"alt":143,"src":125680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[138,125682,125683],{"className":121086,"code":125658,"language":121088,"meta":121089,"style":143},[51,125684,125685],{"__ignoreMap":143},[147,125686,125687],{"class":149,"line":150},[147,125688,125658],{},[19,125690,125691],{},"b.当普通软件运行：",[19,125693,125694],{},[29,125695],{"alt":143,"src":125696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,125698,125699],{},[29,125700],{"alt":143,"src":125701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[308,125703,125704],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":143,"searchDepth":312,"depth":312,"links":125706},[125707,125708,125713,125714,125720,125721],{"id":122439,"depth":312,"text":122440},{"id":122781,"depth":312,"text":122782,"children":125709},[125710,125711,125712],{"id":122785,"depth":1454,"text":122786},{"id":122852,"depth":1454,"text":122853},{"id":123113,"depth":1454,"text":123114},{"id":123266,"depth":312,"text":123267},{"id":123504,"depth":312,"text":123505,"children":125715},[125716,125717,125718,125719],{"id":123556,"depth":1454,"text":123557},{"id":123842,"depth":1454,"text":123843},{"id":124113,"depth":1454,"text":124114},{"id":124372,"depth":1454,"text":124373},{"id":124431,"depth":312,"text":124432},{"id":124732,"depth":312,"text":124733,"children":125722},[125723,125724,125725,125726,125727,125728,125729,125730],{"id":124736,"depth":1454,"text":124737},{"id":124748,"depth":1454,"text":124749},{"id":124960,"depth":1454,"text":124961},{"id":124984,"depth":1454,"text":124985},{"id":125050,"depth":1454,"text":125051},{"id":125144,"depth":1454,"text":125145},{"id":125151,"depth":1454,"text":125152},{"id":125175,"depth":1454,"text":125176},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122431,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125737,"title":125738,"body":125739,"description":321,"extension":322,"meta":125743,"navigation":324,"path":125744,"seo":125745,"stem":125746,"__hash__":125747},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125740,"toc":125741},[],{"title":143,"searchDepth":312,"depth":312,"links":125742},[],{"category":30537},"\u002Fwiki\u002F2025-01-27-linux",{"title":125738,"description":321},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125749,"title":125750,"body":125751,"description":125755,"extension":322,"meta":126146,"navigation":324,"path":126147,"seo":126148,"stem":126149,"__hash__":126150},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125752,"toc":126144},[125753,125756,125760,125777,125780,125833,125837,125839,125879,125888,125892,125895,126136,126141],[19,125754,125755],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125757,125759],{"id":125758},"_1ubuntu环境配置","1.Ubuntu环境配置",[350,125761,125762,125765,125768,125771,125774],{},[353,125763,125764],{},"ubuntu环境换源",[353,125766,125767],{},"安装cuda",[353,125769,125770],{},"安装miniconda",[353,125772,125773],{},"安装pytorch",[353,125775,125776],{},"安装genesis",[19,125778,125779],{},"参考链接：",[138,125781,125783],{"className":24095,"code":125782,"language":24097,"meta":143,"style":143},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[51,125784,125785],{"__ignoreMap":143},[147,125786,125787,125790,125793,125796,125798,125801,125804,125806,125809,125812,125814,125817,125820,125822,125825,125828,125830],{"class":149,"line":150},[147,125788,125789],{"class":2237},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[147,125791,125792],{"class":504},"=blogdetail",[147,125794,125795],{"class":157},"&sharetype",[147,125797,445],{"class":397},[147,125799,125800],{"class":504},"blogdetail",[147,125802,125803],{"class":157},"&sharerId",[147,125805,445],{"class":397},[147,125807,125808],{"class":504},"144728092",[147,125810,125811],{"class":157},"&sharerefer",[147,125813,445],{"class":397},[147,125815,125816],{"class":504},"PC",[147,125818,125819],{"class":157},"&sharesource",[147,125821,445],{"class":397},[147,125823,125824],{"class":504},"qq_69379513",[147,125826,125827],{"class":157},"&sharefrom",[147,125829,445],{"class":397},[147,125831,125832],{"class":504},"from_link\n",[10,125834,125836],{"id":125835},"_2genesis-报错issue","2.Genesis 报错issue",[19,125838,125779],{},[138,125840,125841],{"className":24095,"code":125782,"language":24097,"meta":143,"style":143},[51,125842,125843],{"__ignoreMap":143},[147,125844,125845,125847,125849,125851,125853,125855,125857,125859,125861,125863,125865,125867,125869,125871,125873,125875,125877],{"class":149,"line":150},[147,125846,125789],{"class":2237},[147,125848,125792],{"class":504},[147,125850,125795],{"class":157},[147,125852,445],{"class":397},[147,125854,125800],{"class":504},[147,125856,125803],{"class":157},[147,125858,445],{"class":397},[147,125860,125808],{"class":504},[147,125862,125811],{"class":157},[147,125864,445],{"class":397},[147,125866,125816],{"class":504},[147,125868,125819],{"class":157},[147,125870,445],{"class":397},[147,125872,125824],{"class":504},[147,125874,125827],{"class":157},[147,125876,445],{"class":397},[147,125878,125832],{"class":504},[138,125880,125882],{"className":24095,"code":125881,"language":24097,"meta":143,"style":143},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[51,125883,125884],{"__ignoreMap":143},[147,125885,125886],{"class":149,"line":150},[147,125887,125881],{"class":2237},[10,125889,125891],{"id":125890},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,125893,125894],{},"hello_robot.py",[138,125896,125898],{"className":30652,"code":125897,"language":30654,"meta":143,"style":143},"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",[51,125899,125900,125906,125921,125925,125937,125949,125953,125966,125970,125989,125999,126009,126023,126027,126031,126036,126040,126050,126057,126071,126078,126088,126093,126097,126115,126120,126124,126131],{"__ignoreMap":143},[147,125901,125902,125904],{"class":149,"line":150},[147,125903,30666],{"class":397},[147,125905,45579],{"class":157},[147,125907,125908,125911,125914,125916,125918],{"class":149,"line":312},[147,125909,125910],{"class":157},"os.environ[",[147,125912,125913],{"class":504},"'PYOPENGL_PLATFORM'",[147,125915,4717],{"class":157},[147,125917,445],{"class":397},[147,125919,125920],{"class":504}," 'glx'\n",[147,125922,125923],{"class":149,"line":1454},[147,125924,2674],{"emptyLinePlaceholder":324},[147,125926,125927,125929,125932,125934],{"class":149,"line":1469},[147,125928,30666],{"class":397},[147,125930,125931],{"class":157}," genesis ",[147,125933,31657],{"class":397},[147,125935,125936],{"class":157}," gs\n",[147,125938,125939,125941,125944,125946],{"class":149,"line":1475},[147,125940,31011],{"class":397},[147,125942,125943],{"class":157}," pynput ",[147,125945,30666],{"class":397},[147,125947,125948],{"class":157}," keyboard\n",[147,125950,125951],{"class":149,"line":1489},[147,125952,2674],{"emptyLinePlaceholder":324},[147,125954,125955,125958,125961,125963],{"class":149,"line":1495},[147,125956,125957],{"class":157},"gs.init(",[147,125959,125960],{"class":5490},"backend",[147,125962,445],{"class":397},[147,125964,125965],{"class":157},"gs.gpu)\n",[147,125967,125968],{"class":149,"line":1586},[147,125969,2674],{"emptyLinePlaceholder":324},[147,125971,125972,125975,125977,125980,125983,125985,125987],{"class":149,"line":1592},[147,125973,125974],{"class":157},"scene ",[147,125976,445],{"class":397},[147,125978,125979],{"class":157}," gs.Scene(",[147,125981,125982],{"class":5490},"show_viewer",[147,125984,445],{"class":397},[147,125986,31750],{"class":448},[147,125988,407],{"class":157},[147,125990,125991,125994,125996],{"class":149,"line":1604},[147,125992,125993],{"class":157},"plane ",[147,125995,445],{"class":397},[147,125997,125998],{"class":157}," scene.add_entity(gs.morphs.Plane())\n",[147,126000,126001,126004,126006],{"class":149,"line":1886},[147,126002,126003],{"class":157},"franka ",[147,126005,445],{"class":397},[147,126007,126008],{"class":157}," scene.add_entity(\n",[147,126010,126011,126014,126016,126018,126021],{"class":149,"line":1891},[147,126012,126013],{"class":157},"    gs.morphs.MJCF(",[147,126015,45628],{"class":5490},[147,126017,445],{"class":397},[147,126019,126020],{"class":504},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[147,126022,38321],{"class":157},[147,126024,126025],{"class":149,"line":1897},[147,126026,407],{"class":157},[147,126028,126029],{"class":149,"line":1902},[147,126030,2674],{"emptyLinePlaceholder":324},[147,126032,126033],{"class":149,"line":1916},[147,126034,126035],{"class":157},"scene.build()\n",[147,126037,126038],{"class":149,"line":1921},[147,126039,2674],{"emptyLinePlaceholder":324},[147,126041,126042,126044,126047],{"class":149,"line":1927},[147,126043,32221],{"class":397},[147,126045,126046],{"class":2237}," on_press",[147,126048,126049],{"class":157},"(key):\n",[147,126051,126052,126055],{"class":149,"line":1948},[147,126053,126054],{"class":397},"    try",[147,126056,4013],{"class":157},[147,126058,126059,126061,126064,126066,126069],{"class":149,"line":1953},[147,126060,2771],{"class":397},[147,126062,126063],{"class":157}," key.char ",[147,126065,3223],{"class":397},[147,126067,126068],{"class":504}," 'q'",[147,126070,4013],{"class":157},[147,126072,126073,126075],{"class":149,"line":1967},[147,126074,16005],{"class":397},[147,126076,126077],{"class":448}," False\n",[147,126079,126080,126083,126086],{"class":149,"line":1972},[147,126081,126082],{"class":397},"    except",[147,126084,126085],{"class":448}," AttributeError",[147,126087,4013],{"class":157},[147,126089,126090],{"class":149,"line":2001},[147,126091,126092],{"class":397},"        pass\n",[147,126094,126095],{"class":149,"line":2006},[147,126096,2674],{"emptyLinePlaceholder":324},[147,126098,126099,126102,126104,126107,126110,126112],{"class":149,"line":2023},[147,126100,126101],{"class":157},"listener ",[147,126103,445],{"class":397},[147,126105,126106],{"class":157}," keyboard.Listener(",[147,126108,126109],{"class":5490},"on_press",[147,126111,445],{"class":397},[147,126113,126114],{"class":157},"on_press)\n",[147,126116,126117],{"class":149,"line":2028},[147,126118,126119],{"class":157},"listener.start()\n",[147,126121,126122],{"class":149,"line":2033},[147,126123,2674],{"emptyLinePlaceholder":324},[147,126125,126126,126128],{"class":149,"line":2038},[147,126127,108933],{"class":397},[147,126129,126130],{"class":157}," listener.running:\n",[147,126132,126133],{"class":149,"line":2052},[147,126134,126135],{"class":157},"    scene.step()\n",[19,126137,126138],{},[29,126139],{"alt":143,"src":126140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[308,126142,126143],{},"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":143,"searchDepth":312,"depth":312,"links":126145},[],{"category":23651},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125750,"description":125755},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":126152,"title":126153,"body":126154,"description":321,"extension":322,"meta":126169,"navigation":324,"path":126170,"seo":126171,"stem":126172,"__hash__":126173},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":126155,"toc":126166},[126156,126159,126163],[10,126157,126153],{"id":126158},"_1-基础知识",[14,126160,126162],{"id":126161},"_11-js的组成","1.1 js的组成",[19,126164,126165],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":143,"searchDepth":312,"depth":312,"links":126167},[126168],{"id":126161,"depth":312,"text":126162},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":126153,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":126175,"title":126176,"body":126177,"description":321,"extension":322,"meta":126316,"navigation":324,"path":126317,"seo":126318,"stem":126319,"__hash__":126320},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":126178,"toc":126304},[126179,126182,126186,126189,126193,126203,126207,126210,126213,126216,126220,126227,126233,126237,126243,126254,126258,126261,126265,126268,126272,126275,126279,126282,126286,126289,126292,126295,126298,126301],[10,126180,126176],{"id":126181},"_2-vscode必备内容",[14,126183,126185],{"id":126184},"_21-标签分类","2.1 标签分类",[19,126187,126188],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,126190,126192],{"id":126191},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,126194,126195,126196,126198,126199,126202],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[51,126197,625],{}," 然后按 ",[51,126200,126201],{},"Tab","，快速自动生成基本结构。",[14,126204,126206],{"id":126205},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,126208,126209],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,126211,126212],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,126214,126215],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,126217,126219],{"id":126218},"_24-视图缩放","2.4 视图缩放",[19,126221,126222,126223,126226],{},"缩放视图 ",[51,126224,126225],{},"ctrl+"," 可实现代码增大。",[19,126228,126229,126232],{},[51,126230,126231],{},"ctrl-"," 可实现代码减小。",[14,126234,126236],{"id":126235},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,126238,126239,126240,28659],{},"VSCode 新建文件快捷键为 ",[51,126241,126242],{},"ctrl+N",[19,126244,126245,126246,126249,126250,126253],{},"保存快捷键为 ",[51,126247,126248],{},"ctrl+S","，将文本保存为 ",[51,126251,126252],{},".html"," 文件。",[14,126255,126257],{"id":126256},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,126259,126260],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,126262,126264],{"id":126263},"_27-vscode-icons","2.7 vscode-icons",[19,126266,126267],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,126269,126271],{"id":126270},"_28-easy-less","2.8 Easy LESS",[19,126273,126274],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,126276,126278],{"id":126277},"_29-会了吧插件","2.9 会了吧插件",[19,126280,126281],{},"会了吧插件可以展示代码中英语单词的意思。",[14,126283,126285],{"id":126284},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,126287,126288],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,126290,126291],{},"②选定多个相同的单词:ctrl+D",[19,126293,126294],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,126296,126297],{},"④全局替换某些单词:ctrl+h",[19,126299,126300],{},"⑤快速定位到某一行:ctrl+g",[19,126302,126303],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":143,"searchDepth":312,"depth":312,"links":126305},[126306,126307,126308,126309,126310,126311,126312,126313,126314,126315],{"id":126184,"depth":312,"text":126185},{"id":126191,"depth":312,"text":126192},{"id":126205,"depth":312,"text":126206},{"id":126218,"depth":312,"text":126219},{"id":126235,"depth":312,"text":126236},{"id":126256,"depth":312,"text":126257},{"id":126263,"depth":312,"text":126264},{"id":126270,"depth":312,"text":126271},{"id":126277,"depth":312,"text":126278},{"id":126284,"depth":312,"text":126285},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":126176,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126322,"title":126323,"body":126324,"description":321,"extension":322,"meta":126483,"navigation":324,"path":126484,"seo":126485,"stem":126486,"__hash__":126487},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126325,"toc":126475},[126326,126329,126333,126343,126349,126355,126359,126368,126372,126377,126380,126383,126387,126390,126400,126409,126418,126427,126437,126444,126449,126454,126467],[10,126327,126323],{"id":126328},"_3-html文本与容器标签",[14,126330,126332],{"id":126331},"_31-标题标签","3.1 标题标签",[19,126334,126335,126338,126339,126342],{},[51,126336,126337],{},"\u003Ch1>","我是一级标签",[51,126340,126341],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,126344,126345,126338,126347],{},[51,126346,126337],{},[51,126348,126341],{},[19,126350,123605,126351,126354],{},[51,126352,126353],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,126356,126358],{"id":126357},"_32-段落标签","3.2 段落标签",[19,126360,126361,126364,126365],{},[51,126362,126363],{},"\u003Cp>","....",[51,126366,126367],{},"\u003C\u002Fp>",[14,126369,126371],{"id":126370},"_33-换行标签","3.3 换行标签",[19,126373,126374],{},[51,126375,126376],{},"\u003Cbr \u002F>",[19,126378,126379],{},"具有强制换行的作用",[19,126381,126382],{},"单标签",[14,126384,126386],{"id":126385},"_34-文本格式化标签","3.4 文本格式化标签",[19,126388,126389],{},"提供粗体、斜体和下划线等效果",[19,126391,126392,126393,82811,126396,126399],{},"加粗：",[51,126394,126395],{},"\u003Cstrong>...\u003C\u002Fstrong>",[51,126397,126398],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,126401,126402,126403,82811,126406,126399],{},"斜体：",[51,126404,126405],{},"\u003Cem>...\u003C\u002Fem>",[51,126407,126408],{},"\u003Ci>...\u003C\u002Fi>",[19,126410,126411,126412,82811,126415,126399],{},"删除线：",[51,126413,126414],{},"\u003Cdel>...\u003C\u002Fdel>",[51,126416,126417],{},"\u003Cs>...\u003C\u002Fs>",[19,126419,126420,126421,82811,126424,126399],{},"下划线：",[51,126422,126423],{},"\u003Cins>...\u003C\u002Fins>",[51,126425,126426],{},"\u003Cu>...\u003C\u002Fu>",[14,126428,126430,126431,18683,126434,281],{"id":126429},"_35-div和span标签","3.5 ",[51,126432,126433],{},"\u003Cdiv>",[51,126435,126436],{},"\u003Cspan>",[19,126438,126439,101290,126441,126443],{},[51,126440,126433],{},[51,126442,126436],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,126445,126446],{},[51,126447,126448],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,126450,126451],{},[51,126452,126453],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,126455,126456,126457,126459,126460,126462,126463,126466],{},"两者特点：①",[51,126458,126433],{}," 标签用来布局，但一行通常只放一个 ",[51,126461,126433],{},"。可以理解为一个大盒子，独占一行，在 ",[51,126464,126465],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,126468,77521,126469,126471,126472,126474],{},[51,126470,126436],{}," 标签也可用于布局，一行可以放多个 ",[51,126473,126436],{},"，可理解为小盒子。",{"title":143,"searchDepth":312,"depth":312,"links":126476},[126477,126478,126479,126480,126481],{"id":126331,"depth":312,"text":126332},{"id":126357,"depth":312,"text":126358},{"id":126370,"depth":312,"text":126371},{"id":126385,"depth":312,"text":126386},{"id":126429,"depth":312,"text":126482},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126323,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126489,"title":126490,"body":126491,"description":321,"extension":322,"meta":126687,"navigation":324,"path":126688,"seo":126689,"stem":126690,"__hash__":126691},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126492,"toc":126679},[126493,126496,126500,126503,126509,126516,126522,126528,126531,126534,126537,126540,126543,126546,126549,126553,126556,126559,126562,126568,126574,126580,126587,126591,126597,126603,126606,126609,126615,126621,126627,126630,126633,126637,126640,126650,126656,126660,126669,126673,126676],[10,126494,126490],{"id":126495},"_4-html图像与链接",[14,126497,126499],{"id":126498},"_41-图像标签","4.1 图像标签",[19,126501,126502],{},"（1）标签",[19,126504,126505,126508],{},[51,126506,126507],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,126510,126511,126512,126515],{},"src是",[51,126513,126514],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,126517,126518,126519],{},"alt:文本，替换文本。图像不能显示的文字 ",[51,126520,126521],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,126523,126524,126525],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[51,126526,126527],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,126529,126530],{},"width:像素，设置图像的宽度",[19,126532,126533],{},"height:像素，设置图像的高度",[19,126535,126536],{},"border：像素，设置图像的边框粗细",[19,126538,126539],{},"（2）图像标签属性的注意点：",[19,126541,126542],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,126544,126545],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,126547,126548],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,126550,126552],{"id":126551},"_42-路径注意要点","4.2 路径注意要点：",[19,126554,126555],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,126557,126558],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,126560,126561],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,126563,126564,126565],{},"①同一级路径：图像文件位于HTML文件同一级，如",[51,126566,126567],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,126569,126570,126571],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[51,126572,126573],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,126575,126576,126577],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[51,126578,126579],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,126581,126582,126583,650],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[637,126584,126585],{"href":126585,"rel":126586},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[24138],[14,126588,126590],{"id":126589},"_43-超链接标签","4.3 超链接标签",[19,126592,126593,126596],{},[51,126594,126595],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,126598,126599,126600],{},"①语法格式：",[51,126601,126602],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,126604,126605],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,126607,126608],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,126610,126611,126612],{},"③链接分类：外部链接：",[51,126613,126614],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,126616,126617,126618],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[51,126619,126620],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,126622,126623,126624],{},"空链接：如果当时没有确定链接目标时，",[51,126625,126626],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,126628,126629],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,126631,126632],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,126634,126636],{"id":126635},"_44-锚点链接","4.4 锚点链接",[19,126638,126639],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,126641,126642,126643,126646,126647],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[51,126644,126645],{},"\u003Ca href=\"#two\">","第二级",[51,126648,126649],{},"\u003C\u002Fa>",[19,126651,126652,126653],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[51,126654,126655],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,126657,126659],{"id":126658},"_45-注释标签","4.5 注释标签",[19,126661,126662,126665,126666],{},[51,126663,126664],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[51,126667,126668],{},"ctrl+\u002F",[14,126670,126672],{"id":126671},"_46-特殊字符","4.6 特殊字符",[19,126674,126675],{},"可以实现添加多个空格",[29,126677],{"style":31,"src":126678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":143,"searchDepth":312,"depth":312,"links":126680},[126681,126682,126683,126684,126685,126686],{"id":126498,"depth":312,"text":126499},{"id":126551,"depth":312,"text":126552},{"id":126589,"depth":312,"text":126590},{"id":126635,"depth":312,"text":126636},{"id":126658,"depth":312,"text":126659},{"id":126671,"depth":312,"text":126672},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126490,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":4,"title":5,"body":126693,"description":321,"extension":322,"meta":126885,"navigation":324,"path":325,"seo":126886,"stem":327,"__hash__":328},{"type":7,"value":126694,"toc":126877},[126695,126697,126699,126701,126703,126705,126707,126709,126711,126713,126715,126717,126729,126733,126735,126737,126739,126741,126743,126745,126747,126749,126751,126753,126755,126757,126765,126769,126771,126773,126783,126785,126787,126789,126791,126793,126795,126797,126801,126803,126805,126807,126809,126811,126815,126817,126819,126823,126825,126827,126829,126833,126835,126837,126847,126851,126853,126855,126859,126865,126867,126869,126871,126873,126875],[10,126696,5],{"id":12},[14,126698,17],{"id":16},[19,126700,21],{},[19,126702,24],{},[19,126704,27],{},[29,126706],{"style":31,"src":32},[19,126708,35],{},[29,126710],{"style":31,"src":38},[19,126712,41],{},[29,126714],{"style":31,"src":44},[19,126716,47],{},[19,126718,126719,54,126721,57,126723,61,126725,64,126727,68],{},[51,126720,53],{},[51,126722,53],{},[51,126724,60],{},[51,126726,53],{},[51,126728,67],{},[19,126730,126731,74],{},[51,126732,73],{},[14,126734,78],{"id":77},[19,126736,81],{},[19,126738,84],{},[19,126740,87],{},[19,126742,90],{},[19,126744,93],{},[19,126746,96],{},[14,126748,100],{"id":99},[19,126750,103],{},[19,126752,106],{},[29,126754],{"style":31,"src":109},[19,126756,112],{},[19,126758,126759,118,126761,122,126763,125],{},[51,126760,117],{},[51,126762,121],{},[51,126764,117],{},[19,126766,126767,130],{},[51,126768,121],{},[19,126770,133],{},[19,126772,136],{},[138,126774,126775],{"className":140,"code":141,"language":142,"meta":143,"style":143},[51,126776,126777],{"__ignoreMap":143},[147,126778,126779,126781],{"class":149,"line":150},[147,126780,154],{"class":153},[147,126782,158],{"class":157},[19,126784,161],{},[29,126786],{"style":31,"src":164},[19,126788,167],{},[29,126790],{"style":31,"src":170},[29,126792],{"style":31,"src":173},[14,126794,177],{"id":176},[19,126796,180],{},[19,126798,183,126799,187],{},[51,126800,186],{},[29,126802],{"style":31,"src":190},[19,126804,193],{},[19,126806,196],{},[19,126808,199],{},[19,126810,202],{},[19,126812,205,126813,209],{},[51,126814,208],{},[29,126816],{"style":31,"src":212},[29,126818],{"style":31,"src":215},[19,126820,218,126821],{},[51,126822,221],{},[29,126824],{"style":31,"src":224},[19,126826,227],{},[29,126828],{"style":31,"src":230},[19,126830,126831,237],{},[234,126832,236],{},[19,126834,240],{},[29,126836],{"style":31,"src":243},[19,126838,126839,249,126841,253,126843,257,126845,260],{},[234,126840,248],{},[51,126842,252],{},[51,126844,256],{},[51,126846,256],{},[19,126848,263,126849,267],{},[51,126850,266],{},[29,126852],{"style":31,"src":270},[19,126854,273],{},[14,126856,277,126857,281],{"id":276},[51,126858,280],{},[19,126860,284,126861,287,126863,290],{},[51,126862,280],{},[51,126864,280],{},[19,126866,293],{},[29,126868],{"style":31,"src":296},[29,126870],{"style":31,"src":299},[14,126872,303],{"id":302},[29,126874],{"style":31,"src":306},[308,126876,310],{},{"title":143,"searchDepth":312,"depth":312,"links":126878},[126879,126880,126881,126882,126883,126884],{"id":16,"depth":312,"text":17},{"id":77,"depth":312,"text":78},{"id":99,"depth":312,"text":100},{"id":176,"depth":312,"text":177},{"id":276,"depth":312,"text":319},{"id":302,"depth":312,"text":303},{},{"title":5,"description":321},{"id":126888,"title":126889,"body":126890,"description":321,"extension":322,"meta":127439,"navigation":324,"path":127440,"seo":127441,"stem":127442,"__hash__":127443},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126891,"toc":127414},[126892,126895,126899,126902,126905,126909,126912,126915,126918,126921,126924,126927,126930,126934,126937,126941,126944,126947,126950,126954,126957,126960,126963,126969,126972,126975,126978,126981,126984,126987,126990,127023,127027,127030,127033,127036,127040,127043,127046,127049,127052,127055,127059,127062,127065,127068,127072,127075,127079,127082,127086,127089,127094,127098,127101,127105,127108,127111,127114,127117,127144,127147,127151,127154,127157,127162,127165,127168,127172,127175,127180,127183,127186,127189,127193,127196,127199,127202,127206,127209,127212,127215,127219,127223,127226,127266,127269,127273,127280,127283,127287,127290,127336,127340,127343,127346,127349,127377,127381,127384,127411],[10,126893,126889],{"id":126894},"_6-css语法与文本样式",[14,126896,126898],{"id":126897},"_61-css语法规范","6.1 css语法规范",[19,126900,126901],{},"由两部分组成，选择器及一条或多条声明",[29,126903],{"style":31,"src":126904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,126906,126907],{},[234,126908,248],{},[19,126910,126911],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,126913,126914],{},"②属性与属性值以“键值对”的形式出现",[19,126916,126917],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,126919,126920],{},"④属性和属性值之间用英文“;”分开",[29,126922],{"style":31,"src":126923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[29,126925],{"style":31,"src":126926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[29,126928],{"style":31,"src":126929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,126931,126933],{"id":126932},"_62-css选择器","6.2 css选择器",[19,126935,126936],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[367,126938,126940],{"id":126939},"_621-标签选择器","6.2.1 标签选择器",[19,126942,126943],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,126945,126946],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[29,126948],{"style":31,"src":126949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[367,126951,126953],{"id":126952},"_622-类选择器","6.2.2 类选择器",[19,126955,126956],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,126958,126959],{},"②样例",[29,126961],{"style":31,"src":126962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,126964,126965,126966,126968],{},"③ ",[234,126967,236],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,126970,126971],{},"可以理解为给这个标签起了个名字，来表示；",[19,126973,126974],{},"长名称或词组可以使用横线来为选择器命名；",[19,126976,126977],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,126979,126980],{},"命名要有意义；",[29,126982],{"style":31,"src":126983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,126985,126986],{},"类选择器也可以指定特殊的元素p.center{}",[19,126988,126989],{},"p.center和.center都对",[138,126991,126993],{"className":140,"code":126992,"language":142,"meta":143,"style":143},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[51,126994,126995,127000,127009,127019],{"__ignoreMap":143},[147,126996,126997],{"class":149,"line":150},[147,126998,126999],{"class":458},"\u002F* 类选择器指定特殊元素 *\u002F\n",[147,127001,127002,127004,127007],{"class":149,"line":312},[147,127003,19],{"class":153},[147,127005,127006],{"class":2237},".center",[147,127008,15845],{"class":157},[147,127010,127011,127013,127015,127017],{"class":149,"line":1454},[147,127012,70799],{"class":448},[147,127014,51710],{"class":157},[147,127016,51865],{"class":448},[147,127018,1565],{"class":157},[147,127020,127021],{"class":149,"line":1469},[147,127022,1839],{"class":157},[367,127024,127026],{"id":127025},"_623-多类名使用","6.2.3 多类名使用",[19,127028,127029],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[29,127031],{"style":31,"src":127032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,127034,127035],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[367,127037,127039],{"id":127038},"_624-id选择器","6.2.4 id选择器",[19,127041,127042],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,127044,127045],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[29,127047],{"style":31,"src":127048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,127050,127051],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,127053,127054],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[367,127056,127058],{"id":127057},"_625-通配符选择器","6.2.5 通配符选择器",[19,127060,127061],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,127063,127064],{},"* {",[19,127066,127067],{},"color=\"red\"}",[367,127069,127071],{"id":127070},"_626-总结","6.2.6 总结",[29,127073],{"style":31,"src":127074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,127076,127078],{"id":127077},"_63-css字体属性","6.3 css字体属性",[19,127080,127081],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[367,127083,127085],{"id":127084},"_631-字体系列","6.3.1 字体系列",[19,127087,127088],{},"font-family: '宋体';",[19,127090,127091,127093],{},[234,127092,248],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[367,127095,127097],{"id":127096},"_632-字体大小","6.3.2 字体大小",[19,127099,127100],{},"font-size: 20px",[19,127102,127103,26747],{},[234,127104,236],{},[19,127106,127107],{},"①px（像素）大小是网页的最常用单位",[19,127109,127110],{},"②谷歌浏览器默认为16px",[19,127112,127113],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,127115,127116],{},"④可以给body指定整个页面的大小：会自动引用",[138,127118,127120],{"className":140,"code":127119,"language":142,"meta":143,"style":143},"body {\n  font-size: 16px;\n}\n",[51,127121,127122,127128,127140],{"__ignoreMap":143},[147,127123,127124,127126],{"class":149,"line":150},[147,127125,52073],{"class":153},[147,127127,15845],{"class":157},[147,127129,127130,127132,127134,127136,127138],{"class":149,"line":312},[147,127131,70899],{"class":448},[147,127133,51710],{"class":157},[147,127135,1000],{"class":448},[147,127137,51765],{"class":397},[147,127139,1565],{"class":157},[147,127141,127142],{"class":149,"line":1454},[147,127143,1839],{"class":157},[19,127145,127146],{},"⑤标题标签比较特殊，需要单独指定大小",[367,127148,127150],{"id":127149},"_633-字体粗细","6.3.3 字体粗细",[19,127152,127153],{},"font-weight: bold;",[19,127155,127156],{},"font-weight: 100；",[19,127158,127159,127161],{},[234,127160,248],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,127163,127164],{},"font-weight= 400;",[19,127166,127167],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[367,127169,127171],{"id":127170},"_634-文字样式","6.3.4 文字样式",[19,127173,127174],{},"font-style: normal；",[19,127176,127177,26747],{},[234,127178,127179],{},"属性值",[19,127181,127182],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,127184,127185],{},"②italic：浏览器会显示斜体的字体样式",[29,127187],{"style":31,"src":127188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[367,127190,127192],{"id":127191},"_635-字体符合属性","6.3.5 字体符合属性",[29,127194],{"style":31,"src":127195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[29,127197],{"style":31,"src":127198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,127200,127201],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,127203,127204,26747],{},[234,127205,236],{},[19,127207,127208],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,127210,127211],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,127213,127214],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,127216,127218],{"id":127217},"_64-css-test文本属性","6.4 css test文本属性",[367,127220,127222],{"id":127221},"_641-文本颜色","6.4.1 文本颜色",[19,127224,127225],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[138,127227,127229],{"className":140,"code":127228,"language":142,"meta":143,"style":143},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[51,127230,127231,127236,127242,127252,127257,127262],{"__ignoreMap":143},[147,127232,127233],{"class":149,"line":150},[147,127234,127235],{"class":458},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[147,127237,127238,127240],{"class":149,"line":312},[147,127239,19],{"class":153},[147,127241,15845],{"class":157},[147,127243,127244,127246,127248,127250],{"class":149,"line":1454},[147,127245,71178],{"class":448},[147,127247,51710],{"class":157},[147,127249,57694],{"class":448},[147,127251,1565],{"class":157},[147,127253,127254],{"class":149,"line":1469},[147,127255,127256],{"class":458},"  \u002F* color: #ff0000; *\u002F\n",[147,127258,127259],{"class":149,"line":1475},[147,127260,127261],{"class":458},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[147,127263,127264],{"class":149,"line":1489},[147,127265,1839],{"class":157},[29,127267],{"style":31,"src":127268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[367,127270,127272],{"id":127271},"_642-对齐文本","6.4.2 对齐文本",[19,127274,127275,127276,127279],{},"text-align属于用于设置元素内文本内容的 ",[234,127277,127278],{},"水平对齐"," 方式",[19,127281,127282],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[367,127284,127286],{"id":127285},"_643-装饰文本","6.4.3 装饰文本",[19,127288,127289],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[138,127291,127293],{"className":140,"code":127292,"language":142,"meta":143,"style":143},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[51,127294,127295,127301,127311,127315,127321,127332],{"__ignoreMap":143},[147,127296,127297,127299],{"class":149,"line":150},[147,127298,637],{"class":153},[147,127300,15845],{"class":157},[147,127302,127303,127305,127307,127309],{"class":149,"line":312},[147,127304,70775],{"class":448},[147,127306,51710],{"class":157},[147,127308,55010],{"class":448},[147,127310,1565],{"class":157},[147,127312,127313],{"class":149,"line":1454},[147,127314,1839],{"class":157},[147,127316,127317,127319],{"class":149,"line":1469},[147,127318,19],{"class":153},[147,127320,15845],{"class":157},[147,127322,127323,127325,127327,127330],{"class":149,"line":1475},[147,127324,70775],{"class":448},[147,127326,51710],{"class":157},[147,127328,127329],{"class":448},"underline",[147,127331,1565],{"class":157},[147,127333,127334],{"class":149,"line":1489},[147,127335,1839],{"class":157},[367,127337,127339],{"id":127338},"_644-文本缩进","6.4.4 文本缩进",[19,127341,127342],{},"实现文本的第一行首行缩进自己指定的距离",[19,127344,127345],{},"20px往右边走；-20px往左边走",[19,127347,127348],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[138,127350,127352],{"className":140,"code":127351,"language":142,"meta":143,"style":143},"p {\n  text-indent: 2em;\n}\n",[51,127353,127354,127360,127373],{"__ignoreMap":143},[147,127355,127356,127358],{"class":149,"line":150},[147,127357,19],{"class":153},[147,127359,15845],{"class":157},[147,127361,127362,127365,127367,127369,127371],{"class":149,"line":312},[147,127363,127364],{"class":448},"  text-indent",[147,127366,51710],{"class":157},[147,127368,477],{"class":448},[147,127370,23826],{"class":397},[147,127372,1565],{"class":157},[147,127374,127375],{"class":149,"line":1454},[147,127376,1839],{"class":157},[367,127378,127380],{"id":127379},"_645-行间距","6.4.5 行间距",[19,127382,127383],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[138,127385,127387],{"className":140,"code":127386,"language":142,"meta":143,"style":143},"p {\n  line-height: 1.6;\n}\n",[51,127388,127389,127395,127407],{"__ignoreMap":143},[147,127390,127391,127393],{"class":149,"line":150},[147,127392,19],{"class":153},[147,127394,15845],{"class":157},[147,127396,127397,127400,127402,127405],{"class":149,"line":312},[147,127398,127399],{"class":448},"  line-height",[147,127401,51710],{"class":157},[147,127403,127404],{"class":448},"1.6",[147,127406,1565],{"class":157},[147,127408,127409],{"class":149,"line":1454},[147,127410,1839],{"class":157},[308,127412,127413],{},"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":143,"searchDepth":312,"depth":312,"links":127415},[127416,127417,127425,127432],{"id":126897,"depth":312,"text":126898},{"id":126932,"depth":312,"text":126933,"children":127418},[127419,127420,127421,127422,127423,127424],{"id":126939,"depth":1454,"text":126940},{"id":126952,"depth":1454,"text":126953},{"id":127025,"depth":1454,"text":127026},{"id":127038,"depth":1454,"text":127039},{"id":127057,"depth":1454,"text":127058},{"id":127070,"depth":1454,"text":127071},{"id":127077,"depth":312,"text":127078,"children":127426},[127427,127428,127429,127430,127431],{"id":127084,"depth":1454,"text":127085},{"id":127096,"depth":1454,"text":127097},{"id":127149,"depth":1454,"text":127150},{"id":127170,"depth":1454,"text":127171},{"id":127191,"depth":1454,"text":127192},{"id":127217,"depth":312,"text":127218,"children":127433},[127434,127435,127436,127437,127438],{"id":127221,"depth":1454,"text":127222},{"id":127271,"depth":1454,"text":127272},{"id":127285,"depth":1454,"text":127286},{"id":127338,"depth":1454,"text":127339},{"id":127379,"depth":1454,"text":127380},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126889,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127445,"title":127446,"body":127447,"description":321,"extension":322,"meta":128096,"navigation":324,"path":128097,"seo":128098,"stem":128099,"__hash__":128100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127448,"toc":128077},[127449,127452,127456,127460,127520,127524,127534,127537,127540,127544,127569,127573,127576,127579,127582,127585,127588,127592,127595,127598,127640,127643,127669,127675,127678,127682,127686,127692,127695,127698,127701,127704,127707,127710,127755,127759,127762,127765,127769,127773,127802,127805,127810,127813,127816,127819,127822,127826,127830,127833,127835,127838,127842,127845,127849,127852,127855,127858,127862,127866,127872,127882,127885,127888,127891,127894,127897,128020,128028,128036,128074],[10,127450,127446],{"id":127451},"_7-css引入方式与选择器进阶",[14,127453,127455],{"id":127454},"_71-css引入方式","7.1 css引入方式",[367,127457,127459],{"id":127458},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[138,127461,127465],{"className":127462,"code":127463,"language":127464,"meta":143,"style":143},"language-Html shiki shiki-themes github-light github-dark","\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n","Html",[51,127466,127467,127475,127482,127494,127507,127512],{"__ignoreMap":143},[147,127468,127469,127471,127473],{"class":149,"line":150},[147,127470,1309],{"class":157},[147,127472,308],{"class":153},[147,127474,51580],{"class":157},[147,127476,127477,127480],{"class":149,"line":312},[147,127478,127479],{"class":153},"  h1",[147,127481,15845],{"class":157},[147,127483,127484,127487,127489,127492],{"class":149,"line":1454},[147,127485,127486],{"class":448},"    color",[147,127488,51710],{"class":157},[147,127490,127491],{"class":448},"blue",[147,127493,1565],{"class":157},[147,127495,127496,127499,127501,127503,127505],{"class":149,"line":1469},[147,127497,127498],{"class":448},"    font-size",[147,127500,51710],{"class":157},[147,127502,1199],{"class":448},[147,127504,51765],{"class":397},[147,127506,1565],{"class":157},[147,127508,127509],{"class":149,"line":1475},[147,127510,127511],{"class":157},"  }\n",[147,127513,127514,127516,127518],{"class":149,"line":1489},[147,127515,52058],{"class":157},[147,127517,308],{"class":153},[147,127519,51580],{"class":157},[19,127521,127522,26747],{},[234,127523,236],{},[19,127525,205,127526,127529,127530,127533],{},[51,127527,127528],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[51,127531,127532],{},"\u003Chead>","标签中",[19,127535,127536],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,127538,127539],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[367,127541,127543],{"id":127542},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[138,127545,127547],{"className":127462,"code":127546,"language":127464,"meta":143,"style":143},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[51,127548,127549],{"__ignoreMap":143},[147,127550,127551,127553,127555,127557,127559,127562,127565,127567],{"class":149,"line":150},[147,127552,1309],{"class":157},[147,127554,19],{"class":153},[147,127556,62899],{"class":2237},[147,127558,445],{"class":157},[147,127560,127561],{"class":504},"\"color: red; font-size: 16px;\"",[147,127563,127564],{"class":157},">这是一个段落\u003C\u002F",[147,127566,19],{"class":153},[147,127568,51580],{"class":157},[19,127570,127571,26747],{},[234,127572,236],{},[19,127574,127575],{},"①style其实就是标签的属性",[19,127577,127578],{},"②在双引号中间，写法要符合css规范",[19,127580,127581],{},"③可以控制当前的标签设置样式",[19,127583,127584],{},"④书写繁琐，简单时才用",[19,127586,127587],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[367,127589,127591],{"id":127590},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,127593,127594],{},"使用最多，单独建一个css文件，然后html引用",[19,127596,127597],{},"①css文件部分： style.css",[138,127599,127601],{"className":140,"code":127600,"language":142,"meta":143,"style":143},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[51,127602,127603,127608,127614,127624,127636],{"__ignoreMap":143},[147,127604,127605],{"class":149,"line":150},[147,127606,127607],{"class":458},"\u002F* style.css *\u002F\n",[147,127609,127610,127612],{"class":149,"line":312},[147,127611,10],{"class":153},[147,127613,15845],{"class":157},[147,127615,127616,127618,127620,127622],{"class":149,"line":1454},[147,127617,71178],{"class":448},[147,127619,51710],{"class":157},[147,127621,127491],{"class":448},[147,127623,1565],{"class":157},[147,127625,127626,127628,127630,127632,127634],{"class":149,"line":1469},[147,127627,70899],{"class":448},[147,127629,51710],{"class":157},[147,127631,1199],{"class":448},[147,127633,51765],{"class":397},[147,127635,1565],{"class":157},[147,127637,127638],{"class":149,"line":1475},[147,127639,1839],{"class":157},[19,127641,127642],{},"②html部分",[138,127644,127646],{"className":127462,"code":127645,"language":127464,"meta":143,"style":143},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[51,127647,127648],{"__ignoreMap":143},[147,127649,127650,127652,127654,127656,127658,127660,127662,127664,127667],{"class":149,"line":150},[147,127651,1309],{"class":157},[147,127653,69278],{"class":153},[147,127655,69281],{"class":2237},[147,127657,445],{"class":157},[147,127659,69286],{"class":504},[147,127661,61330],{"class":2237},[147,127663,445],{"class":157},[147,127665,127666],{"class":504},"\"style.css\"",[147,127668,51580],{"class":157},[19,127670,127671,127674],{},[51,127672,127673],{},"\u003Chr>","水平线标签（但是不常用！）",[19,127676,127677],{},"ctrl+0回到页面原来大小",[14,127679,127681],{"id":127680},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[367,127683,127685],{"id":127684},"_721-快速生成html","7.2.1 快速生成html",[19,127687,127688,127689],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[51,127690,127691],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,127693,127694],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,127696,127697],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,127699,127700],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,127702,127703],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,127705,127706],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,127708,127709],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[138,127711,127713],{"className":127462,"code":127712,"language":127464,"meta":143,"style":143},"\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",[51,127714,127715,127720,127725,127730,127735,127740,127745,127750],{"__ignoreMap":143},[147,127716,127717],{"class":149,"line":150},[147,127718,127719],{"class":458},"\u003C!-- Emmet 语法示例 -->\n",[147,127721,127722],{"class":149,"line":312},[147,127723,127724],{"class":458},"\u003C!-- div*3        → 生成3个div -->\n",[147,127726,127727],{"class":149,"line":1454},[147,127728,127729],{"class":458},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[147,127731,127732],{"class":149,"line":1469},[147,127733,127734],{"class":458},"\u003C!-- div+p        → 兄弟div和p -->\n",[147,127736,127737],{"class":149,"line":1475},[147,127738,127739],{"class":458},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[147,127741,127742],{"class":149,"line":1489},[147,127743,127744],{"class":458},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[147,127746,127747],{"class":149,"line":1495},[147,127748,127749],{"class":458},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[147,127751,127752],{"class":149,"line":1586},[147,127753,127754],{"class":458},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[367,127756,127758],{"id":127757},"_722-快速生成css","7.2.2 快速生成css",[19,127760,127761],{},"简写开头",[19,127763,127764],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,127766,127768],{"id":127767},"_73-css复合选择器","7.3 css复合选择器",[367,127770,127772],{"id":127771},"_731-后代选择器","7.3.1 后代选择器",[138,127774,127776],{"className":140,"code":127775,"language":142,"meta":143,"style":143},".parent .child {\n  color: blue;\n}\n",[51,127777,127778,127788,127798],{"__ignoreMap":143},[147,127779,127780,127783,127786],{"class":149,"line":150},[147,127781,127782],{"class":2237},".parent",[147,127784,127785],{"class":2237}," .child",[147,127787,15845],{"class":157},[147,127789,127790,127792,127794,127796],{"class":149,"line":312},[147,127791,71178],{"class":448},[147,127793,51710],{"class":157},[147,127795,127491],{"class":448},[147,127797,1565],{"class":157},[147,127799,127800],{"class":149,"line":1454},[147,127801,1839],{"class":157},[19,127803,127804],{},"元素1 元素2 {样式声明}",[19,127806,127807],{},[234,127808,127809],{},"注意点:",[19,127811,127812],{},"①元素1和元素2中间用空格隔开",[19,127814,127815],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,127817,127818],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,127820,127821],{},"④元素1和元素2可以是任意基础选择器",[367,127823,127825],{"id":127824},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,127827,127828],{},[234,127829,127809],{},[19,127831,127832],{},"①元素1和元素2中间用大于号隔开",[19,127834,127815],{},[19,127836,127837],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[367,127839,127841],{"id":127840},"_733-并集选择器","7.3.3 并集选择器",[19,127843,127844],{},"元素1，元素2 {样式声明}",[19,127846,127847],{},[234,127848,127809],{},[19,127850,127851],{},"①元素1和元素2中间用逗号隔开",[19,127853,127854],{},"②逗号可以理解为和的意思",[19,127856,127857],{},"③并集选择器通常用于集体声明",[367,127859,127861],{"id":127860},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,127863,127864],{},[234,127865,127809],{},[19,127867,127868,127869,127871],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69278,127870],{},"－:visited－:hover－:active。",[19,127873,127874,127875,127878,127879,26014],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127876,127877],"hover",{}," 、 ",[127880,127881],"first-child",{},[19,127883,127884],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,127886,127887],{},"link对没访问的进行设置",[19,127889,127890],{},"vistied对已访问的进行改变",[19,127892,127893],{},"hover鼠标经过就会变",[19,127895,127896],{},"active常按(点)就会变",[138,127898,127900],{"className":140,"code":127899,"language":142,"meta":143,"style":143},"\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",[51,127901,127902,127907,127916,127926,127936,127940,127949,127960,127964,127972,127982,127992,127996,128005,128016],{"__ignoreMap":143},[147,127903,127904],{"class":149,"line":150},[147,127905,127906],{"class":458},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[147,127908,127909,127911,127914],{"class":149,"line":312},[147,127910,637],{"class":153},[147,127912,127913],{"class":2237},":link",[147,127915,15845],{"class":157},[147,127917,127918,127920,127922,127924],{"class":149,"line":1454},[147,127919,71178],{"class":448},[147,127921,51710],{"class":157},[147,127923,62642],{"class":448},[147,127925,1565],{"class":157},[147,127927,127928,127930,127932,127934],{"class":149,"line":1469},[147,127929,70775],{"class":448},[147,127931,51710],{"class":157},[147,127933,55010],{"class":448},[147,127935,1565],{"class":157},[147,127937,127938],{"class":149,"line":1475},[147,127939,1839],{"class":157},[147,127941,127942,127944,127947],{"class":149,"line":1489},[147,127943,637],{"class":153},[147,127945,127946],{"class":2237},":visited",[147,127948,15845],{"class":157},[147,127950,127951,127953,127955,127958],{"class":149,"line":1495},[147,127952,71178],{"class":448},[147,127954,51710],{"class":157},[147,127956,127957],{"class":448},"purple",[147,127959,1565],{"class":157},[147,127961,127962],{"class":149,"line":1586},[147,127963,1839],{"class":157},[147,127965,127966,127968,127970],{"class":149,"line":1592},[147,127967,637],{"class":153},[147,127969,61213],{"class":2237},[147,127971,15845],{"class":157},[147,127973,127974,127976,127978,127980],{"class":149,"line":1604},[147,127975,71178],{"class":448},[147,127977,51710],{"class":157},[147,127979,55162],{"class":448},[147,127981,1565],{"class":157},[147,127983,127984,127986,127988,127990],{"class":149,"line":1886},[147,127985,70775],{"class":448},[147,127987,51710],{"class":157},[147,127989,127329],{"class":448},[147,127991,1565],{"class":157},[147,127993,127994],{"class":149,"line":1891},[147,127995,1839],{"class":157},[147,127997,127998,128000,128003],{"class":149,"line":1897},[147,127999,637],{"class":153},[147,128001,128002],{"class":2237},":active",[147,128004,15845],{"class":157},[147,128006,128007,128009,128011,128014],{"class":149,"line":1902},[147,128008,71178],{"class":448},[147,128010,51710],{"class":157},[147,128012,128013],{"class":448},"green",[147,128015,1565],{"class":157},[147,128017,128018],{"class":149,"line":1916},[147,128019,1839],{"class":157},[367,128021,128023,128024,128027],{"id":128022},"_735-伪类选择器","7.3.5 ",[128025,128026],"focus",{},"伪类选择器",[19,128029,128030,128032,128033,128035],{},[128025,128031],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[51,128034,208],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[138,128037,128039],{"className":140,"code":128038,"language":142,"meta":143,"style":143},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[51,128040,128041,128049,128060,128070],{"__ignoreMap":143},[147,128042,128043,128045,128047],{"class":149,"line":150},[147,128044,54094],{"class":153},[147,128046,62173],{"class":2237},[147,128048,15845],{"class":157},[147,128050,128051,128054,128056,128058],{"class":149,"line":312},[147,128052,128053],{"class":448},"  border-color",[147,128055,51710],{"class":157},[147,128057,55162],{"class":448},[147,128059,1565],{"class":157},[147,128061,128062,128064,128066,128068],{"class":149,"line":1454},[147,128063,71071],{"class":448},[147,128065,51710],{"class":157},[147,128067,55010],{"class":448},[147,128069,1565],{"class":157},[147,128071,128072],{"class":149,"line":1469},[147,128073,1839],{"class":157},[308,128075,128076],{},"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":143,"searchDepth":312,"depth":312,"links":128078},[128079,128084,128088],{"id":127454,"depth":312,"text":127455,"children":128080},[128081,128082,128083],{"id":127458,"depth":1454,"text":127459},{"id":127542,"depth":1454,"text":127543},{"id":127590,"depth":1454,"text":127591},{"id":127680,"depth":312,"text":127681,"children":128085},[128086,128087],{"id":127684,"depth":1454,"text":127685},{"id":127757,"depth":1454,"text":127758},{"id":127767,"depth":312,"text":127768,"children":128089},[128090,128091,128092,128093,128094],{"id":127771,"depth":1454,"text":127772},{"id":127824,"depth":1454,"text":127825},{"id":127840,"depth":1454,"text":127841},{"id":127860,"depth":1454,"text":127861},{"id":128022,"depth":1454,"text":128095},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127446,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":128102,"title":128103,"body":128104,"description":321,"extension":322,"meta":130027,"navigation":324,"path":130028,"seo":130029,"stem":130030,"__hash__":130031},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":128105,"toc":130001},[128106,128109,128113,128122,128126,128152,128157,128160,128163,128166,128169,128173,128176,128186,128194,128198,128233,128238,128241,128244,128247,128250,128254,128257,128266,128270,128283,128288,128291,128294,128297,128301,128304,128308,128311,128366,128369,128400,128403,128457,128461,128464,128630,128753,128756,128759,128762,128765,128769,128772,128776,128779,128782,128786,128789,128820,128847,128875,128878,128882,128908,128951,128955,129049,129052,129079,129082,129085,129088,129091,129094,129097,129100,129103,129106,129110,129167,129194,129198,129246,129250,129291,129293,129296,129299,129302,129305,129309,129401,129404,129407,129410,129414,129537,129738,129742,129746,129749,129752,129755,129759,129762,129765,129790,129793,129796,129799,129802,129805,129809,129817,129879,129882,129940,129943,129946,129949,129952,129955,129958,129961,129998],[10,128107,128103],{"id":128108},"_8-css显示模式与背景特性",[14,128110,128112],{"id":128111},"_81-css元素显示模式","8.1 css元素显示模式",[19,128114,128115,128116,128118,128119,128121],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[51,128117,126433],{},"自己占一行，比如一行可以放多个",[51,128120,126436],{},"，HTML 元素一般分为块元素和行内元素两种类型",[367,128123,128125],{"id":128124},"_811-块元素","8.1.1 块元素",[19,128127,128128,128129,128131,128132,611,128135,611,128137,611,128139,611,128142,611,128145,128148,128149,128151],{},"常见的块元素有",[51,128130,126337],{},"~",[51,128133,128134],{},"\u003Ch6>",[51,128136,126363],{},[51,128138,126433],{},[51,128140,128141],{},"\u003Cul>",[51,128143,128144],{},"\u003Col>",[51,128146,128147],{},"\u003Cli>","等，其中 ",[51,128150,126433],{}," 标签是最典型的块元素",[19,128153,128154],{},[234,128155,128156],{},"块级元素的特点：",[19,128158,128159],{},"① 比较霸道，自己独占一行。",[19,128161,128162],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,128164,128165],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,128167,128168],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,128170,128171],{},[234,128172,248],{},[19,128174,128175],{},"①文字类的元素内不能使用块级元素",[19,128177,77521,128178,128180,128181,128183,128184],{},[51,128179,126363],{}," 标签主要用于存放文字，因此 ",[51,128182,126363],{}," 里面不能放块级元素，特别是不能放",[51,128185,126433],{},[19,128187,128188,128189,128131,128191,128193],{},"⑥同理， ",[51,128190,126337],{},[51,128192,128134],{},"等都是文字类块级标签，里面也不能放其他块级元素",[367,128195,128197],{"id":128196},"_812-行内元素","8.1.2 行内元素",[19,128199,128200,128201,611,128203,611,128206,611,128209,611,128212,611,128215,611,128218,611,128221,611,128224,611,128227,128229,128230,128232],{},"常见的行内元素有 ",[51,128202,126595],{},[51,128204,128205],{},"\u003Cstrong>",[51,128207,128208],{},"\u003Cb>",[51,128210,128211],{},"\u003Cem>",[51,128213,128214],{},"\u003Ci>",[51,128216,128217],{},"\u003Cdel>",[51,128219,128220],{},"\u003Cs>",[51,128222,128223],{},"\u003Cins>",[51,128225,128226],{},"\u003Cu>",[51,128228,126436],{}," 等，其中 ",[51,128231,126436],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,128234,128235],{},[234,128236,128237],{},"特点：",[19,128239,128240],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,128242,128243],{},"② 高、宽直接设置是无效的。",[19,128245,128246],{},"③ 默认宽度就是它本身内容的宽度。",[19,128248,128249],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,128251,128252],{},[234,128253,248],{},[19,128255,128256],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,128258,128259,128260,128262,128263,128265],{},"②特殊情况链接 ",[51,128261,126595],{}," 里面可以放块级元素，但是给 ",[51,128264,126595],{}," 转换一下块级模式最安全",[367,128267,128269],{"id":128268},"_813-行内块元素","8.1.3 行内块元素",[19,128271,128272,128273,611,128276,611,128279,128282],{},"在行内元素中有几个特殊的标签 —— ",[51,128274,128275],{},"\u003Cimg \u002F>",[51,128277,128278],{},"\u003Cinput \u002F>",[51,128280,128281],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,128284,128285],{},[234,128286,128287],{},"行内块元素的特点：",[19,128289,128290],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,128292,128293],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,128295,128296],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[367,128298,128300],{"id":128299},"_814-总结","8.1.4 总结",[29,128302],{"style":31,"src":128303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[367,128305,128307],{"id":128306},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,128309,128310],{},"①转换为块元素：display:block;",[138,128312,128314],{"className":140,"code":128313,"language":142,"meta":143,"style":143},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[51,128315,128316,128321,128327,128338,128350,128362],{"__ignoreMap":143},[147,128317,128318],{"class":149,"line":150},[147,128319,128320],{"class":458},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[147,128322,128323,128325],{"class":149,"line":312},[147,128324,637],{"class":153},[147,128326,15845],{"class":157},[147,128328,128329,128332,128334,128336],{"class":149,"line":1454},[147,128330,128331],{"class":448},"  display",[147,128333,51710],{"class":157},[147,128335,61142],{"class":448},[147,128337,1565],{"class":157},[147,128339,128340,128342,128344,128346,128348],{"class":149,"line":1469},[147,128341,70841],{"class":448},[147,128343,51710],{"class":157},[147,128345,710],{"class":448},[147,128347,51765],{"class":397},[147,128349,1565],{"class":157},[147,128351,128352,128354,128356,128358,128360],{"class":149,"line":1475},[147,128353,71061],{"class":448},[147,128355,51710],{"class":157},[147,128357,800],{"class":448},[147,128359,51765],{"class":397},[147,128361,1565],{"class":157},[147,128363,128364],{"class":149,"line":1489},[147,128365,1839],{"class":157},[19,128367,128368],{},"②转换为行内元素：display:inline;",[138,128370,128372],{"className":140,"code":128371,"language":142,"meta":143,"style":143},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[51,128373,128374,128379,128385,128396],{"__ignoreMap":143},[147,128375,128376],{"class":149,"line":150},[147,128377,128378],{"class":458},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[147,128380,128381,128383],{"class":149,"line":312},[147,128382,51884],{"class":153},[147,128384,15845],{"class":157},[147,128386,128387,128389,128391,128394],{"class":149,"line":1454},[147,128388,128331],{"class":448},[147,128390,51710],{"class":157},[147,128392,128393],{"class":448},"inline",[147,128395,1565],{"class":157},[147,128397,128398],{"class":149,"line":1469},[147,128399,1839],{"class":157},[19,128401,128402],{},"③转换为行内块：display:inline-block;",[138,128404,128406],{"className":140,"code":128405,"language":142,"meta":143,"style":143},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[51,128407,128408,128413,128419,128429,128441,128453],{"__ignoreMap":143},[147,128409,128410],{"class":149,"line":150},[147,128411,128412],{"class":458},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[147,128414,128415,128417],{"class":149,"line":312},[147,128416,147],{"class":153},[147,128418,15845],{"class":157},[147,128420,128421,128423,128425,128427],{"class":149,"line":1454},[147,128422,128331],{"class":448},[147,128424,51710],{"class":157},[147,128426,72656],{"class":448},[147,128428,1565],{"class":157},[147,128430,128431,128433,128435,128437,128439],{"class":149,"line":1469},[147,128432,70841],{"class":448},[147,128434,51710],{"class":157},[147,128436,1011],{"class":448},[147,128438,51765],{"class":397},[147,128440,1565],{"class":157},[147,128442,128443,128445,128447,128449,128451],{"class":149,"line":1475},[147,128444,71061],{"class":448},[147,128446,51710],{"class":157},[147,128448,1350],{"class":448},[147,128450,51765],{"class":397},[147,128452,1565],{"class":157},[147,128454,128455],{"class":149,"line":1489},[147,128456,1839],{"class":157},[367,128458,128460],{"id":128459},"_816-小米侧边栏","8.1.6 小米侧边栏",[29,128462],{"style":31,"src":128463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[138,128465,128467],{"className":127462,"code":128466,"language":127464,"meta":143,"style":143},"\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",[51,128468,128469,128474,128489,128508,128527,128546,128565,128584,128603,128622],{"__ignoreMap":143},[147,128470,128471],{"class":149,"line":150},[147,128472,128473],{"class":458},"\u003C!-- 小米侧边栏案例 -->\n",[147,128475,128476,128478,128480,128482,128484,128487],{"class":149,"line":312},[147,128477,1309],{"class":157},[147,128479,51884],{"class":153},[147,128481,53759],{"class":2237},[147,128483,445],{"class":157},[147,128485,128486],{"class":504},"\"sidebar\"",[147,128488,51580],{"class":157},[147,128490,128491,128493,128495,128497,128499,128501,128504,128506],{"class":149,"line":1454},[147,128492,52417],{"class":157},[147,128494,637],{"class":153},[147,128496,61330],{"class":2237},[147,128498,445],{"class":157},[147,128500,61335],{"class":504},[147,128502,128503],{"class":157},">手机 电话卡\u003C\u002F",[147,128505,637],{"class":153},[147,128507,51580],{"class":157},[147,128509,128510,128512,128514,128516,128518,128520,128523,128525],{"class":149,"line":1469},[147,128511,52417],{"class":157},[147,128513,637],{"class":153},[147,128515,61330],{"class":2237},[147,128517,445],{"class":157},[147,128519,61335],{"class":504},[147,128521,128522],{"class":157},">电视 盒子\u003C\u002F",[147,128524,637],{"class":153},[147,128526,51580],{"class":157},[147,128528,128529,128531,128533,128535,128537,128539,128542,128544],{"class":149,"line":1475},[147,128530,52417],{"class":157},[147,128532,637],{"class":153},[147,128534,61330],{"class":2237},[147,128536,445],{"class":157},[147,128538,61335],{"class":504},[147,128540,128541],{"class":157},">笔记本 平板\u003C\u002F",[147,128543,637],{"class":153},[147,128545,51580],{"class":157},[147,128547,128548,128550,128552,128554,128556,128558,128561,128563],{"class":149,"line":1489},[147,128549,52417],{"class":157},[147,128551,637],{"class":153},[147,128553,61330],{"class":2237},[147,128555,445],{"class":157},[147,128557,61335],{"class":504},[147,128559,128560],{"class":157},">出行 穿戴\u003C\u002F",[147,128562,637],{"class":153},[147,128564,51580],{"class":157},[147,128566,128567,128569,128571,128573,128575,128577,128580,128582],{"class":149,"line":1495},[147,128568,52417],{"class":157},[147,128570,637],{"class":153},[147,128572,61330],{"class":2237},[147,128574,445],{"class":157},[147,128576,61335],{"class":504},[147,128578,128579],{"class":157},">智能 路由器\u003C\u002F",[147,128581,637],{"class":153},[147,128583,51580],{"class":157},[147,128585,128586,128588,128590,128592,128594,128596,128599,128601],{"class":149,"line":1586},[147,128587,52417],{"class":157},[147,128589,637],{"class":153},[147,128591,61330],{"class":2237},[147,128593,445],{"class":157},[147,128595,61335],{"class":504},[147,128597,128598],{"class":157},">健康 儿童\u003C\u002F",[147,128600,637],{"class":153},[147,128602,51580],{"class":157},[147,128604,128605,128607,128609,128611,128613,128615,128618,128620],{"class":149,"line":1592},[147,128606,52417],{"class":157},[147,128608,637],{"class":153},[147,128610,61330],{"class":2237},[147,128612,445],{"class":157},[147,128614,61335],{"class":504},[147,128616,128617],{"class":157},">耳机 音响\u003C\u002F",[147,128619,637],{"class":153},[147,128621,51580],{"class":157},[147,128623,128624,128626,128628],{"class":149,"line":1604},[147,128625,52058],{"class":157},[147,128627,51884],{"class":153},[147,128629,51580],{"class":157},[138,128631,128633],{"className":140,"code":128632,"language":142,"meta":143,"style":143},".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",[51,128634,128635,128644,128654,128667,128679,128691,128703,128713,128724,128728,128738,128749],{"__ignoreMap":143},[147,128636,128637,128640,128642],{"class":149,"line":150},[147,128638,128639],{"class":2237},".sidebar",[147,128641,1673],{"class":153},[147,128643,15845],{"class":157},[147,128645,128646,128648,128650,128652],{"class":149,"line":312},[147,128647,128331],{"class":448},[147,128649,51710],{"class":157},[147,128651,61142],{"class":448},[147,128653,1565],{"class":157},[147,128655,128656,128658,128660,128663,128665],{"class":149,"line":1454},[147,128657,70841],{"class":448},[147,128659,51710],{"class":157},[147,128661,128662],{"class":448},"234",[147,128664,51765],{"class":397},[147,128666,1565],{"class":157},[147,128668,128669,128671,128673,128675,128677],{"class":149,"line":1469},[147,128670,71061],{"class":448},[147,128672,51710],{"class":157},[147,128674,851],{"class":448},[147,128676,51765],{"class":397},[147,128678,1565],{"class":157},[147,128680,128681,128683,128685,128687,128689],{"class":149,"line":1475},[147,128682,127399],{"class":448},[147,128684,51710],{"class":157},[147,128686,851],{"class":448},[147,128688,51765],{"class":397},[147,128690,1565],{"class":157},[147,128692,128693,128695,128697,128699,128701],{"class":149,"line":1489},[147,128694,71096],{"class":448},[147,128696,51710],{"class":157},[147,128698,1350],{"class":448},[147,128700,51765],{"class":397},[147,128702,1565],{"class":157},[147,128704,128705,128707,128709,128711],{"class":149,"line":1495},[147,128706,71178],{"class":448},[147,128708,51710],{"class":157},[147,128710,61115],{"class":448},[147,128712,1565],{"class":157},[147,128714,128715,128717,128719,128722],{"class":149,"line":1586},[147,128716,71151],{"class":448},[147,128718,51710],{"class":157},[147,128720,128721],{"class":448},"#55585a",[147,128723,1565],{"class":157},[147,128725,128726],{"class":149,"line":1592},[147,128727,1839],{"class":157},[147,128729,128730,128732,128734,128736],{"class":149,"line":1604},[147,128731,128639],{"class":2237},[147,128733,1673],{"class":153},[147,128735,61213],{"class":2237},[147,128737,15845],{"class":157},[147,128739,128740,128742,128744,128747],{"class":149,"line":1886},[147,128741,71151],{"class":448},[147,128743,51710],{"class":157},[147,128745,128746],{"class":448},"#ff6700",[147,128748,1565],{"class":157},[147,128750,128751],{"class":149,"line":1891},[147,128752,1839],{"class":157},[29,128754],{"style":31,"src":128755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,128757,128758],{},"行高=盒子高度：实现文字的垂直居中",[19,128760,128761],{},"原理讲解：",[29,128763],{"style":31,"src":128764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,128766,128768],{"id":128767},"_82-css背景","8.2 css背景",[19,128770,128771],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[367,128773,128775],{"id":128774},"_821-背景颜色","8.2.1 背景颜色",[19,128777,128778],{},"background-color:颜色值;",[19,128780,128781],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[367,128783,128785],{"id":128784},"_822-背景图片","8.2.2 背景图片",[19,128787,128788],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[138,128790,128792],{"className":140,"code":128791,"language":142,"meta":143,"style":143},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[51,128793,128794,128800,128816],{"__ignoreMap":143},[147,128795,128796,128798],{"class":149,"line":150},[147,128797,51884],{"class":153},[147,128799,15845],{"class":157},[147,128801,128802,128805,128807,128809,128811,128814],{"class":149,"line":312},[147,128803,128804],{"class":448},"  background-image",[147,128806,51710],{"class":157},[147,128808,61999],{"class":448},[147,128810,401],{"class":157},[147,128812,128813],{"class":5490},"images\u002Fbg.png",[147,128815,2993],{"class":157},[147,128817,128818],{"class":149,"line":1454},[147,128819,1839],{"class":157},[537,128821,128822,128831],{},[540,128823,128824],{},[543,128825,128826,128829],{},[546,128827,128828],{"align":24009},"参数值",[546,128830,102967],{"align":24009},[583,128832,128833,128840],{},[543,128834,128835,128837],{},[588,128836,55010],{"align":24009},[588,128838,128839],{"align":24009},"无背景图（默认的）",[543,128841,128842,128844],{},[588,128843,61999],{"align":24009},[588,128845,128846],{"align":24009},"使用绝对或相对地址指定背景图像",[138,128848,128849],{"className":140,"code":128791,"language":142,"meta":143,"style":143},[51,128850,128851,128857,128871],{"__ignoreMap":143},[147,128852,128853,128855],{"class":149,"line":150},[147,128854,51884],{"class":153},[147,128856,15845],{"class":157},[147,128858,128859,128861,128863,128865,128867,128869],{"class":149,"line":312},[147,128860,128804],{"class":448},[147,128862,51710],{"class":157},[147,128864,61999],{"class":448},[147,128866,401],{"class":157},[147,128868,128813],{"class":5490},[147,128870,2993],{"class":157},[147,128872,128873],{"class":149,"line":1454},[147,128874,1839],{"class":157},[19,128876,128877],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[367,128879,128881],{"id":128880},"_823-背景平铺","8.2.3 背景平铺",[138,128883,128885],{"className":140,"code":128884,"language":142,"meta":143,"style":143},"div {\n  background-repeat: no-repeat;\n}\n",[51,128886,128887,128893,128904],{"__ignoreMap":143},[147,128888,128889,128891],{"class":149,"line":150},[147,128890,51884],{"class":153},[147,128892,15845],{"class":157},[147,128894,128895,128898,128900,128902],{"class":149,"line":312},[147,128896,128897],{"class":448},"  background-repeat",[147,128899,51710],{"class":157},[147,128901,62009],{"class":448},[147,128903,1565],{"class":157},[147,128905,128906],{"class":149,"line":1454},[147,128907,1839],{"class":157},[537,128909,128910,128918],{},[540,128911,128912],{},[543,128913,128914,128916],{},[546,128915,128828],{"align":24009},[546,128917,102967],{"align":24009},[583,128919,128920,128928,128935,128943],{},[543,128921,128922,128925],{},[588,128923,128924],{"align":24009},"repeat",[588,128926,128927],{"align":24009},"背景图像在纵向和横向上平铺（默认的）",[543,128929,128930,128932],{},[588,128931,62009],{"align":24009},[588,128933,128934],{"align":24009},"背景图像不平铺",[543,128936,128937,128940],{},[588,128938,128939],{"align":24009},"repeat-x",[588,128941,128942],{"align":24009},"背景图像在横向上平铺",[543,128944,128945,128948],{},[588,128946,128947],{"align":24009},"repeat-y",[588,128949,128950],{"align":24009},"背景图像在纵向平铺",[367,128952,128954],{"id":128953},"_824-背景图片位置","8.2.4 背景图片位置",[138,128956,128958],{"className":140,"code":128957,"language":142,"meta":143,"style":143},"\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",[51,128959,128960,128965,128971,128985,128989,128994,129000,129016,129020,129025,129031,129045],{"__ignoreMap":143},[147,128961,128962],{"class":149,"line":150},[147,128963,128964],{"class":458},"\u002F* 方位名词 *\u002F\n",[147,128966,128967,128969],{"class":149,"line":312},[147,128968,51884],{"class":153},[147,128970,15845],{"class":157},[147,128972,128973,128976,128978,128980,128983],{"class":149,"line":1454},[147,128974,128975],{"class":448},"  background-position",[147,128977,51710],{"class":157},[147,128979,51865],{"class":448},[147,128981,128982],{"class":448}," top",[147,128984,1565],{"class":157},[147,128986,128987],{"class":149,"line":1469},[147,128988,1839],{"class":157},[147,128990,128991],{"class":149,"line":1475},[147,128992,128993],{"class":458},"\u002F* 精确单位 *\u002F\n",[147,128995,128996,128998],{"class":149,"line":1489},[147,128997,51884],{"class":153},[147,128999,15845],{"class":157},[147,129001,129002,129004,129006,129008,129010,129012,129014],{"class":149,"line":1495},[147,129003,128975],{"class":448},[147,129005,51710],{"class":157},[147,129007,1099],{"class":448},[147,129009,51765],{"class":397},[147,129011,57777],{"class":448},[147,129013,51765],{"class":397},[147,129015,1565],{"class":157},[147,129017,129018],{"class":149,"line":1586},[147,129019,1839],{"class":157},[147,129021,129022],{"class":149,"line":1592},[147,129023,129024],{"class":458},"\u002F* 混合单位 *\u002F\n",[147,129026,129027,129029],{"class":149,"line":1604},[147,129028,51884],{"class":153},[147,129030,15845],{"class":157},[147,129032,129033,129035,129037,129039,129041,129043],{"class":149,"line":1886},[147,129034,128975],{"class":448},[147,129036,51710],{"class":157},[147,129038,1099],{"class":448},[147,129040,51765],{"class":397},[147,129042,17417],{"class":448},[147,129044,1565],{"class":157},[147,129046,129047],{"class":149,"line":1891},[147,129048,1839],{"class":157},[19,129050,129051],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[537,129053,129054,129062],{},[540,129055,129056],{},[543,129057,129058,129060],{},[546,129059,128828],{"align":24009},[546,129061,26143],{"align":24009},[583,129063,129064,129071],{},[543,129065,129066,129068],{},[588,129067,52241],{"align":24009},[588,129069,129070],{"align":24009},"百分数|由浮点数和单位标识符组成的长度值",[543,129072,129073,129076],{},[588,129074,129075],{"align":24009},"position",[588,129077,129078],{"align":24009},"top|center|bottom|left|center|right 方位名词",[19,129080,129081],{},"其他说明：",[19,129083,129084],{},"①参数是方位名词",[19,129086,129087],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,129089,129090],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,129092,129093],{},"②参数是精确单位",[19,129095,129096],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,129098,129099],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,129101,129102],{},"③参数是混合单位",[19,129104,129105],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[367,129107,129109],{"id":129108},"_825-背景图片固定","8.2.5 背景图片固定",[138,129111,129113],{"className":140,"code":129112,"language":142,"meta":143,"style":143},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[51,129114,129115,129120,129126,129138,129142,129147,129153,129163],{"__ignoreMap":143},[147,129116,129117],{"class":149,"line":150},[147,129118,129119],{"class":458},"\u002F* 背景滚动（默认） *\u002F\n",[147,129121,129122,129124],{"class":149,"line":312},[147,129123,51884],{"class":153},[147,129125,15845],{"class":157},[147,129127,129128,129131,129133,129136],{"class":149,"line":1454},[147,129129,129130],{"class":448},"  background-attachment",[147,129132,51710],{"class":157},[147,129134,129135],{"class":448},"scroll",[147,129137,1565],{"class":157},[147,129139,129140],{"class":149,"line":1469},[147,129141,1839],{"class":157},[147,129143,129144],{"class":149,"line":1475},[147,129145,129146],{"class":458},"\u002F* 背景固定 *\u002F\n",[147,129148,129149,129151],{"class":149,"line":1489},[147,129150,51884],{"class":153},[147,129152,15845],{"class":157},[147,129154,129155,129157,129159,129161],{"class":149,"line":1495},[147,129156,129130],{"class":448},[147,129158,51710],{"class":157},[147,129160,86505],{"class":448},[147,129162,1565],{"class":157},[147,129164,129165],{"class":149,"line":1586},[147,129166,1839],{"class":157},[537,129168,129169,129178],{},[540,129170,129171],{},[543,129172,129173,129176],{},[546,129174,129175],{"align":24009},"参数",[546,129177,102967],{"align":24009},[583,129179,129180,129187],{},[543,129181,129182,129184],{},[588,129183,129135],{"align":24009},[588,129185,129186],{"align":24009},"背景图像是随对象内容滚动",[543,129188,129189,129191],{},[588,129190,86505],{"align":24009},[588,129192,129193],{"align":24009},"背景图像固定",[367,129195,129197],{"id":129196},"_826-背景样式合写","8.2.6 背景样式合写",[138,129199,129201],{"className":140,"code":129200,"language":142,"meta":143,"style":143},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[51,129202,129203,129208,129214,129242],{"__ignoreMap":143},[147,129204,129205],{"class":149,"line":150},[147,129206,129207],{"class":458},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[147,129209,129210,129212],{"class":149,"line":312},[147,129211,51884],{"class":153},[147,129213,15845],{"class":157},[147,129215,129216,129218,129220,129222,129225,129227,129229,129231,129233,129236,129238,129240],{"class":149,"line":1454},[147,129217,70884],{"class":448},[147,129219,51710],{"class":157},[147,129221,61115],{"class":448},[147,129223,129224],{"class":448}," url",[147,129226,401],{"class":157},[147,129228,128813],{"class":5490},[147,129230,13988],{"class":157},[147,129232,62009],{"class":448},[147,129234,129235],{"class":448}," fixed",[147,129237,17417],{"class":448},[147,129239,128982],{"class":448},[147,129241,1565],{"class":157},[147,129243,129244],{"class":149,"line":1469},[147,129245,1839],{"class":157},[367,129247,129249],{"id":129248},"_827-背景色半透明","8.2.7 背景色半透明",[138,129251,129253],{"className":140,"code":129252,"language":142,"meta":143,"style":143},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[51,129254,129255,129261,129287],{"__ignoreMap":143},[147,129256,129257,129259],{"class":149,"line":150},[147,129258,51884],{"class":153},[147,129260,15845],{"class":157},[147,129262,129263,129265,129267,129269,129271,129273,129275,129277,129279,129281,129283,129285],{"class":149,"line":312},[147,129264,70884],{"class":448},[147,129266,51710],{"class":157},[147,129268,55383],{"class":448},[147,129270,401],{"class":157},[147,129272,590],{"class":448},[147,129274,12709],{"class":157},[147,129276,590],{"class":448},[147,129278,12709],{"class":157},[147,129280,590],{"class":448},[147,129282,12709],{"class":157},[147,129284,100793],{"class":448},[147,129286,2993],{"class":157},[147,129288,129289],{"class":149,"line":1454},[147,129290,1839],{"class":157},[19,129292,99668],{},[19,129294,129295],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,129297,129298],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,129300,129301],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,129303,129304],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[367,129306,129308],{"id":129307},"_828-总结","8.2.8 总结",[537,129310,129311,129322],{},[540,129312,129313],{},[543,129314,129315,129318,129320],{},[546,129316,129317],{"align":24009},"属性",[546,129319,102967],{"align":24009},[546,129321,551],{"align":24009},[583,129323,129324,129335,129346,129357,129368,129379,129390],{},[543,129325,129326,129329,129332],{},[588,129327,129328],{"align":24009},"background-color",[588,129330,129331],{"align":24009},"背景颜色",[588,129333,129334],{"align":24009},"预定义的颜色值\u002F十六进制\u002FRGB代码",[543,129336,129337,129340,129343],{},[588,129338,129339],{"align":24009},"background-image",[588,129341,129342],{"align":24009},"背景图片",[588,129344,129345],{"align":24009},"url(图片路径)",[543,129347,129348,129351,129354],{},[588,129349,129350],{"align":24009},"background-repeat",[588,129352,129353],{"align":24009},"是否平铺",[588,129355,129356],{"align":24009},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[543,129358,129359,129362,129365],{},[588,129360,129361],{"align":24009},"background-position",[588,129363,129364],{"align":24009},"背景位置",[588,129366,129367],{"align":24009},"length\u002Fposition 分别是x和y坐标",[543,129369,129370,129373,129376],{},[588,129371,129372],{"align":24009},"background-attachment",[588,129374,129375],{"align":24009},"背景附着",[588,129377,129378],{"align":24009},"scroll(背景滚动) \u002Ffixed (背景固定)",[543,129380,129381,129384,129387],{},[588,129382,129383],{"align":24009},"背景简写",[588,129385,129386],{"align":24009},"书写更简单",[588,129388,129389],{"align":24009},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[543,129391,129392,129395,129398],{},[588,129393,129394],{"align":24009},"背景半透明",[588,129396,129397],{"align":24009},"背景颜色半透明",[588,129399,129400],{"align":24009},"background: rgba(0,0,0.3); 后面必须是4个值",[19,129402,129403],{},"颜色渐变：",[29,129405],{"style":31,"src":129406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[29,129408],{"style":31,"src":129409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[367,129411,129413],{"id":129412},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[138,129415,129417],{"className":127462,"code":129416,"language":127464,"meta":143,"style":143},"\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",[51,129418,129419,129434,129453,129472,129491,129510,129529],{"__ignoreMap":143},[147,129420,129421,129423,129425,129427,129429,129432],{"class":149,"line":150},[147,129422,1309],{"class":157},[147,129424,51884],{"class":153},[147,129426,53759],{"class":2237},[147,129428,445],{"class":157},[147,129430,129431],{"class":504},"\"nav\"",[147,129433,51580],{"class":157},[147,129435,129436,129438,129440,129442,129444,129446,129449,129451],{"class":149,"line":312},[147,129437,52417],{"class":157},[147,129439,637],{"class":153},[147,129441,61330],{"class":2237},[147,129443,445],{"class":157},[147,129445,61335],{"class":504},[147,129447,129448],{"class":157},">五彩导航1\u003C\u002F",[147,129450,637],{"class":153},[147,129452,51580],{"class":157},[147,129454,129455,129457,129459,129461,129463,129465,129468,129470],{"class":149,"line":1454},[147,129456,52417],{"class":157},[147,129458,637],{"class":153},[147,129460,61330],{"class":2237},[147,129462,445],{"class":157},[147,129464,61335],{"class":504},[147,129466,129467],{"class":157},">五彩导航2\u003C\u002F",[147,129469,637],{"class":153},[147,129471,51580],{"class":157},[147,129473,129474,129476,129478,129480,129482,129484,129487,129489],{"class":149,"line":1469},[147,129475,52417],{"class":157},[147,129477,637],{"class":153},[147,129479,61330],{"class":2237},[147,129481,445],{"class":157},[147,129483,61335],{"class":504},[147,129485,129486],{"class":157},">五彩导航3\u003C\u002F",[147,129488,637],{"class":153},[147,129490,51580],{"class":157},[147,129492,129493,129495,129497,129499,129501,129503,129506,129508],{"class":149,"line":1475},[147,129494,52417],{"class":157},[147,129496,637],{"class":153},[147,129498,61330],{"class":2237},[147,129500,445],{"class":157},[147,129502,61335],{"class":504},[147,129504,129505],{"class":157},">五彩导航4\u003C\u002F",[147,129507,637],{"class":153},[147,129509,51580],{"class":157},[147,129511,129512,129514,129516,129518,129520,129522,129525,129527],{"class":149,"line":1489},[147,129513,52417],{"class":157},[147,129515,637],{"class":153},[147,129517,61330],{"class":2237},[147,129519,445],{"class":157},[147,129521,61335],{"class":504},[147,129523,129524],{"class":157},">五彩导航5\u003C\u002F",[147,129526,637],{"class":153},[147,129528,51580],{"class":157},[147,129530,129531,129533,129535],{"class":149,"line":1495},[147,129532,52058],{"class":157},[147,129534,51884],{"class":153},[147,129536,51580],{"class":157},[138,129538,129540],{"className":140,"code":129539,"language":142,"meta":143,"style":143},".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",[51,129541,129542,129551,129561,129573,129585,129595,129607,129617,129621,129646,129669,129692,129715],{"__ignoreMap":143},[147,129543,129544,129547,129549],{"class":149,"line":150},[147,129545,129546],{"class":2237},".nav",[147,129548,1673],{"class":153},[147,129550,15845],{"class":157},[147,129552,129553,129555,129557,129559],{"class":149,"line":312},[147,129554,128331],{"class":448},[147,129556,51710],{"class":157},[147,129558,72656],{"class":448},[147,129560,1565],{"class":157},[147,129562,129563,129565,129567,129569,129571],{"class":149,"line":1454},[147,129564,70841],{"class":448},[147,129566,51710],{"class":157},[147,129568,1216],{"class":448},[147,129570,51765],{"class":397},[147,129572,1565],{"class":157},[147,129574,129575,129577,129579,129581,129583],{"class":149,"line":1469},[147,129576,71061],{"class":448},[147,129578,51710],{"class":157},[147,129580,1255],{"class":448},[147,129582,51765],{"class":397},[147,129584,1565],{"class":157},[147,129586,129587,129589,129591,129593],{"class":149,"line":1475},[147,129588,70799],{"class":448},[147,129590,51710],{"class":157},[147,129592,51865],{"class":448},[147,129594,1565],{"class":157},[147,129596,129597,129599,129601,129603,129605],{"class":149,"line":1489},[147,129598,127399],{"class":448},[147,129600,51710],{"class":157},[147,129602,1255],{"class":448},[147,129604,51765],{"class":397},[147,129606,1565],{"class":157},[147,129608,129609,129611,129613,129615],{"class":149,"line":1495},[147,129610,71178],{"class":448},[147,129612,51710],{"class":157},[147,129614,61115],{"class":448},[147,129616,1565],{"class":157},[147,129618,129619],{"class":149,"line":1586},[147,129620,1839],{"class":157},[147,129622,129623,129625,129627,129630,129632,129634,129637,129639,129641,129643],{"class":149,"line":1592},[147,129624,129546],{"class":2237},[147,129626,1673],{"class":153},[147,129628,129629],{"class":2237},":nth-child",[147,129631,401],{"class":157},[147,129633,616],{"class":448},[147,129635,129636],{"class":157},") { ",[147,129638,129328],{"class":448},[147,129640,51710],{"class":157},[147,129642,128746],{"class":448},[147,129644,129645],{"class":157},"; }\n",[147,129647,129648,129650,129652,129654,129656,129658,129660,129662,129664,129667],{"class":149,"line":1604},[147,129649,129546],{"class":2237},[147,129651,1673],{"class":153},[147,129653,129629],{"class":2237},[147,129655,401],{"class":157},[147,129657,477],{"class":448},[147,129659,129636],{"class":157},[147,129661,129328],{"class":448},[147,129663,51710],{"class":157},[147,129665,129666],{"class":448},"#ff0000",[147,129668,129645],{"class":157},[147,129670,129671,129673,129675,129677,129679,129681,129683,129685,129687,129690],{"class":149,"line":1886},[147,129672,129546],{"class":2237},[147,129674,1673],{"class":153},[147,129676,129629],{"class":2237},[147,129678,401],{"class":157},[147,129680,471],{"class":448},[147,129682,129636],{"class":157},[147,129684,129328],{"class":448},[147,129686,51710],{"class":157},[147,129688,129689],{"class":448},"#00a4ff",[147,129691,129645],{"class":157},[147,129693,129694,129696,129698,129700,129702,129704,129706,129708,129710,129713],{"class":149,"line":1891},[147,129695,129546],{"class":2237},[147,129697,1673],{"class":153},[147,129699,129629],{"class":2237},[147,129701,401],{"class":157},[147,129703,692],{"class":448},[147,129705,129636],{"class":157},[147,129707,129328],{"class":448},[147,129709,51710],{"class":157},[147,129711,129712],{"class":448},"#ff00ff",[147,129714,129645],{"class":157},[147,129716,129717,129719,129721,129723,129725,129727,129729,129731,129733,129736],{"class":149,"line":1897},[147,129718,129546],{"class":2237},[147,129720,1673],{"class":153},[147,129722,129629],{"class":2237},[147,129724,401],{"class":157},[147,129726,718],{"class":448},[147,129728,129636],{"class":157},[147,129730,129328],{"class":448},[147,129732,51710],{"class":157},[147,129734,129735],{"class":448},"#00ff00",[147,129737,129645],{"class":157},[14,129739,129741],{"id":129740},"_83-css三大特性","8.3 css三大特性",[367,129743,129745],{"id":129744},"_831-层叠性","8.3.1 层叠性",[19,129747,129748],{},"为了解决样式冲突问题",[19,129750,129751],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,129753,129754],{},"   ②样式不冲突，不会层叠",[367,129756,129758],{"id":129757},"_832-继承性","8.3.2 继承性",[19,129760,129761],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,129763,129764],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[138,129766,129768],{"className":140,"code":129767,"language":142,"meta":143,"style":143},"p {\n  color: #333;\n}\n",[51,129769,129770,129776,129786],{"__ignoreMap":143},[147,129771,129772,129774],{"class":149,"line":150},[147,129773,19],{"class":153},[147,129775,15845],{"class":157},[147,129777,129778,129780,129782,129784],{"class":149,"line":312},[147,129779,71178],{"class":448},[147,129781,51710],{"class":157},[147,129783,62642],{"class":448},[147,129785,1565],{"class":157},[147,129787,129788],{"class":149,"line":1454},[147,129789,1839],{"class":157},[29,129791],{"style":31,"src":129792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,129794,129795],{},"解释：①行高可以跟单位也可以不跟单位",[19,129797,129798],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,129800,129801],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,129803,129804],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[367,129806,129808],{"id":129807},"_833-优先级","8.3.3 优先级",[350,129810,129811,129814],{},[353,129812,129813],{},"选择器相同，则执行层叠性",[353,129815,129816],{},"选择器不同，则根据选择器权重执行",[537,129818,129819,129829],{},[540,129820,129821],{},[543,129822,129823,129826],{},[546,129824,129825],{"align":24009},"选择器",[546,129827,129828],{"align":24009},"选择器权重",[583,129830,129831,129839,129847,129855,129863,129871],{},[543,129832,129833,129836],{},[588,129834,129835],{"align":24009},"继承 或者*",[588,129837,129838],{"align":24009},"0，0，0，0",[543,129840,129841,129844],{},[588,129842,129843],{"align":24009},"标签选择器",[588,129845,129846],{"align":24009},"0，0，0，1",[543,129848,129849,129852],{},[588,129850,129851],{"align":24009},"类选择器，伪类选择器",[588,129853,129854],{"align":24009},"0，0，1，0",[543,129856,129857,129860],{},[588,129858,129859],{"align":24009},"ID选择器",[588,129861,129862],{"align":24009},"0，1，0，0",[543,129864,129865,129868],{},[588,129866,129867],{"align":24009},"行内样式",[588,129869,129870],{"align":24009},"1，0，0，0",[543,129872,129873,129876],{},[588,129874,129875],{"align":24009},"！important",[588,129877,129878],{"align":24009},"无穷大",[19,129880,129881],{},"! important用法：",[138,129883,129885],{"className":140,"code":129884,"language":142,"meta":143,"style":143},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[51,129886,129887,129892,129898,129911,129915,129920,129926,129936],{"__ignoreMap":143},[147,129888,129889],{"class":149,"line":150},[147,129890,129891],{"class":458},"\u002F* !important 拥有最高优先级 *\u002F\n",[147,129893,129894,129896],{"class":149,"line":312},[147,129895,51884],{"class":153},[147,129897,15845],{"class":157},[147,129899,129900,129902,129904,129906,129909],{"class":149,"line":1454},[147,129901,71178],{"class":448},[147,129903,51710],{"class":157},[147,129905,51918],{"class":448},[147,129907,129908],{"class":397}," !important",[147,129910,1565],{"class":157},[147,129912,129913],{"class":149,"line":1469},[147,129914,1839],{"class":157},[147,129916,129917],{"class":149,"line":1475},[147,129918,129919],{"class":458},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[147,129921,129922,129924],{"class":149,"line":1489},[147,129923,51884],{"class":153},[147,129925,15845],{"class":157},[147,129927,129928,129930,129932,129934],{"class":149,"line":1495},[147,129929,71178],{"class":448},[147,129931,51710],{"class":157},[147,129933,57694],{"class":448},[147,129935,1565],{"class":157},[147,129937,129938],{"class":149,"line":1586},[147,129939,1839],{"class":157},[19,129941,129942],{},"优先级注意点：",[19,129944,129945],{},"①权重是有4组数字组成,但是不会有进位",[19,129947,129948],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,129950,129951],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,129953,129954],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,129956,129957],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,129959,129960],{},"⑥复合选择器",[537,129962,129963,129973],{},[540,129964,129965],{},[543,129966,129967,129970],{},[546,129968,129969],{"align":24009},"div ul li",[546,129971,129972],{"align":24009},"0,0,0,3",[583,129974,129975,129983,129991],{},[543,129976,129977,129980],{},[588,129978,129979],{"align":24009},".nav ul li",[588,129981,129982],{"align":24009},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[543,129984,129985,129988],{},[588,129986,129987],{"align":24009},"a:hover",[588,129989,129990],{"align":24009},"0,0,1,1",[543,129992,129993,129996],{},[588,129994,129995],{"align":24009},".nav a",[588,129997,129990],{"align":24009},[308,129999,130000],{},"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":143,"searchDepth":312,"depth":312,"links":130002},[130003,130011,130022],{"id":128111,"depth":312,"text":128112,"children":130004},[130005,130006,130007,130008,130009,130010],{"id":128124,"depth":1454,"text":128125},{"id":128196,"depth":1454,"text":128197},{"id":128268,"depth":1454,"text":128269},{"id":128299,"depth":1454,"text":128300},{"id":128306,"depth":1454,"text":128307},{"id":128459,"depth":1454,"text":128460},{"id":128767,"depth":312,"text":128768,"children":130012},[130013,130014,130015,130016,130017,130018,130019,130020,130021],{"id":128774,"depth":1454,"text":128775},{"id":128784,"depth":1454,"text":128785},{"id":128880,"depth":1454,"text":128881},{"id":128953,"depth":1454,"text":128954},{"id":129108,"depth":1454,"text":129109},{"id":129196,"depth":1454,"text":129197},{"id":129248,"depth":1454,"text":129249},{"id":129307,"depth":1454,"text":129308},{"id":129412,"depth":1454,"text":129413},{"id":129740,"depth":312,"text":129741,"children":130023},[130024,130025,130026],{"id":129744,"depth":1454,"text":129745},{"id":129757,"depth":1454,"text":129758},{"id":129807,"depth":1454,"text":129808},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":128103,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":130033,"title":130034,"body":130035,"description":321,"extension":322,"meta":131625,"navigation":324,"path":131626,"seo":131627,"stem":131628,"__hash__":131629},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":130036,"toc":131604},[130037,130040,130044,130047,130050,130053,130056,130059,130062,130065,130069,130077,130114,130150,130153,130167,130172,130206,130209,130302,130307,130310,130340,130343,130348,130356,130360,130367,130413,130457,130462,130465,130468,130471,130474,130477,130480,130482,130485,130489,130494,130538,130543,130546,130549,130586,130591,130594,130597,130600,130603,130635,130638,130641,130644,130676,130679,130682,130685,130689,130692,130724,130727,130731,130751,130754,130762,130765,130769,130774,130777,130809,130814,130817,130855,130859,130864,130867,130870,130901,130904,130921,130926,130978,131038,131043,131097,131135,131139,131143,131146,131150,131158,131161,131163,131174,131179,131227,131261,131264,131267,131270,131273,131317,131320,131323,131326,131329,131332,131335,131379,131382,131385,131388,131391,131394,131397,131403,131406,131450,131453,131456,131459,131462,131465,131509,131512,131514,131517,131521,131525,131563,131567,131570,131573,131577,131585,131589,131592,131595,131598,131601],[10,130038,130034],{"id":130039},"_9-css盒模型浮动与切图",[14,130041,130043],{"id":130042},"_91-盒子模型","9.1 盒子模型",[19,130045,130046],{},"利用盒子来设计网页",[19,130048,130049],{},"盒子包含：边框、外边距、内边距、实际内容",[19,130051,130052],{},"网页布局设置：",[19,130054,130055],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,130057,130058],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,130060,130061],{},"③往盒子里装内容",[29,130063],{"style":31,"src":130064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[367,130066,130068],{"id":130067},"_911-边框border","9.1.1 边框（border）",[350,130070,130071,130074],{},[353,130072,130073],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[353,130075,130076],{},"语法",[138,130078,130080],{"className":140,"code":130079,"language":142,"meta":143,"style":143},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[51,130081,130082,130087,130093,130110],{"__ignoreMap":143},[147,130083,130084],{"class":149,"line":150},[147,130085,130086],{"class":458},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[147,130088,130089,130091],{"class":149,"line":312},[147,130090,51884],{"class":153},[147,130092,15845],{"class":157},[147,130094,130095,130097,130099,130101,130103,130105,130108],{"class":149,"line":1454},[147,130096,71169],{"class":448},[147,130098,51710],{"class":157},[147,130100,616],{"class":448},[147,130102,51765],{"class":397},[147,130104,51794],{"class":448},[147,130106,130107],{"class":448}," #ccc",[147,130109,1565],{"class":157},[147,130111,130112],{"class":149,"line":1469},[147,130113,1839],{"class":157},[537,130115,130116,130124],{},[540,130117,130118],{},[543,130119,130120,130122],{},[546,130121,129317],{"align":24009},[546,130123,102967],{"align":24009},[583,130125,130126,130134,130142],{},[543,130127,130128,130131],{},[588,130129,130130],{"align":24009},"border-width",[588,130132,130133],{"align":24009},"定义边框粗细，单位是px",[543,130135,130136,130139],{},[588,130137,130138],{"align":24009},"border-style",[588,130140,130141],{"align":24009},"边框的样式",[543,130143,130144,130147],{},[588,130145,130146],{"align":24009},"border-color",[588,130148,130149],{"align":24009},"边框的颜色",[19,130151,130152],{},"边框样式 border-style 可以设置如下值：",[1406,130154,130155,130158,130161,130164],{},[353,130156,130157],{},"none：没有边框即忽略所有边框的宽度（默认值）",[353,130159,130160],{},"solid：边框为单实线(最为常用的)",[353,130162,130163],{},"dashed：边框为虚线",[353,130165,130166],{},"dotted：边框为点线",[350,130168,130169],{"start":1454},[353,130170,130171],{},"边框的合写分写",[138,130173,130174],{"className":140,"code":130079,"language":142,"meta":143,"style":143},[51,130175,130176,130180,130186,130202],{"__ignoreMap":143},[147,130177,130178],{"class":149,"line":150},[147,130179,130086],{"class":458},[147,130181,130182,130184],{"class":149,"line":312},[147,130183,51884],{"class":153},[147,130185,15845],{"class":157},[147,130187,130188,130190,130192,130194,130196,130198,130200],{"class":149,"line":1454},[147,130189,71169],{"class":448},[147,130191,51710],{"class":157},[147,130193,616],{"class":448},[147,130195,51765],{"class":397},[147,130197,51794],{"class":448},[147,130199,130107],{"class":448},[147,130201,1565],{"class":157},[147,130203,130204],{"class":149,"line":1469},[147,130205,1839],{"class":157},[19,130207,130208],{},"边框分开写法：",[138,130210,130212],{"className":140,"code":130211,"language":142,"meta":143,"style":143},"\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",[51,130213,130214,130219,130225,130243,130261,130280,130298],{"__ignoreMap":143},[147,130215,130216],{"class":149,"line":150},[147,130217,130218],{"class":458},"\u002F* 边框分开写法 *\u002F\n",[147,130220,130221,130223],{"class":149,"line":312},[147,130222,51884],{"class":153},[147,130224,15845],{"class":157},[147,130226,130227,130230,130232,130234,130236,130238,130241],{"class":149,"line":1454},[147,130228,130229],{"class":448},"  border-top",[147,130231,51710],{"class":157},[147,130233,616],{"class":448},[147,130235,51765],{"class":397},[147,130237,51794],{"class":448},[147,130239,130240],{"class":448}," #000",[147,130242,1565],{"class":157},[147,130244,130245,130248,130250,130252,130254,130256,130259],{"class":149,"line":1469},[147,130246,130247],{"class":448},"  border-right",[147,130249,51710],{"class":157},[147,130251,477],{"class":448},[147,130253,51765],{"class":397},[147,130255,62514],{"class":448},[147,130257,130258],{"class":448}," #333",[147,130260,1565],{"class":157},[147,130262,130263,130266,130268,130270,130272,130275,130278],{"class":149,"line":1475},[147,130264,130265],{"class":448},"  border-bottom",[147,130267,51710],{"class":157},[147,130269,471],{"class":448},[147,130271,51765],{"class":397},[147,130273,130274],{"class":448}," dotted",[147,130276,130277],{"class":448}," #666",[147,130279,1565],{"class":157},[147,130281,130282,130285,130287,130289,130291,130293,130296],{"class":149,"line":1489},[147,130283,130284],{"class":448},"  border-left",[147,130286,51710],{"class":157},[147,130288,616],{"class":448},[147,130290,51765],{"class":397},[147,130292,51794],{"class":448},[147,130294,130295],{"class":448}," #999",[147,130297,1565],{"class":157},[147,130299,130300],{"class":149,"line":1495},[147,130301,1839],{"class":157},[350,130303,130304],{"start":1469},[353,130305,130306],{},"表格的细线边框",[19,130308,130309],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[138,130311,130313],{"className":140,"code":130312,"language":142,"meta":143,"style":143},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[51,130314,130315,130320,130326,130336],{"__ignoreMap":143},[147,130316,130317],{"class":149,"line":150},[147,130318,130319],{"class":458},"\u002F* 表格细线边框合并 *\u002F\n",[147,130321,130322,130324],{"class":149,"line":312},[147,130323,537],{"class":153},[147,130325,15845],{"class":157},[147,130327,130328,130330,130332,130334],{"class":149,"line":1454},[147,130329,70851],{"class":448},[147,130331,51710],{"class":157},[147,130333,65308],{"class":448},[147,130335,1565],{"class":157},[147,130337,130338],{"class":149,"line":1469},[147,130339,1839],{"class":157},[19,130341,130342],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[350,130344,130345],{"start":1475},[353,130346,130347],{},"解决边框额外增加盒子的实际大小的方法：",[1406,130349,130350,130353],{},[353,130351,130352],{},"测量盒子大小的时候,不量边框",[353,130354,130355],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[367,130357,130359],{"id":130358},"_912-内边距","9.1.2 内边距",[350,130361,130362,130365],{},[353,130363,130364],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[353,130366,130076],{},[537,130368,130369,130379],{},[540,130370,130371],{},[543,130372,130373,130376],{},[546,130374,130375],{"align":24009},"值的个数",[546,130377,130378],{"align":24009},"表达意思",[583,130380,130381,130389,130397,130405],{},[543,130382,130383,130386],{},[588,130384,130385],{"align":24009},"padding: 5px;",[588,130387,130388],{"align":24009},"1个值，代表上下左右都有5个元素",[543,130390,130391,130394],{},[588,130392,130393],{"align":24009},"padding: 5px 10px;",[588,130395,130396],{"align":24009},"2个值，代表上下内边距为5像素，左右内边距为10像素",[543,130398,130399,130402],{},[588,130400,130401],{"align":24009},"padding: 5px 10px 20px;",[588,130403,130404],{"align":24009},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[543,130406,130407,130410],{},[588,130408,130409],{"align":24009},"padding: 5px 10px 20px 30px;",[588,130411,130412],{"align":24009},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[537,130414,130415,130423],{},[540,130416,130417],{},[543,130418,130419,130421],{},[546,130420,129317],{"align":24009},[546,130422,102967],{"align":24009},[583,130424,130425,130433,130441,130449],{},[543,130426,130427,130430],{},[588,130428,130429],{"align":24009},"padding-left",[588,130431,130432],{"align":24009},"左内边距",[543,130434,130435,130438],{},[588,130436,130437],{"align":24009},"padding-right",[588,130439,130440],{"align":24009},"右内边距",[543,130442,130443,130446],{},[588,130444,130445],{"align":24009},"padding-top",[588,130447,130448],{"align":24009},"上内边距",[543,130450,130451,130454],{},[588,130452,130453],{"align":24009},"padding-bottom",[588,130455,130456],{"align":24009},"下内边距",[350,130458,130459],{"start":1454},[353,130460,130461],{},"内边距会影响盒子的实际大小",[19,130463,130464],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,130466,130467],{},"①内容和边框有了距离，添加了内边距",[19,130469,130470],{},"②padding影响了盒子实际大小",[19,130472,130473],{},"内边距对盒子大小的影响：",[19,130475,130476],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,130478,130479],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,130481,95492],{},[19,130483,130484],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[367,130486,130488],{"id":130487},"_913-外边距","9.1.3 外边距",[350,130490,130491],{},[353,130492,130493],{},"控制盒子与盒子之间的距离",[537,130495,130496,130504],{},[540,130497,130498],{},[543,130499,130500,130502],{},[546,130501,129317],{"align":24009},[546,130503,102967],{"align":24009},[583,130505,130506,130514,130522,130530],{},[543,130507,130508,130511],{},[588,130509,130510],{"align":24009},"margin-left",[588,130512,130513],{"align":24009},"左外边距",[543,130515,130516,130519],{},[588,130517,130518],{"align":24009},"margin-right",[588,130520,130521],{"align":24009},"右外边距",[543,130523,130524,130527],{},[588,130525,130526],{"align":24009},"margin-top",[588,130528,130529],{"align":24009},"上外边距",[543,130531,130532,130535],{},[588,130533,130534],{"align":24009},"margin-bottom",[588,130536,130537],{"align":24009},"下外边距",[350,130539,130540],{"start":312},[353,130541,130542],{},"外边距可以让块级盒子水平居中的两个条件：",[19,130544,130545],{},"①盒子必须指定了宽度（width）",[19,130547,130548],{},"②盒子左右的外边距都设置为 auto",[138,130550,130552],{"className":140,"code":130551,"language":142,"meta":143,"style":143},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[51,130553,130554,130559,130566,130582],{"__ignoreMap":143},[147,130555,130556],{"class":149,"line":150},[147,130557,130558],{"class":458},"\u002F* margin 复合写法（同上） *\u002F\n",[147,130560,130561,130564],{"class":149,"line":312},[147,130562,130563],{"class":2237},".box",[147,130565,15845],{"class":157},[147,130567,130568,130570,130572,130574,130576,130579],{"class":149,"line":1454},[147,130569,70743],{"class":448},[147,130571,51710],{"class":157},[147,130573,590],{"class":448},[147,130575,51829],{"class":448},[147,130577,130578],{"class":157},";  ",[147,130580,130581],{"class":458},"\u002F* 块级盒子水平居中 *\u002F\n",[147,130583,130584],{"class":149,"line":1469},[147,130585,1839],{"class":157},[350,130587,130588],{"start":1454},[353,130589,130590],{},"外边距塌陷问题",[19,130592,130593],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[29,130595],{"style":31,"src":130596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,130598,130599],{},"解决方案：",[19,130601,130602],{},"①可以为父亲元素定义上边距",[138,130604,130605],{"className":140,"code":130551,"language":142,"meta":143,"style":143},[51,130606,130607,130611,130617,130631],{"__ignoreMap":143},[147,130608,130609],{"class":149,"line":150},[147,130610,130558],{"class":458},[147,130612,130613,130615],{"class":149,"line":312},[147,130614,130563],{"class":2237},[147,130616,15845],{"class":157},[147,130618,130619,130621,130623,130625,130627,130629],{"class":149,"line":1454},[147,130620,70743],{"class":448},[147,130622,51710],{"class":157},[147,130624,590],{"class":448},[147,130626,51829],{"class":448},[147,130628,130578],{"class":157},[147,130630,130581],{"class":458},[147,130632,130633],{"class":149,"line":1469},[147,130634,1839],{"class":157},[19,130636,130637],{},"②可以为父亲元素定义上内边距",[19,130639,130640],{},"③可以为父亲元素添加overflow:hidden",[29,130642],{"style":31,"src":130643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[138,130645,130646],{"className":140,"code":130551,"language":142,"meta":143,"style":143},[51,130647,130648,130652,130658,130672],{"__ignoreMap":143},[147,130649,130650],{"class":149,"line":150},[147,130651,130558],{"class":458},[147,130653,130654,130656],{"class":149,"line":312},[147,130655,130563],{"class":2237},[147,130657,15845],{"class":157},[147,130659,130660,130662,130664,130666,130668,130670],{"class":149,"line":1454},[147,130661,70743],{"class":448},[147,130663,51710],{"class":157},[147,130665,590],{"class":448},[147,130667,51829],{"class":448},[147,130669,130578],{"class":157},[147,130671,130581],{"class":458},[147,130673,130674],{"class":149,"line":1469},[147,130675,1839],{"class":157},[29,130677],{"style":31,"src":130678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,130680,130681],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,130683,130684],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[367,130686,130688],{"id":130687},"_914-清除内外边距","9.1.4 清除内外边距",[19,130690,130691],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[138,130693,130694],{"className":140,"code":130551,"language":142,"meta":143,"style":143},[51,130695,130696,130700,130706,130720],{"__ignoreMap":143},[147,130697,130698],{"class":149,"line":150},[147,130699,130558],{"class":458},[147,130701,130702,130704],{"class":149,"line":312},[147,130703,130563],{"class":2237},[147,130705,15845],{"class":157},[147,130707,130708,130710,130712,130714,130716,130718],{"class":149,"line":1454},[147,130709,70743],{"class":448},[147,130711,51710],{"class":157},[147,130713,590],{"class":448},[147,130715,51829],{"class":448},[147,130717,130578],{"class":157},[147,130719,130581],{"class":458},[147,130721,130722],{"class":149,"line":1469},[147,130723,1839],{"class":157},[19,130725,130726],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[367,130728,130730],{"id":130729},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1406,130732,130733,130736,130739,130742,130745,130748],{},[353,130734,130735],{},"文件→打开 ：可以打开我们要测量的图片",[353,130737,130738],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[353,130740,130741],{},"右击标尺，把里面的单位改为像素",[353,130743,130744],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[353,130746,130747],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[353,130749,130750],{},"用选区拖动 可以测量大小",[29,130752],{"style":31,"src":130753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1406,130755,130756,130759],{},[353,130757,130758],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[353,130760,130761],{},"吸管取色工具",[29,130763],{"style":31,"src":130764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[367,130766,130768],{"id":130767},"_916-案例","9.1.6 案例",[350,130770,130771],{},[353,130772,130773],{},"小米商品",[29,130775],{"style":31,"src":130776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[138,130778,130779],{"className":140,"code":130551,"language":142,"meta":143,"style":143},[51,130780,130781,130785,130791,130805],{"__ignoreMap":143},[147,130782,130783],{"class":149,"line":150},[147,130784,130558],{"class":458},[147,130786,130787,130789],{"class":149,"line":312},[147,130788,130563],{"class":2237},[147,130790,15845],{"class":157},[147,130792,130793,130795,130797,130799,130801,130803],{"class":149,"line":1454},[147,130794,70743],{"class":448},[147,130796,51710],{"class":157},[147,130798,590],{"class":448},[147,130800,51829],{"class":448},[147,130802,130578],{"class":157},[147,130804,130581],{"class":458},[147,130806,130807],{"class":149,"line":1469},[147,130808,1839],{"class":157},[350,130810,130811],{"start":312},[353,130812,130813],{},"快报模块",[29,130815],{"style":31,"src":130816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[138,130818,130820],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[51,130821,130822,130827,130842,130847],{"__ignoreMap":143},[147,130823,130824],{"class":149,"line":150},[147,130825,130826],{"class":458},"\u003C!-- HTML 代码示例 -->\n",[147,130828,130829,130831,130833,130835,130837,130840],{"class":149,"line":312},[147,130830,1309],{"class":157},[147,130832,51884],{"class":153},[147,130834,53759],{"class":2237},[147,130836,445],{"class":157},[147,130838,130839],{"class":504},"\"example\"",[147,130841,51580],{"class":157},[147,130843,130844],{"class":149,"line":1454},[147,130845,130846],{"class":157},"  示例内容\n",[147,130848,130849,130851,130853],{"class":149,"line":1469},[147,130850,52058],{"class":157},[147,130852,51884],{"class":153},[147,130854,51580],{"class":157},[367,130856,130858],{"id":130857},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[350,130860,130861],{},[353,130862,130863],{},"圆角边框",[19,130865,130866],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[29,130868],{"style":31,"src":130869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[138,130871,130873],{"className":140,"code":130872,"language":142,"meta":143,"style":143},"div {\n  border: 1px solid #ccc;\n}\n",[51,130874,130875,130881,130897],{"__ignoreMap":143},[147,130876,130877,130879],{"class":149,"line":150},[147,130878,51884],{"class":153},[147,130880,15845],{"class":157},[147,130882,130883,130885,130887,130889,130891,130893,130895],{"class":149,"line":312},[147,130884,71169],{"class":448},[147,130886,51710],{"class":157},[147,130888,616],{"class":448},[147,130890,51765],{"class":397},[147,130892,51794],{"class":448},[147,130894,130107],{"class":448},[147,130896,1565],{"class":157},[147,130898,130899],{"class":149,"line":1454},[147,130900,1839],{"class":157},[19,130902,130903],{},"解释:",[1406,130905,130906,130909,130912,130915,130918],{},[353,130907,130908],{},"参数值可以为数值或百分比的形式",[353,130910,130911],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[353,130913,130914],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[353,130916,130917],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[353,130919,130920],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[350,130922,130923],{"start":312},[353,130924,130925],{},"盒子阴影",[138,130927,130929],{"className":140,"code":130928,"language":142,"meta":143,"style":143},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[51,130930,130931,130937,130974],{"__ignoreMap":143},[147,130932,130933,130935],{"class":149,"line":150},[147,130934,51884],{"class":153},[147,130936,15845],{"class":157},[147,130938,130939,130942,130944,130946,130948,130950,130952,130954,130956,130958,130960,130962,130964,130966,130968,130970,130972],{"class":149,"line":312},[147,130940,130941],{"class":448},"  box-shadow",[147,130943,51710],{"class":157},[147,130945,590],{"class":448},[147,130947,15028],{"class":448},[147,130949,51765],{"class":397},[147,130951,2312],{"class":448},[147,130953,51765],{"class":397},[147,130955,79039],{"class":448},[147,130957,401],{"class":157},[147,130959,590],{"class":448},[147,130961,12709],{"class":157},[147,130963,590],{"class":448},[147,130965,12709],{"class":157},[147,130967,590],{"class":448},[147,130969,12709],{"class":157},[147,130971,86482],{"class":448},[147,130973,2993],{"class":157},[147,130975,130976],{"class":149,"line":1454},[147,130977,1839],{"class":157},[537,130979,130980,130988],{},[540,130981,130982],{},[543,130983,130984,130986],{},[546,130985,551],{"align":24009},[546,130987,27763],{"align":24009},[583,130989,130990,130998,131006,131014,131022,131030],{},[543,130991,130992,130995],{},[588,130993,130994],{"align":24009},"h-shadow",[588,130996,130997],{"align":24009},"必需,水平阴影的位置,允许负值",[543,130999,131000,131003],{},[588,131001,131002],{"align":24009},"v-shadow",[588,131004,131005],{"align":24009},"必需,垂直阴影的位置,允许负值",[543,131007,131008,131011],{},[588,131009,131010],{"align":24009},"blur",[588,131012,131013],{"align":24009},"可选,模糊距离,就是影子的虚实",[543,131015,131016,131019],{},[588,131017,131018],{"align":24009},"spread",[588,131020,131021],{"align":24009},"可选,阴影尺寸",[543,131023,131024,131027],{},[588,131025,131026],{"align":24009},"color",[588,131028,131029],{"align":24009},"可选,阴影的颜色",[543,131031,131032,131035],{},[588,131033,131034],{"align":24009},"inset",[588,131036,131037],{"align":24009},"可选,将外部阴影(outset)改为内部阴影",[350,131039,131040],{"start":1454},[353,131041,131042],{},"文字阴影",[138,131044,131046],{"className":140,"code":131045,"language":142,"meta":143,"style":143},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[51,131047,131048,131054,131093],{"__ignoreMap":143},[147,131049,131050,131052],{"class":149,"line":150},[147,131051,19],{"class":153},[147,131053,15845],{"class":157},[147,131055,131056,131059,131061,131063,131065,131067,131069,131071,131073,131075,131077,131079,131081,131083,131085,131087,131089,131091],{"class":149,"line":312},[147,131057,131058],{"class":448},"  text-shadow",[147,131060,51710],{"class":157},[147,131062,616],{"class":448},[147,131064,51765],{"class":397},[147,131066,25392],{"class":448},[147,131068,51765],{"class":397},[147,131070,15028],{"class":448},[147,131072,51765],{"class":397},[147,131074,79039],{"class":448},[147,131076,401],{"class":157},[147,131078,590],{"class":448},[147,131080,12709],{"class":157},[147,131082,590],{"class":448},[147,131084,12709],{"class":157},[147,131086,590],{"class":448},[147,131088,12709],{"class":157},[147,131090,100793],{"class":448},[147,131092,2993],{"class":157},[147,131094,131095],{"class":149,"line":1454},[147,131096,1839],{"class":157},[537,131098,131099,131107],{},[540,131100,131101],{},[543,131102,131103,131105],{},[546,131104,551],{"align":24009},[546,131106,27763],{"align":24009},[583,131108,131109,131115,131122,131129],{},[543,131110,131111,131113],{},[588,131112,130994],{"align":24009},[588,131114,130997],{"align":24009},[543,131116,131117,131119],{},[588,131118,131002],{"align":24009},[588,131120,131121],{"align":24009},"必需,垂直阴影位置,允许负值",[543,131123,131124,131126],{},[588,131125,131010],{"align":24009},[588,131127,131128],{"align":24009},"可选,模糊的距离",[543,131130,131131,131133],{},[588,131132,131026],{"align":24009},[588,131134,131029],{"align":24009},[14,131136,131138],{"id":131137},"_92-浮动","9.2 浮动",[367,131140,131142],{"id":131141},"_921-浮动介绍","9.2.1 浮动介绍",[19,131144,131145],{},"在16.2中详细介绍",[367,131147,131149],{"id":131148},"_922-清除浮动","9.2.2 清除浮动",[350,131151,131152,131155],{},[353,131153,131154],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[353,131156,131157],{},"清除浮动的本质",[19,131159,131160],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,131162,9299],{},[1406,131164,131165,131168,131171],{},[353,131166,131167],{},"如果父盒子本身有高度，则不需要清除浮动",[353,131169,131170],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[353,131172,131173],{},"父级有了高度，就不会影响下面的标准流了",[350,131175,131176],{"start":1454},[353,131177,131178],{},"清除浮动样式",[138,131180,131182],{"className":140,"code":131181,"language":142,"meta":143,"style":143},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[51,131183,131184,131191,131202,131206,131213,131223],{"__ignoreMap":143},[147,131185,131186,131189],{"class":149,"line":150},[147,131187,131188],{"class":2237},".left",[147,131190,15845],{"class":157},[147,131192,131193,131196,131198,131200],{"class":149,"line":312},[147,131194,131195],{"class":448},"  float",[147,131197,51710],{"class":157},[147,131199,24009],{"class":448},[147,131201,1565],{"class":157},[147,131203,131204],{"class":149,"line":1454},[147,131205,1839],{"class":157},[147,131207,131208,131211],{"class":149,"line":1469},[147,131209,131210],{"class":2237},".right",[147,131212,15845],{"class":157},[147,131214,131215,131217,131219,131221],{"class":149,"line":1475},[147,131216,131195],{"class":448},[147,131218,51710],{"class":157},[147,131220,72795],{"class":448},[147,131222,1565],{"class":157},[147,131224,131225],{"class":149,"line":1489},[147,131226,1839],{"class":157},[537,131228,131229,131237],{},[540,131230,131231],{},[543,131232,131233,131235],{},[546,131234,127179],{"align":24009},[546,131236,27763],{"align":24009},[583,131238,131239,131246,131253],{},[543,131240,131241,131243],{},[588,131242,24009],{"align":24009},[588,131244,131245],{"align":24009},"不允许左侧有浮动元素（清除左侧浮动的影响）",[543,131247,131248,131250],{},[588,131249,72795],{"align":24009},[588,131251,131252],{"align":24009},"不允许右侧有浮动元素（清除右侧浮动的影响）",[543,131254,131255,131258],{},[588,131256,131257],{"align":24009},"both",[588,131259,131260],{"align":24009},"同时清除左右侧浮动的影响",[19,131262,131263],{},"法一",[19,131265,131266],{},"额外标签法也称为隔墙法",[19,131268,131269],{},"使用方式：",[19,131271,131272],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[138,131274,131275],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,131276,131277,131283,131293,131297,131303,131313],{"__ignoreMap":143},[147,131278,131279,131281],{"class":149,"line":150},[147,131280,131188],{"class":2237},[147,131282,15845],{"class":157},[147,131284,131285,131287,131289,131291],{"class":149,"line":312},[147,131286,131195],{"class":448},[147,131288,51710],{"class":157},[147,131290,24009],{"class":448},[147,131292,1565],{"class":157},[147,131294,131295],{"class":149,"line":1454},[147,131296,1839],{"class":157},[147,131298,131299,131301],{"class":149,"line":1469},[147,131300,131210],{"class":2237},[147,131302,15845],{"class":157},[147,131304,131305,131307,131309,131311],{"class":149,"line":1475},[147,131306,131195],{"class":448},[147,131308,51710],{"class":157},[147,131310,72795],{"class":448},[147,131312,1565],{"class":157},[147,131314,131315],{"class":149,"line":1489},[147,131316,1839],{"class":157},[19,131318,131319],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,131321,131322],{},"优点： 通俗易懂，书写方便",[19,131324,131325],{},"缺点： 添加许多无意义的标签，结构化较差",[19,131327,131328],{},"注意： 要求这个新的空标签必须是块级元素。",[19,131330,131331],{},"法二",[19,131333,131334],{},"父级添加overflow属性",[138,131336,131337],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,131338,131339,131345,131355,131359,131365,131375],{"__ignoreMap":143},[147,131340,131341,131343],{"class":149,"line":150},[147,131342,131188],{"class":2237},[147,131344,15845],{"class":157},[147,131346,131347,131349,131351,131353],{"class":149,"line":312},[147,131348,131195],{"class":448},[147,131350,51710],{"class":157},[147,131352,24009],{"class":448},[147,131354,1565],{"class":157},[147,131356,131357],{"class":149,"line":1454},[147,131358,1839],{"class":157},[147,131360,131361,131363],{"class":149,"line":1469},[147,131362,131210],{"class":2237},[147,131364,15845],{"class":157},[147,131366,131367,131369,131371,131373],{"class":149,"line":1475},[147,131368,131195],{"class":448},[147,131370,51710],{"class":157},[147,131372,72795],{"class":448},[147,131374,1565],{"class":157},[147,131376,131377],{"class":149,"line":1489},[147,131378,1839],{"class":157},[19,131380,131381],{},"overflow: hidden;",[19,131383,131384],{},"优点：代码简洁",[19,131386,131387],{},"缺点：无法显示溢出的部分",[19,131389,131390],{},"注意：是给父元素添加代码",[19,131392,131393],{},"法三",[19,131395,131396],{},"父级添加after伪元素",[19,131398,131399,131402],{},[131400,131401],"after",{}," 方式是额外标签法的升级版",[19,131404,131405],{},"使用的时候复制就可以",[138,131407,131408],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,131409,131410,131416,131426,131430,131436,131446],{"__ignoreMap":143},[147,131411,131412,131414],{"class":149,"line":150},[147,131413,131188],{"class":2237},[147,131415,15845],{"class":157},[147,131417,131418,131420,131422,131424],{"class":149,"line":312},[147,131419,131195],{"class":448},[147,131421,51710],{"class":157},[147,131423,24009],{"class":448},[147,131425,1565],{"class":157},[147,131427,131428],{"class":149,"line":1454},[147,131429,1839],{"class":157},[147,131431,131432,131434],{"class":149,"line":1469},[147,131433,131210],{"class":2237},[147,131435,15845],{"class":157},[147,131437,131438,131440,131442,131444],{"class":149,"line":1475},[147,131439,131195],{"class":448},[147,131441,51710],{"class":157},[147,131443,72795],{"class":448},[147,131445,1565],{"class":157},[147,131447,131448],{"class":149,"line":1489},[147,131449,1839],{"class":157},[19,131451,131452],{},"优点：没有增加标签，结构更简单",[19,131454,131455],{},"缺点：照顾低版本浏览器",[19,131457,131458],{},"代表网站： 百度、淘宝网、网易等",[19,131460,131461],{},"法四",[19,131463,131464],{},"父级添加双伪元素",[138,131466,131467],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,131468,131469,131475,131485,131489,131495,131505],{"__ignoreMap":143},[147,131470,131471,131473],{"class":149,"line":150},[147,131472,131188],{"class":2237},[147,131474,15845],{"class":157},[147,131476,131477,131479,131481,131483],{"class":149,"line":312},[147,131478,131195],{"class":448},[147,131480,51710],{"class":157},[147,131482,24009],{"class":448},[147,131484,1565],{"class":157},[147,131486,131487],{"class":149,"line":1454},[147,131488,1839],{"class":157},[147,131490,131491,131493],{"class":149,"line":1469},[147,131492,131210],{"class":2237},[147,131494,15845],{"class":157},[147,131496,131497,131499,131501,131503],{"class":149,"line":1475},[147,131498,131195],{"class":448},[147,131500,51710],{"class":157},[147,131502,72795],{"class":448},[147,131504,1565],{"class":157},[147,131506,131507],{"class":149,"line":1489},[147,131508,1839],{"class":157},[19,131510,131511],{},"优点：代码更简洁",[19,131513,131455],{},[19,131515,131516],{},"代表网站：小米、腾讯等",[14,131518,131520],{"id":131519},"_93-ps切图","9.3 PS切图",[367,131522,131524],{"id":131523},"_931-常见图片格式","9.3.1 常见图片格式",[537,131526,131527,131537],{},[540,131528,131529],{},[543,131530,131531,131534],{},[546,131532,131533],{"align":24009},"jpg图像格式",[546,131535,131536],{"align":24009},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[583,131538,131539,131547,131555],{},[543,131540,131541,131544],{},[588,131542,131543],{"align":24009},"gif图像格式",[588,131545,131546],{"align":24009},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[543,131548,131549,131552],{},[588,131550,131551],{"align":24009},"png图像格式",[588,131553,131554],{"align":24009},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[543,131556,131557,131560],{},[588,131558,131559],{"align":24009},"PSD图像格式",[588,131561,131562],{"align":24009},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[367,131564,131566],{"id":131565},"_932-图层切图","9.3.2 图层切图",[19,131568,131569],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,131571,131572],{},"按住shift选中两个图层->图层菜单->合并图层",[367,131574,131576],{"id":131575},"_933-切片切图","9.3.3 切片切图",[1406,131578,131579,131582],{},[353,131580,131581],{},"利用切片工具手动划出",[353,131583,131584],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[367,131586,131588],{"id":131587},"_934-切图步骤","9.3.4 切图步骤",[19,131590,131591],{},"用切片工具选中：",[29,131593],{"style":31,"src":131594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,131596,131597],{},"文件 -> 导出",[29,131599],{"style":31,"src":131600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[308,131602,131603],{},"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":143,"searchDepth":312,"depth":312,"links":131605},[131606,131615,131619],{"id":130042,"depth":312,"text":130043,"children":131607},[131608,131609,131610,131611,131612,131613,131614],{"id":130067,"depth":1454,"text":130068},{"id":130358,"depth":1454,"text":130359},{"id":130487,"depth":1454,"text":130488},{"id":130687,"depth":1454,"text":130688},{"id":130729,"depth":1454,"text":130730},{"id":130767,"depth":1454,"text":130768},{"id":130857,"depth":1454,"text":130858},{"id":131137,"depth":312,"text":131138,"children":131616},[131617,131618],{"id":131141,"depth":1454,"text":131142},{"id":131148,"depth":1454,"text":131149},{"id":131519,"depth":312,"text":131520,"children":131620},[131621,131622,131623,131624],{"id":131523,"depth":1454,"text":131524},{"id":131565,"depth":1454,"text":131566},{"id":131575,"depth":1454,"text":131576},{"id":131587,"depth":1454,"text":131588},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":130034,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131631,"title":131632,"body":131633,"description":321,"extension":322,"meta":132274,"navigation":324,"path":132275,"seo":132276,"stem":132277,"__hash__":132278},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131634,"toc":132262},[131635,131638,131642,131668,131702,131706,131710,131713,131755,131762,131772,131780,131782,131785,131788,131791,131798,131812,131816,131819,131848,131852,131855,131869,131873,131876,131904,131908,131911,131937,131941,131946,131979,131984,132012,132016,132033,132079,132084,132128,132145,132252,132260],[10,131636,131632],{"id":131637},"_10-css规范与学成在线案例",[14,131639,131641],{"id":131640},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[350,131643,131644,131650,131656,131662],{},[353,131645,131646,131649],{},[234,131647,131648],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[353,131651,131652,131655],{},[234,131653,131654],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[353,131657,131658,131661],{},[234,131659,131660],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[353,131663,131664,131667],{},[234,131665,131666],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[138,131669,131670],{"className":140,"code":130079,"language":142,"meta":143,"style":143},[51,131671,131672,131676,131682,131698],{"__ignoreMap":143},[147,131673,131674],{"class":149,"line":150},[147,131675,130086],{"class":458},[147,131677,131678,131680],{"class":149,"line":312},[147,131679,51884],{"class":153},[147,131681,15845],{"class":157},[147,131683,131684,131686,131688,131690,131692,131694,131696],{"class":149,"line":1454},[147,131685,71169],{"class":448},[147,131687,51710],{"class":157},[147,131689,616],{"class":448},[147,131691,51765],{"class":397},[147,131693,51794],{"class":448},[147,131695,130107],{"class":448},[147,131697,1565],{"class":157},[147,131699,131700],{"class":149,"line":1469},[147,131701,1839],{"class":157},[14,131703,131705],{"id":131704},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[367,131707,131709],{"id":131708},"_1021-header头部制作","10.2.1 header头部制作",[29,131711],{"style":31,"src":131712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1406,131714,131715,131722,131729,131735,131742,131749],{},[353,131716,131717,131718,131721],{},"1号是版心盒子 ",[234,131719,131720],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[353,131723,131724,131725,131728],{},"版心盒子 里面包含 2号盒子 ",[234,131726,131727],{},"logo"," 图标",[353,131730,131731,131732,131734],{},"版心盒子 里面包含 3号盒子 ",[234,131733,53986],{}," 导航栏",[353,131736,131737,131738,131741],{},"版心盒子 里面包含 4号盒子 ",[234,131739,131740],{},"search"," 搜索框",[353,131743,131744,131745,131748],{},"版心盒子 里面包含 5号盒子 ",[234,131746,131747],{},"user"," 个人信息",[353,131750,131751,131752],{},"注意，要求里面的 ",[234,131753,131754],{},"4个子盒子 必须都浮动",[350,131756,131757],{},[353,131758,131759],{},[234,131760,131761],{},"导航栏注意点:",[19,131763,131764,131765,131768,131769],{},"实际开发中， ",[234,131766,131767],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[234,131770,131771],{},"用 li 包含链接(li+a)的做法",[1406,131773,131774,131777],{},[353,131775,131776],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[353,131778,131779],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,131781,9299],{},[19,131783,131784],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,131786,131787],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,131789,131790],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[350,131792,131793],{"start":312},[353,131794,131795],{},[234,131796,131797],{},"4号盒子search的细节：",[1406,131799,131800,131803,131806],{},[353,131801,131802],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[353,131804,131805],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[353,131807,131808,131811],{},[51,131809,131810],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[367,131813,131815],{"id":131814},"_1022-banner制作","10.2.2 banner制作",[29,131817],{"style":31,"src":131818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1406,131820,131821,131828,131834,131841],{},[353,131822,131823,131824,131827],{},"1号盒子是通栏的大盒子 ",[234,131825,131826],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[353,131829,131830,131831,131833],{},"2号盒子是版心 ",[234,131832,1194],{}," ， 要水平居中对齐",[353,131835,131836,131837,131840],{},"3号盒子版心内，左对齐 ",[234,131838,131839],{},"subnav"," 侧导航栏",[353,131842,131843,131844,131847],{},"4号盒子版心内，右对齐 ",[234,131845,131846],{},"course"," 课程",[367,131849,131851],{"id":131850},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[29,131853],{"style":31,"src":131854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1406,131856,131857,131860,131863,131866],{},[353,131858,131859],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[353,131861,131862],{},"1号盒子是标题 H3 左侧浮动",[353,131864,131865],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[353,131867,131868],{},"3号盒子 右浮动 mod 修改",[367,131870,131872],{"id":131871},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[29,131874],{"style":31,"src":131875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1406,131877,131878,131884,131891,131898,131901],{},[353,131879,131880,131881,131883],{},"1号盒子为最大的盒子 ",[234,131882,53987],{}," 版心水平居中对齐",[353,131885,131886,131887,131890],{},"2号盒子为上面部分 ",[234,131888,131889],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[353,131892,131893,131894,131897],{},"3号盒子为底下部分 ",[234,131895,131896],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[353,131899,131900],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[353,131902,131903],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[367,131905,131907],{"id":131906},"_1025-底部模块制作","10.2.5 底部模块制作",[29,131909],{"style":31,"src":131910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1406,131912,131913,131920,131923,131930],{},[353,131914,131915,131916,131919],{},"1号盒子通栏大盒子 底部 ",[234,131917,131918],{},"footer"," 给高度 底色是白色",[353,131921,131922],{},"2号盒子版心水平居中",[353,131924,131925,131926,131929],{},"3号盒子版权 ",[234,131927,131928],{},"copyright"," 左对齐",[353,131931,131932,131933,131936],{},"4号盒子 链接组 ",[234,131934,131935],{},"links"," 右对齐",[367,131938,131940],{"id":131939},"_1026-代码模块","10.2.6 代码模块",[350,131942,131943],{},[353,131944,131945],{},"html部分",[138,131947,131949],{"className":127462,"code":131948,"language":127464,"meta":143,"style":143},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[51,131950,131951],{"__ignoreMap":143},[147,131952,131953,131955,131957,131959,131961,131964,131967,131969,131972,131975,131977],{"class":149,"line":150},[147,131954,1309],{"class":157},[147,131956,637],{"class":153},[147,131958,61330],{"class":2237},[147,131960,445],{"class":157},[147,131962,131963],{"class":504},"\"https:\u002F\u002Fexample.com\"",[147,131965,131966],{"class":2237}," target",[147,131968,445],{"class":157},[147,131970,131971],{"class":504},"\"_blank\"",[147,131973,131974],{"class":157},">链接文字\u003C\u002F",[147,131976,637],{"class":153},[147,131978,51580],{"class":157},[350,131980,131981],{"start":312},[353,131982,131983],{},"css部分",[138,131985,131986],{"className":127462,"code":131948,"language":127464,"meta":143,"style":143},[51,131987,131988],{"__ignoreMap":143},[147,131989,131990,131992,131994,131996,131998,132000,132002,132004,132006,132008,132010],{"class":149,"line":150},[147,131991,1309],{"class":157},[147,131993,637],{"class":153},[147,131995,61330],{"class":2237},[147,131997,445],{"class":157},[147,131999,131963],{"class":504},[147,132001,131966],{"class":2237},[147,132003,445],{"class":157},[147,132005,131971],{"class":504},[147,132007,131974],{"class":157},[147,132009,637],{"class":153},[147,132011,51580],{"class":157},[367,132013,132015],{"id":132014},"_1027-收获","10.2.7 收获",[350,132017,132018,132021,132024,132027,132030],{},[353,132019,132020],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[353,132022,132023],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[353,132025,132026],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[353,132028,132029],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[353,132031,132032],{},"遗忘代码",[138,132034,132036],{"className":140,"code":132035,"language":142,"meta":143,"style":143},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[51,132037,132038,132060,132065,132075],{"__ignoreMap":143},[147,132039,132040,132042,132044,132046,132048,132050,132052,132054,132056,132058],{"class":149,"line":150},[147,132041,51884],{"class":153},[147,132043,12709],{"class":157},[147,132045,19],{"class":153},[147,132047,12709],{"class":157},[147,132049,10],{"class":153},[147,132051,12709],{"class":157},[147,132053,1406],{"class":153},[147,132055,12709],{"class":157},[147,132057,353],{"class":153},[147,132059,15845],{"class":157},[147,132061,132062],{"class":149,"line":312},[147,132063,132064],{"class":458},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[147,132066,132067,132069,132071,132073],{"class":149,"line":1454},[147,132068,128331],{"class":448},[147,132070,51710],{"class":157},[147,132072,61142],{"class":448},[147,132074,1565],{"class":157},[147,132076,132077],{"class":149,"line":1469},[147,132078,1839],{"class":157},[350,132080,132081],{"start":1489},[353,132082,132083],{},"html引css的程序",[138,132085,132086],{"className":140,"code":132035,"language":142,"meta":143,"style":143},[51,132087,132088,132110,132114,132124],{"__ignoreMap":143},[147,132089,132090,132092,132094,132096,132098,132100,132102,132104,132106,132108],{"class":149,"line":150},[147,132091,51884],{"class":153},[147,132093,12709],{"class":157},[147,132095,19],{"class":153},[147,132097,12709],{"class":157},[147,132099,10],{"class":153},[147,132101,12709],{"class":157},[147,132103,1406],{"class":153},[147,132105,12709],{"class":157},[147,132107,353],{"class":153},[147,132109,15845],{"class":157},[147,132111,132112],{"class":149,"line":312},[147,132113,132064],{"class":458},[147,132115,132116,132118,132120,132122],{"class":149,"line":1454},[147,132117,128331],{"class":448},[147,132119,51710],{"class":157},[147,132121,61142],{"class":448},[147,132123,1565],{"class":157},[147,132125,132126],{"class":149,"line":1469},[147,132127,1839],{"class":157},[350,132129,132130,132133,132136,132139,132142],{"start":1495},[353,132131,132132],{},"浮动的盒子不会有外边距合并问题",[353,132134,132135],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[353,132137,132138],{},"ctrl+g快速定位行；shift+alt多个光标",[353,132140,132141],{},"学习上方各个模块的选择器起名方法，以后就这样用",[353,132143,132144],{},"在写选择器时尽量写全一些，例如",[138,132146,132148],{"className":140,"code":132147,"language":142,"meta":143,"style":143},"\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",[51,132149,132150,132155,132171,132176,132191,132196,132211,132216,132231,132236],{"__ignoreMap":143},[147,132151,132152],{"class":149,"line":150},[147,132153,132154],{"class":458},"\u002F* 静态定位（默认） *\u002F\n",[147,132156,132157,132160,132162,132164,132166,132169],{"class":149,"line":312},[147,132158,132159],{"class":2237},".static",[147,132161,80079],{"class":157},[147,132163,129075],{"class":448},[147,132165,51710],{"class":157},[147,132167,132168],{"class":448},"static",[147,132170,129645],{"class":157},[147,132172,132173],{"class":149,"line":1454},[147,132174,132175],{"class":458},"\u002F* 相对定位 *\u002F\n",[147,132177,132178,132181,132183,132185,132187,132189],{"class":149,"line":1469},[147,132179,132180],{"class":2237},".relative",[147,132182,80079],{"class":157},[147,132184,129075],{"class":448},[147,132186,51710],{"class":157},[147,132188,55037],{"class":448},[147,132190,129645],{"class":157},[147,132192,132193],{"class":149,"line":1475},[147,132194,132195],{"class":458},"\u002F* 绝对定位 *\u002F\n",[147,132197,132198,132201,132203,132205,132207,132209],{"class":149,"line":1489},[147,132199,132200],{"class":2237},".absolute",[147,132202,80079],{"class":157},[147,132204,129075],{"class":448},[147,132206,51710],{"class":157},[147,132208,55104],{"class":448},[147,132210,129645],{"class":157},[147,132212,132213],{"class":149,"line":1495},[147,132214,132215],{"class":458},"\u002F* 固定定位 *\u002F\n",[147,132217,132218,132221,132223,132225,132227,132229],{"class":149,"line":1586},[147,132219,132220],{"class":2237},".fixed",[147,132222,80079],{"class":157},[147,132224,129075],{"class":448},[147,132226,51710],{"class":157},[147,132228,86505],{"class":448},[147,132230,129645],{"class":157},[147,132232,132233],{"class":149,"line":1592},[147,132234,132235],{"class":458},"\u002F* 粘性定位 *\u002F\n",[147,132237,132238,132241,132243,132245,132247,132250],{"class":149,"line":1604},[147,132239,132240],{"class":2237},".sticky",[147,132242,80079],{"class":157},[147,132244,129075],{"class":448},[147,132246,51710],{"class":157},[147,132248,132249],{"class":448},"sticky",[147,132251,129645],{"class":157},[350,132253,132254,132257],{"start":1891},[353,132255,132256],{},"一定要用好注释",[353,132258,132259],{},"浮动的盒子不会有外边距合并的问题",[308,132261,131603],{},{"title":143,"searchDepth":312,"depth":312,"links":132263},[132264,132265],{"id":131640,"depth":312,"text":131641},{"id":131704,"depth":312,"text":131705,"children":132266},[132267,132268,132269,132270,132271,132272,132273],{"id":131708,"depth":1454,"text":131709},{"id":131814,"depth":1454,"text":131815},{"id":131850,"depth":1454,"text":131851},{"id":131871,"depth":1454,"text":131872},{"id":131906,"depth":1454,"text":131907},{"id":131939,"depth":1454,"text":131940},{"id":132014,"depth":1454,"text":132015},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131632,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132280,"title":132281,"body":132282,"description":321,"extension":322,"meta":133768,"navigation":324,"path":133769,"seo":133770,"stem":133771,"__hash__":133772},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132283,"toc":133760},[132284,132287,132291,132295,132306,132310,132327,132371,132404,132407,132424,132427,132430,132474,132478,132482,132485,132488,132492,132495,132506,132569,132610,132613,132628,132682,132690,132693,132704,132758,132784,132787,132800,132854,132886,132940,132963,133017,133020,133023,133030,133084,133105,133159,133162,133165,133250,133258,133315,133338,133342,133345,133363,133367,133386,133440,133478,133482,133485,133488,133510,133514,133522,133525,133530,133541,133544,133548,133562,133606,133609,133613,133616,133621,133647,133652,133729,133732,133736,133739,133742,133745,133748,133751,133754,133757],[10,132285,132281],{"id":132286},"_11-传统布局与定位体系",[14,132288,132290],{"id":132289},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[367,132292,132294],{"id":132293},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1406,132296,132297,132300,132303],{},[353,132298,132299],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[353,132301,132302],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[353,132304,132305],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[367,132307,132309],{"id":132308},"_1112-浮动","11.1.2 浮动",[1406,132311,132312,132315,132318,132321,132324],{},[353,132313,132314],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[353,132316,132317],{},"浮动可以改变元素标签默认的排列方式",[353,132319,132320],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[353,132322,132323],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[353,132325,132326],{},"在使用行内块转换时盒子之间是有空隙的",[138,132328,132329],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,132330,132331,132337,132347,132351,132357,132367],{"__ignoreMap":143},[147,132332,132333,132335],{"class":149,"line":150},[147,132334,131188],{"class":2237},[147,132336,15845],{"class":157},[147,132338,132339,132341,132343,132345],{"class":149,"line":312},[147,132340,131195],{"class":448},[147,132342,51710],{"class":157},[147,132344,24009],{"class":448},[147,132346,1565],{"class":157},[147,132348,132349],{"class":149,"line":1454},[147,132350,1839],{"class":157},[147,132352,132353,132355],{"class":149,"line":1469},[147,132354,131210],{"class":2237},[147,132356,15845],{"class":157},[147,132358,132359,132361,132363,132365],{"class":149,"line":1475},[147,132360,131195],{"class":448},[147,132362,51710],{"class":157},[147,132364,72795],{"class":448},[147,132366,1565],{"class":157},[147,132368,132369],{"class":149,"line":1489},[147,132370,1839],{"class":157},[537,132372,132373,132381],{},[540,132374,132375],{},[543,132376,132377,132379],{},[546,132378,127179],{"align":24009},[546,132380,27763],{"align":24009},[583,132382,132383,132390,132397],{},[543,132384,132385,132387],{},[588,132386,55010],{"align":24009},[588,132388,132389],{"align":24009},"元素不浮动（默认值）",[543,132391,132392,132394],{},[588,132393,24009],{"align":24009},[588,132395,132396],{"align":24009},"元素向左浮动",[543,132398,132399,132401],{},[588,132400,72795],{"align":24009},[588,132402,132403],{"align":24009},"元素向右浮动",[19,132405,132406],{},"浮动重点：",[1406,132408,132409,132412,132415,132418,132421],{},[353,132410,132411],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[353,132413,132414],{},"浮动的元素会一行内显示并且元素顶部对齐",[353,132416,132417],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[353,132419,132420],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[353,132422,132423],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,132425,132426],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,132428,132429],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[138,132431,132432],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,132433,132434,132440,132450,132454,132460,132470],{"__ignoreMap":143},[147,132435,132436,132438],{"class":149,"line":150},[147,132437,131188],{"class":2237},[147,132439,15845],{"class":157},[147,132441,132442,132444,132446,132448],{"class":149,"line":312},[147,132443,131195],{"class":448},[147,132445,51710],{"class":157},[147,132447,24009],{"class":448},[147,132449,1565],{"class":157},[147,132451,132452],{"class":149,"line":1454},[147,132453,1839],{"class":157},[147,132455,132456,132458],{"class":149,"line":1469},[147,132457,131210],{"class":2237},[147,132459,15845],{"class":157},[147,132461,132462,132464,132466,132468],{"class":149,"line":1475},[147,132463,131195],{"class":448},[147,132465,51710],{"class":157},[147,132467,72795],{"class":448},[147,132469,1565],{"class":157},[147,132471,132472],{"class":149,"line":1489},[147,132473,1839],{"class":157},[367,132475,132477],{"id":132476},"_1113-定位","11.1.3 定位",[22271,132479,132481],{"id":132480},"_11131-使用场景","11.1.3.1 使用场景",[19,132483,132484],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,132486,132487],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22271,132489,132491],{"id":132490},"_11132-定位组成","11.1.3.2 定位组成",[19,132493,132494],{},"定位 = 定位模式 + 边偏移",[350,132496,132497],{},[353,132498,132499,132502,132503],{},[234,132500,132501],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[234,132504,132505],{},"定位模式",[138,132507,132509],{"className":140,"code":132508,"language":142,"meta":143,"style":143},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[51,132510,132511,132517,132531,132548,132565],{"__ignoreMap":143},[147,132512,132513,132515],{"class":149,"line":150},[147,132514,130563],{"class":2237},[147,132516,15845],{"class":157},[147,132518,132519,132522,132524,132526,132528],{"class":149,"line":312},[147,132520,132521],{"class":448},"  position",[147,132523,51710],{"class":157},[147,132525,55037],{"class":448},[147,132527,130578],{"class":157},[147,132529,132530],{"class":458},"\u002F* 定位模式 *\u002F\n",[147,132532,132533,132536,132538,132540,132542,132545],{"class":149,"line":1454},[147,132534,132535],{"class":448},"  top",[147,132537,51710],{"class":157},[147,132539,845],{"class":448},[147,132541,51765],{"class":397},[147,132543,132544],{"class":157},";           ",[147,132546,132547],{"class":458},"\u002F* 边偏移：上 *\u002F\n",[147,132549,132550,132553,132555,132557,132559,132562],{"class":149,"line":1469},[147,132551,132552],{"class":448},"  left",[147,132554,51710],{"class":157},[147,132556,1099],{"class":448},[147,132558,51765],{"class":397},[147,132560,132561],{"class":157},";          ",[147,132563,132564],{"class":458},"\u002F* 边偏移：左 *\u002F\n",[147,132566,132567],{"class":149,"line":1475},[147,132568,1839],{"class":157},[537,132570,132571,132580],{},[540,132572,132573],{},[543,132574,132575,132577],{},[546,132576,551],{"align":24009},[546,132578,132579],{"align":24009},"语义",[583,132581,132582,132589,132596,132603],{},[543,132583,132584,132586],{},[588,132585,132168],{"align":24009},[588,132587,132588],{"align":24009},"静态定位",[543,132590,132591,132593],{},[588,132592,55037],{"align":24009},[588,132594,132595],{"align":24009},"相对定位",[543,132597,132598,132600],{},[588,132599,55104],{"align":24009},[588,132601,132602],{"align":24009},"绝对定位",[543,132604,132605,132607],{},[588,132606,86505],{"align":24009},[588,132608,132609],{"align":24009},"固定定位",[19,132611,132612],{},"（1）静态定位：",[1406,132614,132615,132626],{},[353,132616,132617,132618,132621,132622,132625],{},"静态定位是元素的 ",[234,132619,132620],{},"默认定位方式"," ， ",[234,132623,132624],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[353,132627,5455],{},[138,132629,132630],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,132631,132632,132638,132650,132664,132678],{"__ignoreMap":143},[147,132633,132634,132636],{"class":149,"line":150},[147,132635,130563],{"class":2237},[147,132637,15845],{"class":157},[147,132639,132640,132642,132644,132646,132648],{"class":149,"line":312},[147,132641,132521],{"class":448},[147,132643,51710],{"class":157},[147,132645,55037],{"class":448},[147,132647,130578],{"class":157},[147,132649,132530],{"class":458},[147,132651,132652,132654,132656,132658,132660,132662],{"class":149,"line":1454},[147,132653,132535],{"class":448},[147,132655,51710],{"class":157},[147,132657,845],{"class":448},[147,132659,51765],{"class":397},[147,132661,132544],{"class":157},[147,132663,132547],{"class":458},[147,132665,132666,132668,132670,132672,132674,132676],{"class":149,"line":1469},[147,132667,132552],{"class":448},[147,132669,51710],{"class":157},[147,132671,1099],{"class":448},[147,132673,51765],{"class":397},[147,132675,132561],{"class":157},[147,132677,132564],{"class":458},[147,132679,132680],{"class":149,"line":1475},[147,132681,1839],{"class":157},[1406,132683,132684,132687],{},[353,132685,132686],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[353,132688,132689],{},"静态定位在布局时我们几乎不用的",[19,132691,132692],{},"（2）相对定位",[1406,132694,132695,132702],{},[353,132696,132697,132698,132701],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[234,132699,132700],{},"原来的位置"," 来说的（自恋型）",[353,132703,5455],{},[138,132705,132706],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,132707,132708,132714,132726,132740,132754],{"__ignoreMap":143},[147,132709,132710,132712],{"class":149,"line":150},[147,132711,130563],{"class":2237},[147,132713,15845],{"class":157},[147,132715,132716,132718,132720,132722,132724],{"class":149,"line":312},[147,132717,132521],{"class":448},[147,132719,51710],{"class":157},[147,132721,55037],{"class":448},[147,132723,130578],{"class":157},[147,132725,132530],{"class":458},[147,132727,132728,132730,132732,132734,132736,132738],{"class":149,"line":1454},[147,132729,132535],{"class":448},[147,132731,51710],{"class":157},[147,132733,845],{"class":448},[147,132735,51765],{"class":397},[147,132737,132544],{"class":157},[147,132739,132547],{"class":458},[147,132741,132742,132744,132746,132748,132750,132752],{"class":149,"line":1469},[147,132743,132552],{"class":448},[147,132745,51710],{"class":157},[147,132747,1099],{"class":448},[147,132749,51765],{"class":397},[147,132751,132561],{"class":157},[147,132753,132564],{"class":458},[147,132755,132756],{"class":149,"line":1475},[147,132757,1839],{"class":157},[1406,132759,132760],{},[353,132761,132762,132763,132765,132766,132768,132769,132772,132773,132776,132777,132779,132780,132783],{},"相对定位的特点：",[53989,132764],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53989,132767],{},"  ② ",[234,132770,132771],{},"原来"," 在标准流的 ",[234,132774,132775],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53989,132778],{},"  ③因此， ",[234,132781,132782],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,132785,132786],{},"（3）绝对定位",[1406,132788,132789,132798],{},[353,132790,132791,132793,132794,132797],{},[234,132792,132602],{}," 是元素在移动位置的时候，是相对于它 ",[234,132795,132796],{},"祖先元素"," 来说的（拼爹型）",[353,132799,5455],{},[138,132801,132802],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,132803,132804,132810,132822,132836,132850],{"__ignoreMap":143},[147,132805,132806,132808],{"class":149,"line":150},[147,132807,130563],{"class":2237},[147,132809,15845],{"class":157},[147,132811,132812,132814,132816,132818,132820],{"class":149,"line":312},[147,132813,132521],{"class":448},[147,132815,51710],{"class":157},[147,132817,55037],{"class":448},[147,132819,130578],{"class":157},[147,132821,132530],{"class":458},[147,132823,132824,132826,132828,132830,132832,132834],{"class":149,"line":1454},[147,132825,132535],{"class":448},[147,132827,51710],{"class":157},[147,132829,845],{"class":448},[147,132831,51765],{"class":397},[147,132833,132544],{"class":157},[147,132835,132547],{"class":458},[147,132837,132838,132840,132842,132844,132846,132848],{"class":149,"line":1469},[147,132839,132552],{"class":448},[147,132841,51710],{"class":157},[147,132843,1099],{"class":448},[147,132845,51765],{"class":397},[147,132847,132561],{"class":157},[147,132849,132564],{"class":458},[147,132851,132852],{"class":149,"line":1475},[147,132853,1839],{"class":157},[1406,132855,132856,132871,132880,132883],{},[353,132857,132858,132859,132861,132862,132864,132865,132867,132868,132870],{},"绝对定位的特点：",[53989,132860],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53989,132863],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53989,132866],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53989,132869],{},"  (4)固定定位",[353,132872,132873,132875,132876,132879],{},[234,132874,132609],{}," 是元素 ",[234,132877,132878],{},"固定于浏览器可视区的位置"," 。（认死理型）",[353,132881,132882],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[353,132884,132885],{},"语法:",[138,132887,132888],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,132889,132890,132896,132908,132922,132936],{"__ignoreMap":143},[147,132891,132892,132894],{"class":149,"line":150},[147,132893,130563],{"class":2237},[147,132895,15845],{"class":157},[147,132897,132898,132900,132902,132904,132906],{"class":149,"line":312},[147,132899,132521],{"class":448},[147,132901,51710],{"class":157},[147,132903,55037],{"class":448},[147,132905,130578],{"class":157},[147,132907,132530],{"class":458},[147,132909,132910,132912,132914,132916,132918,132920],{"class":149,"line":1454},[147,132911,132535],{"class":448},[147,132913,51710],{"class":157},[147,132915,845],{"class":448},[147,132917,51765],{"class":397},[147,132919,132544],{"class":157},[147,132921,132547],{"class":458},[147,132923,132924,132926,132928,132930,132932,132934],{"class":149,"line":1469},[147,132925,132552],{"class":448},[147,132927,51710],{"class":157},[147,132929,1099],{"class":448},[147,132931,51765],{"class":397},[147,132933,132561],{"class":157},[147,132935,132564],{"class":458},[147,132937,132938],{"class":149,"line":1475},[147,132939,1839],{"class":157},[1406,132941,132942,132951],{},[353,132943,132944,132945,132947,132948,132950],{},"特点:",[53989,132946],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53989,132949],{},"  ②固定定位不再占有原先的位置,完全脱标",[353,132952,132953,132954,132956,132957,132959,132960,132962],{},"固定在版心位置的方法:",[53989,132955],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53989,132958],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53989,132961],{},"  实例：",[138,132964,132965],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,132966,132967,132973,132985,132999,133013],{"__ignoreMap":143},[147,132968,132969,132971],{"class":149,"line":150},[147,132970,130563],{"class":2237},[147,132972,15845],{"class":157},[147,132974,132975,132977,132979,132981,132983],{"class":149,"line":312},[147,132976,132521],{"class":448},[147,132978,51710],{"class":157},[147,132980,55037],{"class":448},[147,132982,130578],{"class":157},[147,132984,132530],{"class":458},[147,132986,132987,132989,132991,132993,132995,132997],{"class":149,"line":1454},[147,132988,132535],{"class":448},[147,132990,51710],{"class":157},[147,132992,845],{"class":448},[147,132994,51765],{"class":397},[147,132996,132544],{"class":157},[147,132998,132547],{"class":458},[147,133000,133001,133003,133005,133007,133009,133011],{"class":149,"line":1469},[147,133002,132552],{"class":448},[147,133004,51710],{"class":157},[147,133006,1099],{"class":448},[147,133008,51765],{"class":397},[147,133010,132561],{"class":157},[147,133012,132564],{"class":458},[147,133014,133015],{"class":149,"line":1475},[147,133016,1839],{"class":157},[29,133018],{"style":31,"src":133019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,133021,133022],{},"(5)粘性定位",[1406,133024,133025,133028],{},[353,133026,133027],{},"粘性定位可以被认为是相对定位和固定定位的混合",[353,133029,5455],{},[138,133031,133032],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,133033,133034,133040,133052,133066,133080],{"__ignoreMap":143},[147,133035,133036,133038],{"class":149,"line":150},[147,133037,130563],{"class":2237},[147,133039,15845],{"class":157},[147,133041,133042,133044,133046,133048,133050],{"class":149,"line":312},[147,133043,132521],{"class":448},[147,133045,51710],{"class":157},[147,133047,55037],{"class":448},[147,133049,130578],{"class":157},[147,133051,132530],{"class":458},[147,133053,133054,133056,133058,133060,133062,133064],{"class":149,"line":1454},[147,133055,132535],{"class":448},[147,133057,51710],{"class":157},[147,133059,845],{"class":448},[147,133061,51765],{"class":397},[147,133063,132544],{"class":157},[147,133065,132547],{"class":458},[147,133067,133068,133070,133072,133074,133076,133078],{"class":149,"line":1469},[147,133069,132552],{"class":448},[147,133071,51710],{"class":157},[147,133073,1099],{"class":448},[147,133075,51765],{"class":397},[147,133077,132561],{"class":157},[147,133079,132564],{"class":458},[147,133081,133082],{"class":149,"line":1475},[147,133083,1839],{"class":157},[1406,133085,133086],{},[353,133087,133088,133089,133091,133092,133094,133095,133097,133098,133101,133102,133104],{},"粘性定位的特点：",[53989,133090],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53989,133093],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53989,133096],{},"  ③必须添加 top 、left、right、bottom ",[234,133099,133100],{},"其中一个"," 才有效",[53989,133103],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[138,133106,133107],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,133108,133109,133115,133127,133141,133155],{"__ignoreMap":143},[147,133110,133111,133113],{"class":149,"line":150},[147,133112,130563],{"class":2237},[147,133114,15845],{"class":157},[147,133116,133117,133119,133121,133123,133125],{"class":149,"line":312},[147,133118,132521],{"class":448},[147,133120,51710],{"class":157},[147,133122,55037],{"class":448},[147,133124,130578],{"class":157},[147,133126,132530],{"class":458},[147,133128,133129,133131,133133,133135,133137,133139],{"class":149,"line":1454},[147,133130,132535],{"class":448},[147,133132,51710],{"class":157},[147,133134,845],{"class":448},[147,133136,51765],{"class":397},[147,133138,132544],{"class":157},[147,133140,132547],{"class":458},[147,133142,133143,133145,133147,133149,133151,133153],{"class":149,"line":1469},[147,133144,132552],{"class":448},[147,133146,51710],{"class":157},[147,133148,1099],{"class":448},[147,133150,51765],{"class":397},[147,133152,132561],{"class":157},[147,133154,132564],{"class":458},[147,133156,133157],{"class":149,"line":1475},[147,133158,1839],{"class":157},[29,133160],{"style":31,"src":133161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,133163,133164],{},"(6)总结",[537,133166,133167,133182],{},[540,133168,133169],{},[543,133170,133171,133173,133176,133179],{},[546,133172,132505],{"align":24009},[546,133174,133175],{"align":24009},"是否脱标",[546,133177,133178],{"align":24009},"移动位置",[546,133180,133181],{"align":24009},"是否常用",[583,133183,133184,133197,133211,133225,133238],{},[543,133185,133186,133189,133191,133194],{},[588,133187,133188],{"align":24009},"Static 静态定位",[588,133190,104948],{"align":24009},[588,133192,133193],{"align":24009},"不能使用边偏移",[588,133195,133196],{"align":24009},"很少",[543,133198,133199,133202,133205,133208],{},[588,133200,133201],{"align":24009},"Relative 相对定位",[588,133203,133204],{"align":24009},"否(占有位置)",[588,133206,133207],{"align":24009},"相对于自身位置移动",[588,133209,133210],{"align":24009},"基本单独使用",[543,133212,133213,133216,133219,133222],{},[588,133214,133215],{"align":24009},"Absolute 绝对定位",[588,133217,133218],{"align":24009},"是(不占有位置)",[588,133220,133221],{"align":24009},"带有定位的父级",[588,133223,133224],{"align":24009},"要和定位父级元素搭配使用",[543,133226,133227,133230,133232,133235],{},[588,133228,133229],{"align":24009},"Fixed 固定定位",[588,133231,133218],{"align":24009},[588,133233,133234],{"align":24009},"浏览器可视区",[588,133236,133237],{"align":24009},"单独使用,不需要父级",[543,133239,133240,133243,133245,133247],{},[588,133241,133242],{"align":24009},"Sticky 粘性定位",[588,133244,133204],{"align":24009},[588,133246,133234],{"align":24009},[588,133248,133249],{"align":24009},"当前阶段少",[350,133251,133252],{"start":312},[353,133253,133254,133257],{},[234,133255,133256],{},"边偏移"," 则决定了该元素的最终位置",[537,133259,133260,133271],{},[540,133261,133262],{},[543,133263,133264,133267,133269],{},[546,133265,133266],{"align":24009},"边偏移属性",[546,133268,27766],{"align":24009},[546,133270,27763],{"align":24009},[583,133272,133273,133284,133295,133305],{},[543,133274,133275,133278,133281],{},[588,133276,133277],{"align":24009},"top",[588,133279,133280],{"align":24009},"top: 80px;",[588,133282,133283],{"align":24009},"顶端偏移量，定义元素相对于父元素上边线的距离",[543,133285,133286,133289,133292],{},[588,133287,133288],{"align":24009},"bottom",[588,133290,133291],{"align":24009},"bottom: 80px ;",[588,133293,133294],{"align":24009},"底部偏移量，定义元素相对于其父元素下边线的距离",[543,133296,133297,133299,133302],{},[588,133298,24009],{"align":24009},[588,133300,133301],{"align":24009},"left: 80px ;",[588,133303,133304],{"align":24009},"左侧偏移量，定义元素相对于其父元素左边线的距离",[543,133306,133307,133309,133312],{},[588,133308,72795],{"align":24009},[588,133310,133311],{"align":24009},"right: 80px ;",[588,133313,133314],{"align":24009},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1406,133316,133317],{},[353,133318,9299,133319,133321,133322,133324,133325,133327,133328,133331,133332,133334,133335,133337],{},[53989,133320],{},"  ① ",[234,133323,133256],{}," 需要和 ",[234,133326,132505],{}," 联合使用， ",[234,133329,133330],{},"单独使用无效"," ；",[53989,133333],{},"  ②top和bottom不要同时使用",[53989,133336],{},"  ③left和right不要同时使用",[22271,133339,133341],{"id":133340},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,133343,133344],{},"子级是绝对定位的话，父级要用相对定位",[1406,133346,133347,133350,133353,133356],{},[353,133348,133349],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[353,133351,133352],{},"父盒子需要加定位限制子盒子在父盒子内显示",[353,133354,133355],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[353,133357,133358,133359,133362],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[234,133360,133361],{},"子绝父绝"," 也会遇到",[22271,133364,133366],{"id":133365},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1406,133368,133369,133384],{},[353,133370,133371,133372,133375,133376,133379,133380,133383],{},"在使用 ",[234,133373,133374],{},"定位"," 布局时，可能会 ",[234,133377,133378],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[234,133381,133382],{},"z-index"," 来控制盒子的前后次序 (z轴)",[353,133385,5455],{},[138,133387,133388],{"className":140,"code":132508,"language":142,"meta":143,"style":143},[51,133389,133390,133396,133408,133422,133436],{"__ignoreMap":143},[147,133391,133392,133394],{"class":149,"line":150},[147,133393,130563],{"class":2237},[147,133395,15845],{"class":157},[147,133397,133398,133400,133402,133404,133406],{"class":149,"line":312},[147,133399,132521],{"class":448},[147,133401,51710],{"class":157},[147,133403,55037],{"class":448},[147,133405,130578],{"class":157},[147,133407,132530],{"class":458},[147,133409,133410,133412,133414,133416,133418,133420],{"class":149,"line":1454},[147,133411,132535],{"class":448},[147,133413,51710],{"class":157},[147,133415,845],{"class":448},[147,133417,51765],{"class":397},[147,133419,132544],{"class":157},[147,133421,132547],{"class":458},[147,133423,133424,133426,133428,133430,133432,133434],{"class":149,"line":1469},[147,133425,132552],{"class":448},[147,133427,51710],{"class":157},[147,133429,1099],{"class":448},[147,133431,51765],{"class":397},[147,133433,132561],{"class":157},[147,133435,132564],{"class":458},[147,133437,133438],{"class":149,"line":1475},[147,133439,1839],{"class":157},[1406,133441,133442],{},[353,133443,133444,133445,133321,133447,133449,133450,127878,133453,82811,133456,133458,133459,133461,133462,133465,133466,133331,133469,133471,133472,133475,133477],{},"z-index的特性",[53989,133446],{},[234,133448,127179],{}," ： ",[234,133451,133452],{},"正整数",[234,133454,133455],{},"负整数",[234,133457,590],{}," ，默认值是 0，数值越大，盒子越靠上；",[53989,133460],{},"  ②如果 ",[234,133463,133464],{},"属性值相同"," ，则按照书写顺序， ",[234,133467,133468],{},"后来居上",[53989,133470],{},"  ③数字后面 ",[234,133473,133474],{},"不能加单位",[53989,133476],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22271,133479,133481],{"id":133480},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,133483,133484],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,133486,133487],{},"方法:",[1406,133489,133490,133500],{},[353,133491,133492,133493,133496,133497],{},"left: 50%; 让 ",[234,133494,133495],{},"盒子的左侧"," 移动到 ",[234,133498,133499],{},"父级元素的水平中心位置",[353,133501,133502,133503,133506,133507],{},"margin-left: -100px; 让盒子 ",[234,133504,133505],{},"向左"," 移动 ",[234,133508,133509],{},"自身宽度的一半",[22271,133511,133513],{"id":133512},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[350,133515,133516,133519],{},[353,133517,133518],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[353,133520,133521],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,133523,133524],{},"也就是说绝对定位和固定定位和浮动类似",[350,133526,133527],{"start":1454},[353,133528,133529],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1406,133531,133532,133535,133538],{},[353,133533,133534],{},"可以用inline-block 转换为行内块",[353,133536,133537],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[353,133539,133540],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,133542,133543],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22271,133545,133547],{"id":133546},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[350,133549,133550,133553,133556,133559],{},[353,133551,133552],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[353,133554,133555],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[353,133557,133558],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[353,133560,133561],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[138,133563,133564],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,133565,133566,133572,133582,133586,133592,133602],{"__ignoreMap":143},[147,133567,133568,133570],{"class":149,"line":150},[147,133569,131188],{"class":2237},[147,133571,15845],{"class":157},[147,133573,133574,133576,133578,133580],{"class":149,"line":312},[147,133575,131195],{"class":448},[147,133577,51710],{"class":157},[147,133579,24009],{"class":448},[147,133581,1565],{"class":157},[147,133583,133584],{"class":149,"line":1454},[147,133585,1839],{"class":157},[147,133587,133588,133590],{"class":149,"line":1469},[147,133589,131210],{"class":2237},[147,133591,15845],{"class":157},[147,133593,133594,133596,133598,133600],{"class":149,"line":1475},[147,133595,131195],{"class":448},[147,133597,51710],{"class":157},[147,133599,72795],{"class":448},[147,133601,1565],{"class":157},[147,133603,133604],{"class":149,"line":1489},[147,133605,1839],{"class":157},[29,133607],{"style":31,"src":133608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22271,133610,133612],{"id":133611},"_11138-轮播图","11.1.3.8 轮播图",[29,133614],{"style":31,"src":133615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[350,133617,133618],{},[353,133619,133620],{},"制作顺序:",[1406,133622,133623,133626,133629,133638],{},[353,133624,133625],{},"大盒子我们类名为： tb-promo 淘宝广告",[353,133627,133628],{},"里面先放一张图片",[353,133630,133631,133632,133634,133635,133637],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53989,133633],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53989,133636],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[353,133639,133640,133641,133643,133644,133646],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53989,133642],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53989,133645],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[350,133648,133649],{"start":312},[353,133650,133651],{},"代码模块",[138,133653,133655],{"className":140,"code":133654,"language":142,"meta":143,"style":143},"\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",[51,133656,133657,133662,133669,133679,133689,133699,133703,133708,133715,133725],{"__ignoreMap":143},[147,133658,133659],{"class":149,"line":150},[147,133660,133661],{"class":458},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[147,133663,133664,133667],{"class":149,"line":312},[147,133665,133666],{"class":2237},".son",[147,133668,15845],{"class":157},[147,133670,133671,133673,133675,133677],{"class":149,"line":1454},[147,133672,132521],{"class":448},[147,133674,51710],{"class":157},[147,133676,55104],{"class":448},[147,133678,1565],{"class":157},[147,133680,133681,133683,133685,133687],{"class":149,"line":1469},[147,133682,132535],{"class":448},[147,133684,51710],{"class":157},[147,133686,590],{"class":448},[147,133688,1565],{"class":157},[147,133690,133691,133693,133695,133697],{"class":149,"line":1475},[147,133692,132552],{"class":448},[147,133694,51710],{"class":157},[147,133696,590],{"class":448},[147,133698,1565],{"class":157},[147,133700,133701],{"class":149,"line":1489},[147,133702,1839],{"class":157},[147,133704,133705],{"class":149,"line":1495},[147,133706,133707],{"class":458},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[147,133709,133710,133713],{"class":149,"line":1586},[147,133711,133712],{"class":2237},".father",[147,133714,15845],{"class":157},[147,133716,133717,133719,133721,133723],{"class":149,"line":1592},[147,133718,132521],{"class":448},[147,133720,51710],{"class":157},[147,133722,55037],{"class":448},[147,133724,1565],{"class":157},[147,133726,133727],{"class":149,"line":1604},[147,133728,1839],{"class":157},[19,133730,133731],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[367,133733,133735],{"id":133734},"_1114-定位数值的移动","11.1.4 定位数值的移动",[29,133737],{"style":31,"src":133738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,133740,133741],{},"✨ 黄金口诀：",[19,133743,133744],{},"\"TOP正下负上，LEFT正右负左\"",[19,133746,133747],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,133749,133750],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,133752,133753],{},"✨ 简单记：",[19,133755,133756],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[308,133758,133759],{},"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":143,"searchDepth":312,"depth":312,"links":133761},[133762],{"id":132289,"depth":312,"text":132290,"children":133763},[133764,133765,133766,133767],{"id":132293,"depth":1454,"text":132294},{"id":132308,"depth":1454,"text":132309},{"id":132476,"depth":1454,"text":132477},{"id":133734,"depth":1454,"text":133735},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132281,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133774,"title":133775,"body":133776,"description":321,"extension":322,"meta":135199,"navigation":324,"path":135200,"seo":135201,"stem":135202,"__hash__":135203},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133777,"toc":135178},[133778,133781,133785,133793,133797,133802,133810,133822,133826,133831,133839,133850,133854,133859,133900,133908,133912,133915,133918,133921,134015,134018,134112,134115,134209,134212,134215,134250,134253,134256,134286,134289,134292,134295,134298,134301,134304,134307,134377,134380,134384,134388,134429,134433,134439,134442,134445,134449,134452,134455,134458,134539,134542,134545,134549,134553,134556,134559,134562,134565,134568,134574,134583,134587,134606,134610,134620,134623,134626,134629,134632,134635,134638,134641,134644,134653,134657,134666,134669,134674,134727,134732,134898,134901,134904,134909,134912,134915,134918,134921,134926,135074,135077,135080,135085,135088,135093,135127,135130,135133,135137,135140,135147,135150,135153,135156,135159,135162,135165,135168,135172,135175],[10,133779,133775],{"id":133780},"_12-显示隐藏与图形资源",[14,133782,133784],{"id":133783},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1406,133786,133787,133790],{},[353,133788,133789],{},"目的:让一个元素在页面中消失或者显示出来",[353,133791,133792],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[367,133794,133796],{"id":133795},"_1211-display-显示","12.1.1 display 显示",[350,133798,133799],{},[353,133800,133801],{},"display 设置或检索对象是否及如何显示",[1406,133803,133804,133807],{},[353,133805,133806],{},"display: none;隐藏对象",[353,133808,133809],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[350,133811,133812,133819],{"start":312},[353,133813,133814,133815,133818],{},"特点： display 隐藏元素后， ",[234,133816,133817],{},"不再占"," 有原来的位置",[353,133820,133821],{},"在js中使用非常的广泛",[367,133823,133825],{"id":133824},"_1212-visibility可见性","12.1.2 visibility可见性",[350,133827,133828],{},[353,133829,133830],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1406,133832,133833,133836],{},[353,133834,133835],{},"visibility： visible；元素可见",[353,133837,133838],{},"visibility：hidden；元素隐藏",[350,133840,133841,133844,133847],{"start":312},[353,133842,133843],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[353,133845,133846],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[353,133848,133849],{},"隐藏后继续占有原有位置",[367,133851,133853],{"id":133852},"_1213-overflow溢出","12.1.3 overflow溢出",[1406,133855,133856],{},[353,133857,133858],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[537,133860,133861,133869],{},[540,133862,133863],{},[543,133864,133865,133867],{},[546,133866,127179],{"align":24009},[546,133868,27763],{"align":24009},[583,133870,133871,133879,133886,133893],{},[543,133872,133873,133876],{},[588,133874,133875],{"align":24009},"visible",[588,133877,133878],{"align":24009},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[543,133880,133881,133883],{},[588,133882,61987],{"align":24009},[588,133884,133885],{"align":24009},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[543,133887,133888,133890],{},[588,133889,129135],{"align":24009},[588,133891,133892],{"align":24009},"不管超出内容否，总是显示滚动条",[543,133894,133895,133897],{},[588,133896,72936],{"align":24009},[588,133898,133899],{"align":24009},"超出自动显示滚动条，不超出不显示滚动条",[1406,133901,133902,133905],{},[353,133903,133904],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[353,133906,133907],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[367,133909,133911],{"id":133910},"_1214-案例收获","12.1.4 案例收获",[29,133913],{"style":31,"src":133914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,133916,133917],{},"问题：没做出来动态效果，使用hover没实现",[19,133919,133920],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[138,133922,133923],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,133924,133925,133929,133943,133947,133961,133965,133979,133983,133997,134001],{"__ignoreMap":143},[147,133926,133927],{"class":149,"line":150},[147,133928,132154],{"class":458},[147,133930,133931,133933,133935,133937,133939,133941],{"class":149,"line":312},[147,133932,132159],{"class":2237},[147,133934,80079],{"class":157},[147,133936,129075],{"class":448},[147,133938,51710],{"class":157},[147,133940,132168],{"class":448},[147,133942,129645],{"class":157},[147,133944,133945],{"class":149,"line":1454},[147,133946,132175],{"class":458},[147,133948,133949,133951,133953,133955,133957,133959],{"class":149,"line":1469},[147,133950,132180],{"class":2237},[147,133952,80079],{"class":157},[147,133954,129075],{"class":448},[147,133956,51710],{"class":157},[147,133958,55037],{"class":448},[147,133960,129645],{"class":157},[147,133962,133963],{"class":149,"line":1475},[147,133964,132195],{"class":458},[147,133966,133967,133969,133971,133973,133975,133977],{"class":149,"line":1489},[147,133968,132200],{"class":2237},[147,133970,80079],{"class":157},[147,133972,129075],{"class":448},[147,133974,51710],{"class":157},[147,133976,55104],{"class":448},[147,133978,129645],{"class":157},[147,133980,133981],{"class":149,"line":1495},[147,133982,132215],{"class":458},[147,133984,133985,133987,133989,133991,133993,133995],{"class":149,"line":1586},[147,133986,132220],{"class":2237},[147,133988,80079],{"class":157},[147,133990,129075],{"class":448},[147,133992,51710],{"class":157},[147,133994,86505],{"class":448},[147,133996,129645],{"class":157},[147,133998,133999],{"class":149,"line":1592},[147,134000,132235],{"class":458},[147,134002,134003,134005,134007,134009,134011,134013],{"class":149,"line":1604},[147,134004,132240],{"class":2237},[147,134006,80079],{"class":157},[147,134008,129075],{"class":448},[147,134010,51710],{"class":157},[147,134012,132249],{"class":448},[147,134014,129645],{"class":157},[19,134016,134017],{},"完整代码：",[138,134019,134020],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,134021,134022,134026,134040,134044,134058,134062,134076,134080,134094,134098],{"__ignoreMap":143},[147,134023,134024],{"class":149,"line":150},[147,134025,132154],{"class":458},[147,134027,134028,134030,134032,134034,134036,134038],{"class":149,"line":312},[147,134029,132159],{"class":2237},[147,134031,80079],{"class":157},[147,134033,129075],{"class":448},[147,134035,51710],{"class":157},[147,134037,132168],{"class":448},[147,134039,129645],{"class":157},[147,134041,134042],{"class":149,"line":1454},[147,134043,132175],{"class":458},[147,134045,134046,134048,134050,134052,134054,134056],{"class":149,"line":1469},[147,134047,132180],{"class":2237},[147,134049,80079],{"class":157},[147,134051,129075],{"class":448},[147,134053,51710],{"class":157},[147,134055,55037],{"class":448},[147,134057,129645],{"class":157},[147,134059,134060],{"class":149,"line":1475},[147,134061,132195],{"class":458},[147,134063,134064,134066,134068,134070,134072,134074],{"class":149,"line":1489},[147,134065,132200],{"class":2237},[147,134067,80079],{"class":157},[147,134069,129075],{"class":448},[147,134071,51710],{"class":157},[147,134073,55104],{"class":448},[147,134075,129645],{"class":157},[147,134077,134078],{"class":149,"line":1495},[147,134079,132215],{"class":458},[147,134081,134082,134084,134086,134088,134090,134092],{"class":149,"line":1586},[147,134083,132220],{"class":2237},[147,134085,80079],{"class":157},[147,134087,129075],{"class":448},[147,134089,51710],{"class":157},[147,134091,86505],{"class":448},[147,134093,129645],{"class":157},[147,134095,134096],{"class":149,"line":1592},[147,134097,132235],{"class":458},[147,134099,134100,134102,134104,134106,134108,134110],{"class":149,"line":1604},[147,134101,132240],{"class":2237},[147,134103,80079],{"class":157},[147,134105,129075],{"class":448},[147,134107,51710],{"class":157},[147,134109,132249],{"class":448},[147,134111,129645],{"class":157},[19,134113,134114],{},"分布思路重点详解：",[138,134116,134117],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,134118,134119,134123,134137,134141,134155,134159,134173,134177,134191,134195],{"__ignoreMap":143},[147,134120,134121],{"class":149,"line":150},[147,134122,132154],{"class":458},[147,134124,134125,134127,134129,134131,134133,134135],{"class":149,"line":312},[147,134126,132159],{"class":2237},[147,134128,80079],{"class":157},[147,134130,129075],{"class":448},[147,134132,51710],{"class":157},[147,134134,132168],{"class":448},[147,134136,129645],{"class":157},[147,134138,134139],{"class":149,"line":1454},[147,134140,132175],{"class":458},[147,134142,134143,134145,134147,134149,134151,134153],{"class":149,"line":1469},[147,134144,132180],{"class":2237},[147,134146,80079],{"class":157},[147,134148,129075],{"class":448},[147,134150,51710],{"class":157},[147,134152,55037],{"class":448},[147,134154,129645],{"class":157},[147,134156,134157],{"class":149,"line":1475},[147,134158,132195],{"class":458},[147,134160,134161,134163,134165,134167,134169,134171],{"class":149,"line":1489},[147,134162,132200],{"class":2237},[147,134164,80079],{"class":157},[147,134166,129075],{"class":448},[147,134168,51710],{"class":157},[147,134170,55104],{"class":448},[147,134172,129645],{"class":157},[147,134174,134175],{"class":149,"line":1495},[147,134176,132215],{"class":458},[147,134178,134179,134181,134183,134185,134187,134189],{"class":149,"line":1586},[147,134180,132220],{"class":2237},[147,134182,80079],{"class":157},[147,134184,129075],{"class":448},[147,134186,51710],{"class":157},[147,134188,86505],{"class":448},[147,134190,129645],{"class":157},[147,134192,134193],{"class":149,"line":1592},[147,134194,132235],{"class":458},[147,134196,134197,134199,134201,134203,134205,134207],{"class":149,"line":1604},[147,134198,132240],{"class":2237},[147,134200,80079],{"class":157},[147,134202,129075],{"class":448},[147,134204,51710],{"class":157},[147,134206,132249],{"class":448},[147,134208,129645],{"class":157},[29,134210],{"style":31,"src":134211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,134213,134214],{},"图片太大，盒子太小，此时需要修改图片的大小",[138,134216,134218],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[51,134219,134220],{"__ignoreMap":143},[147,134221,134222,134224,134226,134228,134230,134233,134235,134237,134240,134243,134245,134248],{"class":149,"line":150},[147,134223,1309],{"class":157},[147,134225,29],{"class":153},[147,134227,55512],{"class":2237},[147,134229,445],{"class":157},[147,134231,134232],{"class":504},"\"images\u002Fpic.jpg\"",[147,134234,55520],{"class":2237},[147,134236,445],{"class":157},[147,134238,134239],{"class":504},"\"描述文字\"",[147,134241,134242],{"class":2237}," title",[147,134244,445],{"class":157},[147,134246,134247],{"class":504},"\"悬停提示\"",[147,134249,51580],{"class":157},[29,134251],{"style":31,"src":134252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,134254,134255],{},"制造遮罩层",[138,134257,134258],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,134259,134260],{"__ignoreMap":143},[147,134261,134262,134264,134266,134268,134270,134272,134274,134276,134278,134280,134282,134284],{"class":149,"line":150},[147,134263,1309],{"class":157},[147,134265,29],{"class":153},[147,134267,55512],{"class":2237},[147,134269,445],{"class":157},[147,134271,134232],{"class":504},[147,134273,55520],{"class":2237},[147,134275,445],{"class":157},[147,134277,134239],{"class":504},[147,134279,134242],{"class":2237},[147,134281,445],{"class":157},[147,134283,134247],{"class":504},[147,134285,51580],{"class":157},[19,134287,134288],{},"此时是这样的为标准流",[29,134290],{"style":31,"src":134291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,134293,134294],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,134296,134297],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,134299,134300],{},"让他在中间，用center(background-position)",[19,134302,134303],{},"将需要变的尽可能放到一个盒子中",[19,134305,134306],{},"放大盒子上内部盒子发生变化",[138,134308,134310],{"className":140,"code":134309,"language":142,"meta":143,"style":143},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[51,134311,134312,134318,134328,134332,134339,134349,134361,134373],{"__ignoreMap":143},[147,134313,134314,134316],{"class":149,"line":150},[147,134315,127782],{"class":2237},[147,134317,15845],{"class":157},[147,134319,134320,134322,134324,134326],{"class":149,"line":312},[147,134321,132521],{"class":448},[147,134323,51710],{"class":157},[147,134325,55037],{"class":448},[147,134327,1565],{"class":157},[147,134329,134330],{"class":149,"line":1454},[147,134331,1839],{"class":157},[147,134333,134334,134337],{"class":149,"line":1469},[147,134335,134336],{"class":2237},".child",[147,134338,15845],{"class":157},[147,134340,134341,134343,134345,134347],{"class":149,"line":1475},[147,134342,132521],{"class":448},[147,134344,51710],{"class":157},[147,134346,55104],{"class":448},[147,134348,1565],{"class":157},[147,134350,134351,134353,134355,134357,134359],{"class":149,"line":1489},[147,134352,132535],{"class":448},[147,134354,51710],{"class":157},[147,134356,1055],{"class":448},[147,134358,727],{"class":397},[147,134360,1565],{"class":157},[147,134362,134363,134365,134367,134369,134371],{"class":149,"line":1495},[147,134364,132552],{"class":448},[147,134366,51710],{"class":157},[147,134368,1055],{"class":448},[147,134370,727],{"class":397},[147,134372,1565],{"class":157},[147,134374,134375],{"class":149,"line":1586},[147,134376,1839],{"class":157},[19,134378,134379],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,134381,134383],{"id":134382},"_122-精灵图","12.2 精灵图",[367,134385,134387],{"id":134386},"_1221-理解","12.2.1 理解",[350,134389,134390,134408],{},[353,134391,134392,134393,132621,134396,134399,134400,134403,134404,134407],{},"目的： ",[234,134394,134395],{},"为了有效地减少服务器接收和发送请求的次数",[234,134397,134398],{},"提高"," 页面的 ",[234,134401,134402],{},"加载速度"," ，出现了 ",[234,134405,134406],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[353,134409,134410,134411,134413,134414,134416,134417,134419,134420,134422,134423,134425,134426,134428],{},"使用精灵图核心：",[53989,134412],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53989,134415],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53989,134418],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53989,134421],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53989,134424],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53989,134427],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[367,134430,134432],{"id":134431},"_1222-扒图","12.2.2 扒图",[138,134434,134437],{"className":134435,"code":134436,"language":5461},[5459],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[51,134438,134436],{"__ignoreMap":143},[29,134440],{"style":31,"src":134441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[29,134443],{"style":31,"src":134444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[367,134446,134448],{"id":134447},"_1223-精灵图的实现","12.2.3 精灵图的实现",[29,134450],{"style":31,"src":134451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,134453,134454],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[29,134456],{"style":31,"src":134457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[138,134459,134461],{"className":140,"code":134460,"language":142,"meta":143,"style":143},"\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",[51,134462,134463,134468,134475,134487,134499,134518,134535],{"__ignoreMap":143},[147,134464,134465],{"class":149,"line":150},[147,134466,134467],{"class":458},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[147,134469,134470,134473],{"class":149,"line":312},[147,134471,134472],{"class":2237},".icon",[147,134474,15845],{"class":157},[147,134476,134477,134479,134481,134483,134485],{"class":149,"line":1454},[147,134478,70841],{"class":448},[147,134480,51710],{"class":157},[147,134482,1099],{"class":448},[147,134484,51765],{"class":397},[147,134486,1565],{"class":157},[147,134488,134489,134491,134493,134495,134497],{"class":149,"line":1469},[147,134490,71061],{"class":448},[147,134492,51710],{"class":157},[147,134494,1099],{"class":448},[147,134496,51765],{"class":397},[147,134498,1565],{"class":157},[147,134500,134501,134503,134505,134507,134509,134512,134514,134516],{"class":149,"line":1475},[147,134502,70884],{"class":448},[147,134504,51710],{"class":157},[147,134506,61999],{"class":448},[147,134508,401],{"class":157},[147,134510,134511],{"class":5490},"sprites.png",[147,134513,13988],{"class":157},[147,134515,62009],{"class":448},[147,134517,1565],{"class":157},[147,134519,134520,134522,134524,134526,134528,134531,134533],{"class":149,"line":1489},[147,134521,128975],{"class":448},[147,134523,51710],{"class":157},[147,134525,52036],{"class":448},[147,134527,51765],{"class":397},[147,134529,134530],{"class":448}," -20",[147,134532,51765],{"class":397},[147,134534,1565],{"class":157},[147,134536,134537],{"class":149,"line":1495},[147,134538,1839],{"class":157},[29,134540],{"style":31,"src":134541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,134543,134544],{},"在前端中坐标轴的正方向是右和下",[14,134546,134548],{"id":134547},"_123-字体图标","12.3 字体图标",[367,134550,134552],{"id":134551},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,134554,134555],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,134557,134558],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,134560,134561],{},"1.图片文件还是比较大的。",[19,134563,134564],{},"2.图片本身放大和缩小会失真。",[19,134566,134567],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,134569,134570,134571,26014],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[234,134572,134573],{},"字体图标 iconfont",[19,134575,134576,134579,134580,28659],{},[234,134577,134578],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[234,134581,134582],{},"展示的是图标，本质属于字体",[367,134584,134586],{"id":134585},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1406,134588,134589,134594,134597,134600,134603],{},[353,134590,134591,134593],{},[234,134592,26150],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[353,134595,134596],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[353,134598,134599],{},"兼容性：几乎支持所有的浏览器，请放心使用",[353,134601,134602],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[353,134604,134605],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[367,134607,134609],{"id":134608},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1406,134611,134612],{},[353,134613,134614,134615],{},"icomoon字体库：",[637,134616,134619],{"href":134617,"rel":134618},"http:\u002F\u002Ficomoon.io\u002F",[24138],"http:\u002F\u002Ficomoon.io",[19,134621,134622],{},"进去之后点icomoon app",[29,134624],{"style":31,"src":134625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,134627,134628],{},"可以对其编辑：",[29,134630],{"style":31,"src":134631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,134633,134634],{},"生成字体：",[29,134636],{"style":31,"src":134637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,134639,134640],{},"下载：",[29,134642],{"style":31,"src":134643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1406,134645,134646],{},[353,134647,134648,134649],{},"阿里iconfont字体库： ",[637,134650,134651],{"href":134651,"rel":134652},"http:\u002F\u002Fwww.iconfont.cn\u002F",[24138],[367,134654,134656],{"id":134655},"_1234-字体图标的引入","12.3.4 字体图标的引入",[350,134658,134659],{},[353,134660,134661,134662,134665],{},"把下载包里面的 ",[234,134663,134664],{},"fonts"," 文件夹放入页面根目录下",[29,134667],{"style":31,"src":134668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[350,134670,134671],{"start":312},[353,134672,134673],{},"字体文件格式",[537,134675,134676,134685],{},[540,134677,134678],{},[543,134679,134680,134683],{},[546,134681,134682],{"align":24009},"格式",[546,134684,24013],{"align":24009},[583,134686,134687,134697,134707,134717],{},[543,134688,134689,134694],{},[588,134690,134691],{"align":24009},[234,134692,134693],{},".ttf",[588,134695,134696],{"align":24009},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[543,134698,134699,134704],{},[588,134700,134701],{"align":24009},[234,134702,134703],{},".woff",[588,134705,134706],{"align":24009},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[543,134708,134709,134714],{},[588,134710,134711],{"align":24009},[234,134712,134713],{},".eot",[588,134715,134716],{"align":24009},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[543,134718,134719,134724],{},[588,134720,134721],{"align":24009},[234,134722,134723],{},"svg",[588,134725,134726],{"align":24009},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[350,134728,134729],{"start":1454},[353,134730,134731],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[138,134733,134735],{"className":140,"code":134734,"language":142,"meta":143,"style":143},"\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",[51,134736,134737,134742,134749,134761,134777,134802,134823,134843,134863,134867,134873,134883,134894],{"__ignoreMap":143},[147,134738,134739],{"class":149,"line":150},[147,134740,134741],{"class":458},"\u002F* 引入字体图标 *\u002F\n",[147,134743,134744,134747],{"class":149,"line":312},[147,134745,134746],{"class":397},"@font-face",[147,134748,15845],{"class":157},[147,134750,134751,134754,134756,134759],{"class":149,"line":1454},[147,134752,134753],{"class":448},"  font-family",[147,134755,51710],{"class":157},[147,134757,134758],{"class":504},"'icomoon'",[147,134760,1565],{"class":157},[147,134762,134763,134766,134768,134770,134772,134775],{"class":149,"line":1469},[147,134764,134765],{"class":448},"  src",[147,134767,51710],{"class":157},[147,134769,61999],{"class":448},[147,134771,401],{"class":157},[147,134773,134774],{"class":504},"'fonts\u002Ficomoon.eot'",[147,134776,2993],{"class":157},[147,134778,134779,134781,134783,134785,134787,134790,134792,134795,134797,134800],{"class":149,"line":1475},[147,134780,134765],{"class":448},[147,134782,51710],{"class":157},[147,134784,61999],{"class":448},[147,134786,401],{"class":157},[147,134788,134789],{"class":504},"'fonts\u002Ficomoon.eot?#iefix'",[147,134791,13988],{"class":157},[147,134793,134794],{"class":448},"format",[147,134796,401],{"class":157},[147,134798,134799],{"class":504},"'embedded-opentype'",[147,134801,38321],{"class":157},[147,134803,134804,134807,134809,134812,134814,134816,134818,134821],{"class":149,"line":1489},[147,134805,134806],{"class":448},"       url",[147,134808,401],{"class":157},[147,134810,134811],{"class":504},"'fonts\u002Ficomoon.woff'",[147,134813,13988],{"class":157},[147,134815,134794],{"class":448},[147,134817,401],{"class":157},[147,134819,134820],{"class":504},"'woff'",[147,134822,38321],{"class":157},[147,134824,134825,134827,134829,134832,134834,134836,134838,134841],{"class":149,"line":1495},[147,134826,134806],{"class":448},[147,134828,401],{"class":157},[147,134830,134831],{"class":504},"'fonts\u002Ficomoon.ttf'",[147,134833,13988],{"class":157},[147,134835,134794],{"class":448},[147,134837,401],{"class":157},[147,134839,134840],{"class":504},"'truetype'",[147,134842,38321],{"class":157},[147,134844,134845,134847,134849,134852,134854,134856,134858,134861],{"class":149,"line":1586},[147,134846,134806],{"class":448},[147,134848,401],{"class":157},[147,134850,134851],{"class":504},"'fonts\u002Ficomoon.svg#icomoon'",[147,134853,13988],{"class":157},[147,134855,134794],{"class":448},[147,134857,401],{"class":157},[147,134859,134860],{"class":504},"'svg'",[147,134862,2993],{"class":157},[147,134864,134865],{"class":149,"line":1592},[147,134866,1839],{"class":157},[147,134868,134869,134871],{"class":149,"line":1604},[147,134870,134472],{"class":2237},[147,134872,15845],{"class":157},[147,134874,134875,134877,134879,134881],{"class":149,"line":1886},[147,134876,134753],{"class":448},[147,134878,51710],{"class":157},[147,134880,134758],{"class":504},[147,134882,1565],{"class":157},[147,134884,134885,134888,134890,134892],{"class":149,"line":1891},[147,134886,134887],{"class":448},"  font-style",[147,134889,51710],{"class":157},[147,134891,64114],{"class":448},[147,134893,1565],{"class":157},[147,134895,134896],{"class":149,"line":1897},[147,134897,1839],{"class":157},[19,134899,134900],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[29,134902],{"style":31,"src":134903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[350,134905,134906],{"start":1469},[353,134907,134908],{},"添加字体",[29,134910],{"style":31,"src":134911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,134913,134914],{},"复制：",[29,134916],{"style":31,"src":134917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,134919,134920],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[350,134922,134923],{"start":1475},[353,134924,134925],{},"代码展示：",[138,134927,134928],{"className":140,"code":134734,"language":142,"meta":143,"style":143},[51,134929,134930,134934,134940,134950,134964,134986,135004,135022,135040,135044,135050,135060,135070],{"__ignoreMap":143},[147,134931,134932],{"class":149,"line":150},[147,134933,134741],{"class":458},[147,134935,134936,134938],{"class":149,"line":312},[147,134937,134746],{"class":397},[147,134939,15845],{"class":157},[147,134941,134942,134944,134946,134948],{"class":149,"line":1454},[147,134943,134753],{"class":448},[147,134945,51710],{"class":157},[147,134947,134758],{"class":504},[147,134949,1565],{"class":157},[147,134951,134952,134954,134956,134958,134960,134962],{"class":149,"line":1469},[147,134953,134765],{"class":448},[147,134955,51710],{"class":157},[147,134957,61999],{"class":448},[147,134959,401],{"class":157},[147,134961,134774],{"class":504},[147,134963,2993],{"class":157},[147,134965,134966,134968,134970,134972,134974,134976,134978,134980,134982,134984],{"class":149,"line":1475},[147,134967,134765],{"class":448},[147,134969,51710],{"class":157},[147,134971,61999],{"class":448},[147,134973,401],{"class":157},[147,134975,134789],{"class":504},[147,134977,13988],{"class":157},[147,134979,134794],{"class":448},[147,134981,401],{"class":157},[147,134983,134799],{"class":504},[147,134985,38321],{"class":157},[147,134987,134988,134990,134992,134994,134996,134998,135000,135002],{"class":149,"line":1489},[147,134989,134806],{"class":448},[147,134991,401],{"class":157},[147,134993,134811],{"class":504},[147,134995,13988],{"class":157},[147,134997,134794],{"class":448},[147,134999,401],{"class":157},[147,135001,134820],{"class":504},[147,135003,38321],{"class":157},[147,135005,135006,135008,135010,135012,135014,135016,135018,135020],{"class":149,"line":1495},[147,135007,134806],{"class":448},[147,135009,401],{"class":157},[147,135011,134831],{"class":504},[147,135013,13988],{"class":157},[147,135015,134794],{"class":448},[147,135017,401],{"class":157},[147,135019,134840],{"class":504},[147,135021,38321],{"class":157},[147,135023,135024,135026,135028,135030,135032,135034,135036,135038],{"class":149,"line":1586},[147,135025,134806],{"class":448},[147,135027,401],{"class":157},[147,135029,134851],{"class":504},[147,135031,13988],{"class":157},[147,135033,134794],{"class":448},[147,135035,401],{"class":157},[147,135037,134860],{"class":504},[147,135039,2993],{"class":157},[147,135041,135042],{"class":149,"line":1592},[147,135043,1839],{"class":157},[147,135045,135046,135048],{"class":149,"line":1604},[147,135047,134472],{"class":2237},[147,135049,15845],{"class":157},[147,135051,135052,135054,135056,135058],{"class":149,"line":1886},[147,135053,134753],{"class":448},[147,135055,51710],{"class":157},[147,135057,134758],{"class":504},[147,135059,1565],{"class":157},[147,135061,135062,135064,135066,135068],{"class":149,"line":1891},[147,135063,134887],{"class":448},[147,135065,51710],{"class":157},[147,135067,64114],{"class":448},[147,135069,1565],{"class":157},[147,135071,135072],{"class":149,"line":1897},[147,135073,1839],{"class":157},[29,135075],{"style":31,"src":135076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,135078,135079],{},"更加细节展示：",[350,135081,135082],{},[353,135083,135084],{},"html 标签内添加小图标",[29,135086],{"style":31,"src":135087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[350,135089,135090],{"start":312},[353,135091,135092],{},"给标签定义字体",[138,135094,135095],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,135096,135097,135101,135115,135119],{"__ignoreMap":143},[147,135098,135099],{"class":149,"line":150},[147,135100,130826],{"class":458},[147,135102,135103,135105,135107,135109,135111,135113],{"class":149,"line":312},[147,135104,1309],{"class":157},[147,135106,51884],{"class":153},[147,135108,53759],{"class":2237},[147,135110,445],{"class":157},[147,135112,130839],{"class":504},[147,135114,51580],{"class":157},[147,135116,135117],{"class":149,"line":1454},[147,135118,130846],{"class":157},[147,135120,135121,135123,135125],{"class":149,"line":1469},[147,135122,52058],{"class":157},[147,135124,51884],{"class":153},[147,135126,51580],{"class":157},[19,135128,135129],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[29,135131],{"style":31,"src":135132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[367,135134,135136],{"id":135135},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,135138,135139],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,135141,135142,135143,135146],{},"把压缩包里面的 ",[234,135144,135145],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,135148,135149],{},"打开网站，点下方：",[29,135151],{"style":31,"src":135152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[29,135154],{"style":31,"src":135155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[29,135157],{"style":31,"src":135158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,135160,135161],{},"点yes重新加载",[19,135163,135164],{},"然后重复之前的操作就可以实现了",[19,135166,135167],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[367,135169,135171],{"id":135170},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[29,135173],{"style":31,"src":135174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[308,135176,135177],{},"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":143,"searchDepth":312,"depth":312,"links":135179},[135180,135186,135191],{"id":133783,"depth":312,"text":133784,"children":135181},[135182,135183,135184,135185],{"id":133795,"depth":1454,"text":133796},{"id":133824,"depth":1454,"text":133825},{"id":133852,"depth":1454,"text":133853},{"id":133910,"depth":1454,"text":133911},{"id":134382,"depth":312,"text":134383,"children":135187},[135188,135189,135190],{"id":134386,"depth":1454,"text":134387},{"id":134431,"depth":1454,"text":134432},{"id":134447,"depth":1454,"text":134448},{"id":134547,"depth":312,"text":134548,"children":135192},[135193,135194,135195,135196,135197,135198],{"id":134551,"depth":1454,"text":134552},{"id":134585,"depth":1454,"text":134586},{"id":134608,"depth":1454,"text":134609},{"id":134655,"depth":1454,"text":134656},{"id":135135,"depth":1454,"text":135136},{"id":135170,"depth":1454,"text":135171},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133775,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135205,"title":135206,"body":135207,"description":321,"extension":322,"meta":136434,"navigation":324,"path":136435,"seo":136436,"stem":136437,"__hash__":136438},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135208,"toc":136415},[135209,135212,135216,135219,135233,135301,135331,135334,135338,135342,135444,135491,135495,135498,135501,135535,135538,135541,135544,135547,135550,135553,135556,135558,135561,135564,135567,135570,135573,135576,135579,135607,135610,135614,135617,135624,135627,135630,135656,135659,135663,135666,135669,135676,135680,135683,135685,135717,135720,135723,135735,135741,135744,135747,135750,135752,135756,135759,135762,135765,135810,135814,135816,135819,135826,135868,135871,135875,135880,135894,135898,135901,135904,135907,135910,135913,135947,135950,135953,136007,136010,136013,136016,136019,136071,136074,136077,136126,136130,136132,136135,136138,136141,136144,136147,136205,136208,136214,136217,136220,136252,136255,136259,136263,136266,136298,136302,136305,136349,136353,136356,136359,136362,136365,136368,136371,136374,136376,136379,136381,136384,136387,136390,136393,136398,136401,136403,136406,136409,136412],[10,135210,135206],{"id":135211},"_13-界面样式与布局技巧",[14,135213,135215],{"id":135214},"_131-css三角","13.1 css三角",[19,135217,135218],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1406,135220,135221,135224,135227,135230],{},[353,135222,135223],{},"用css 边框可以模拟三角效果",[353,135225,135226],{},"宽度高度为0",[353,135228,135229],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[353,135231,135232],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[138,135234,135236],{"className":140,"code":135235,"language":142,"meta":143,"style":143},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[51,135237,135238,135243,135250,135260,135270,135286,135297],{"__ignoreMap":143},[147,135239,135240],{"class":149,"line":150},[147,135241,135242],{"class":458},"\u002F* CSS 实现三角形 *\u002F\n",[147,135244,135245,135248],{"class":149,"line":312},[147,135246,135247],{"class":2237},".triangle",[147,135249,15845],{"class":157},[147,135251,135252,135254,135256,135258],{"class":149,"line":1454},[147,135253,70841],{"class":448},[147,135255,51710],{"class":157},[147,135257,590],{"class":448},[147,135259,1565],{"class":157},[147,135261,135262,135264,135266,135268],{"class":149,"line":1469},[147,135263,71061],{"class":448},[147,135265,51710],{"class":157},[147,135267,590],{"class":448},[147,135269,1565],{"class":157},[147,135271,135272,135274,135276,135278,135280,135282,135284],{"class":149,"line":1475},[147,135273,71169],{"class":448},[147,135275,51710],{"class":157},[147,135277,845],{"class":448},[147,135279,51765],{"class":397},[147,135281,51794],{"class":448},[147,135283,64264],{"class":448},[147,135285,1565],{"class":157},[147,135287,135288,135291,135293,135295],{"class":149,"line":1489},[147,135289,135290],{"class":448},"  border-bottom-color",[147,135292,51710],{"class":157},[147,135294,62642],{"class":448},[147,135296,1565],{"class":157},[147,135298,135299],{"class":149,"line":1495},[147,135300,1839],{"class":157},[138,135302,135303],{"className":140,"code":130872,"language":142,"meta":143,"style":143},[51,135304,135305,135311,135327],{"__ignoreMap":143},[147,135306,135307,135309],{"class":149,"line":150},[147,135308,51884],{"class":153},[147,135310,15845],{"class":157},[147,135312,135313,135315,135317,135319,135321,135323,135325],{"class":149,"line":312},[147,135314,71169],{"class":448},[147,135316,51710],{"class":157},[147,135318,616],{"class":448},[147,135320,51765],{"class":397},[147,135322,51794],{"class":448},[147,135324,130107],{"class":448},[147,135326,1565],{"class":157},[147,135328,135329],{"class":149,"line":1454},[147,135330,1839],{"class":157},[29,135332],{"style":31,"src":135333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,135335,135337],{"id":135336},"_132-css用户界面样式","13.2 css用户界面样式",[367,135339,135341],{"id":135340},"_1321-鼠标样式","13.2.1 鼠标样式",[138,135343,135345],{"className":140,"code":135344,"language":142,"meta":143,"style":143},"\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",[51,135346,135347,135352,135371,135389,135408,135425],{"__ignoreMap":143},[147,135348,135349],{"class":149,"line":150},[147,135350,135351],{"class":458},"\u002F* 鼠标样式 *\u002F\n",[147,135353,135354,135356,135358,135361,135363,135365,135368],{"class":149,"line":312},[147,135355,51884],{"class":153},[147,135357,80079],{"class":157},[147,135359,135360],{"class":448},"cursor",[147,135362,51710],{"class":157},[147,135364,62303],{"class":448},[147,135366,135367],{"class":157},"; }   ",[147,135369,135370],{"class":458},"\u002F* 手型 *\u002F\n",[147,135372,135373,135375,135377,135379,135381,135384,135386],{"class":149,"line":1454},[147,135374,51884],{"class":153},[147,135376,80079],{"class":157},[147,135378,135360],{"class":448},[147,135380,51710],{"class":157},[147,135382,135383],{"class":448},"default",[147,135385,135367],{"class":157},[147,135387,135388],{"class":458},"\u002F* 默认 *\u002F\n",[147,135390,135391,135393,135395,135397,135399,135402,135405],{"class":149,"line":1469},[147,135392,51884],{"class":153},[147,135394,80079],{"class":157},[147,135396,135360],{"class":448},[147,135398,51710],{"class":157},[147,135400,135401],{"class":448},"move",[147,135403,135404],{"class":157},"; }      ",[147,135406,135407],{"class":458},"\u002F* 移动 *\u002F\n",[147,135409,135410,135412,135414,135416,135418,135420,135422],{"class":149,"line":1475},[147,135411,51884],{"class":153},[147,135413,80079],{"class":157},[147,135415,135360],{"class":448},[147,135417,51710],{"class":157},[147,135419,5461],{"class":448},[147,135421,135404],{"class":157},[147,135423,135424],{"class":458},"\u002F* 文本 *\u002F\n",[147,135426,135427,135429,135431,135433,135435,135438,135441],{"class":149,"line":1489},[147,135428,51884],{"class":153},[147,135430,80079],{"class":157},[147,135432,135360],{"class":448},[147,135434,51710],{"class":157},[147,135436,135437],{"class":448},"not-allowed",[147,135439,135440],{"class":157},"; } ",[147,135442,135443],{"class":458},"\u002F* 禁止 *\u002F\n",[537,135445,135446,135454],{},[540,135447,135448],{},[543,135449,135450,135452],{},[546,135451,127179],{"align":24009},[546,135453,27763],{"align":24009},[583,135455,135456,135463,135470,135477,135484],{},[543,135457,135458,135460],{},[588,135459,135383],{"align":24009},[588,135461,135462],{"align":24009},"小白 默认",[543,135464,135465,135467],{},[588,135466,62303],{"align":24009},[588,135468,135469],{"align":24009},"小手",[543,135471,135472,135474],{},[588,135473,135401],{"align":24009},[588,135475,135476],{"align":24009},"移动",[543,135478,135479,135481],{},[588,135480,5461],{"align":24009},[588,135482,135483],{"align":24009},"文本",[543,135485,135486,135488],{},[588,135487,135437],{"align":24009},[588,135489,135490],{"align":24009},"禁止",[367,135492,135494],{"id":135493},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,135496,135497],{},"去除表单轮廓线",[19,135499,135500],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[138,135502,135503],{"className":140,"code":130079,"language":142,"meta":143,"style":143},[51,135504,135505,135509,135515,135531],{"__ignoreMap":143},[147,135506,135507],{"class":149,"line":150},[147,135508,130086],{"class":458},[147,135510,135511,135513],{"class":149,"line":312},[147,135512,51884],{"class":153},[147,135514,15845],{"class":157},[147,135516,135517,135519,135521,135523,135525,135527,135529],{"class":149,"line":1454},[147,135518,71169],{"class":448},[147,135520,51710],{"class":157},[147,135522,616],{"class":448},[147,135524,51765],{"class":397},[147,135526,51794],{"class":448},[147,135528,130107],{"class":448},[147,135530,1565],{"class":157},[147,135532,135533],{"class":149,"line":1469},[147,135534,1839],{"class":157},[19,135536,135537],{},"文本域：",[29,135539],{"style":31,"src":135540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,135542,135543],{},"此时会有一个空白区域",[29,135545],{"style":31,"src":135546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,135548,135549],{},"写在同一行就不会出现这个问题",[29,135551],{"style":31,"src":135552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,135554,135555],{},"文本域是行内块元素，一定记住！！！",[19,135557,98505],{},[29,135559],{"style":31,"src":135560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,135562,135563],{},"文本域尽量放在一行",[19,135565,135566],{},"知识回顾：cols是列，rols是行",[29,135568],{"style":31,"src":135569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,135571,135572],{},"它可以进行拖动，显然这是我们不愿意看到的",[29,135574],{"style":31,"src":135575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,135577,135578],{},"使用resize进行解决",[138,135580,135582],{"className":140,"code":135581,"language":142,"meta":143,"style":143},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[51,135583,135584,135590,135603],{"__ignoreMap":143},[147,135585,135586,135588],{"class":149,"line":150},[147,135587,54094],{"class":153},[147,135589,15845],{"class":157},[147,135591,135592,135594,135596,135598,135600],{"class":149,"line":312},[147,135593,71071],{"class":448},[147,135595,51710],{"class":157},[147,135597,55010],{"class":448},[147,135599,130578],{"class":157},[147,135601,135602],{"class":458},"\u002F* 取消表单轮廓线 *\u002F\n",[147,135604,135605],{"class":149,"line":1454},[147,135606,1839],{"class":157},[19,135608,135609],{},"此时就无法通过右下方实现拖动了",[367,135611,135613],{"id":135612},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,135615,135616],{},"实现一个盒子中的文字和图片对齐",[19,135618,135619,135620,135623],{},"用于设置一个元素的 ",[234,135621,135622],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,135625,135626],{},"图片和文字默认是基线对齐",[29,135628],{"style":31,"src":135629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[138,135631,135632],{"className":140,"code":135581,"language":142,"meta":143,"style":143},[51,135633,135634,135640,135652],{"__ignoreMap":143},[147,135635,135636,135638],{"class":149,"line":150},[147,135637,54094],{"class":153},[147,135639,15845],{"class":157},[147,135641,135642,135644,135646,135648,135650],{"class":149,"line":312},[147,135643,71071],{"class":448},[147,135645,51710],{"class":157},[147,135647,55010],{"class":448},[147,135649,130578],{"class":157},[147,135651,135602],{"class":458},[147,135653,135654],{"class":149,"line":1454},[147,135655,1839],{"class":157},[29,135657],{"style":31,"src":135658},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22271,135660,135662],{"id":135661},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,135664,135665],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[29,135667],{"style":31,"src":135668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,135670,135671,135672,135675],{},"此时可以给图片、表单这些行内块元素的 ",[234,135673,135674],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22271,135677,135679],{"id":135678},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,135681,135682],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,135684,14906],{},[138,135686,135688],{"className":140,"code":135687,"language":142,"meta":143,"style":143},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[51,135689,135690,135695,135701,135713],{"__ignoreMap":143},[147,135691,135692],{"class":149,"line":150},[147,135693,135694],{"class":458},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[147,135696,135697,135699],{"class":149,"line":312},[147,135698,29],{"class":153},[147,135700,15845],{"class":157},[147,135702,135703,135706,135708,135711],{"class":149,"line":1454},[147,135704,135705],{"class":448},"  vertical-align",[147,135707,51710],{"class":157},[147,135709,135710],{"class":448},"middle",[147,135712,1565],{"class":157},[147,135714,135715],{"class":149,"line":1469},[147,135716,1839],{"class":157},[29,135718],{"style":31,"src":135719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,135721,135722],{},"主要解决方法有两种：",[350,135724,135725],{},[353,135726,135727,135730,135731,135734],{},[234,135728,135729],{},"给图片"," 添加 ",[234,135732,135733],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,135736,135737,135738],{},"2.把图片转换为块级元素 ",[234,135739,135740],{},"display: block",[19,135742,135743],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,135745,135746],{},"img {",[19,135748,135749],{},"vertical-align:middle;",[19,135751,1345],{},[367,135753,135755],{"id":135754},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,135757,135758],{},"效果：",[29,135760],{"style":31,"src":135761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,135763,135764],{},"单行文本溢出显示省略号--必须满足三个条件：",[138,135766,135768],{"className":140,"code":135767,"language":142,"meta":143,"style":143},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[51,135769,135770,135775,135781,135791,135796,135806],{"__ignoreMap":143},[147,135771,135772],{"class":149,"line":150},[147,135773,135774],{"class":458},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[147,135776,135777,135779],{"class":149,"line":312},[147,135778,29],{"class":153},[147,135780,15845],{"class":157},[147,135782,135783,135785,135787,135789],{"class":149,"line":1454},[147,135784,135705],{"class":448},[147,135786,51710],{"class":157},[147,135788,135710],{"class":448},[147,135790,1565],{"class":157},[147,135792,135793],{"class":149,"line":1469},[147,135794,135795],{"class":458},"  \u002F* 或 *\u002F\n",[147,135797,135798,135800,135802,135804],{"class":149,"line":1475},[147,135799,128331],{"class":448},[147,135801,51710],{"class":157},[147,135803,61142],{"class":448},[147,135805,1565],{"class":157},[147,135807,135808],{"class":149,"line":1489},[147,135809,1839],{"class":157},[367,135811,135813],{"id":135812},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,135815,135758],{},[29,135817],{"style":31,"src":135818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,135820,135821,135822,135825],{},"多行文本溢出显示省略号， ",[234,135823,135824],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[138,135827,135828],{"className":140,"code":135767,"language":142,"meta":143,"style":143},[51,135829,135830,135834,135840,135850,135854,135864],{"__ignoreMap":143},[147,135831,135832],{"class":149,"line":150},[147,135833,135774],{"class":458},[147,135835,135836,135838],{"class":149,"line":312},[147,135837,29],{"class":153},[147,135839,15845],{"class":157},[147,135841,135842,135844,135846,135848],{"class":149,"line":1454},[147,135843,135705],{"class":448},[147,135845,51710],{"class":157},[147,135847,135710],{"class":448},[147,135849,1565],{"class":157},[147,135851,135852],{"class":149,"line":1469},[147,135853,135795],{"class":458},[147,135855,135856,135858,135860,135862],{"class":149,"line":1475},[147,135857,128331],{"class":448},[147,135859,51710],{"class":157},[147,135861,61142],{"class":448},[147,135863,1565],{"class":157},[147,135865,135866],{"class":149,"line":1489},[147,135867,1839],{"class":157},[19,135869,135870],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,135872,135874],{"id":135873},"_133-常见布局技巧","13.3 常见布局技巧",[19,135876,135877],{},[234,135878,135879],{},"巧妙利用一个技术更快更好的布局：",[350,135881,135882,135885,135888,135891],{},[353,135883,135884],{},"margin负值的运用",[353,135886,135887],{},"文字围绕浮动元素",[353,135889,135890],{},"行内块的巧妙运用",[353,135892,135893],{},"CSS三角强化",[367,135895,135897],{"id":135896},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,135899,135900],{},"应用场景：",[29,135902],{"style":31,"src":135903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[29,135905],{"style":31,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,135908,135909],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,135911,135912],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[138,135914,135915],{"className":140,"code":130079,"language":142,"meta":143,"style":143},[51,135916,135917,135921,135927,135943],{"__ignoreMap":143},[147,135918,135919],{"class":149,"line":150},[147,135920,130086],{"class":458},[147,135922,135923,135925],{"class":149,"line":312},[147,135924,51884],{"class":153},[147,135926,15845],{"class":157},[147,135928,135929,135931,135933,135935,135937,135939,135941],{"class":149,"line":1454},[147,135930,71169],{"class":448},[147,135932,51710],{"class":157},[147,135934,616],{"class":448},[147,135936,51765],{"class":397},[147,135938,51794],{"class":448},[147,135940,130107],{"class":448},[147,135942,1565],{"class":157},[147,135944,135945],{"class":149,"line":1469},[147,135946,1839],{"class":157},[29,135948],{"style":31,"src":135949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,135951,135952],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[138,135954,135956],{"className":140,"code":135955,"language":142,"meta":143,"style":143},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[51,135957,135958,135963,135969,135979,135991,136003],{"__ignoreMap":143},[147,135959,135960],{"class":149,"line":150},[147,135961,135962],{"class":458},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[147,135964,135965,135967],{"class":149,"line":312},[147,135966,130563],{"class":2237},[147,135968,15845],{"class":157},[147,135970,135971,135973,135975,135977],{"class":149,"line":1454},[147,135972,132521],{"class":448},[147,135974,51710],{"class":157},[147,135976,55037],{"class":448},[147,135978,1565],{"class":157},[147,135980,135981,135983,135985,135987,135989],{"class":149,"line":1469},[147,135982,132535],{"class":448},[147,135984,51710],{"class":157},[147,135986,845],{"class":448},[147,135988,51765],{"class":397},[147,135990,1565],{"class":157},[147,135992,135993,135995,135997,135999,136001],{"class":149,"line":1475},[147,135994,132552],{"class":448},[147,135996,51710],{"class":157},[147,135998,1099],{"class":448},[147,136000,51765],{"class":397},[147,136002,1565],{"class":157},[147,136004,136005],{"class":149,"line":1489},[147,136006,1839],{"class":157},[19,136008,136009],{},"加上上述代码会发现：",[29,136011],{"style":31,"src":136012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,136014,136015],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,136017,136018],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[138,136020,136021],{"className":140,"code":135955,"language":142,"meta":143,"style":143},[51,136022,136023,136027,136033,136043,136055,136067],{"__ignoreMap":143},[147,136024,136025],{"class":149,"line":150},[147,136026,135962],{"class":458},[147,136028,136029,136031],{"class":149,"line":312},[147,136030,130563],{"class":2237},[147,136032,15845],{"class":157},[147,136034,136035,136037,136039,136041],{"class":149,"line":1454},[147,136036,132521],{"class":448},[147,136038,51710],{"class":157},[147,136040,55037],{"class":448},[147,136042,1565],{"class":157},[147,136044,136045,136047,136049,136051,136053],{"class":149,"line":1469},[147,136046,132535],{"class":448},[147,136048,51710],{"class":157},[147,136050,845],{"class":448},[147,136052,51765],{"class":397},[147,136054,1565],{"class":157},[147,136056,136057,136059,136061,136063,136065],{"class":149,"line":1475},[147,136058,132552],{"class":448},[147,136060,51710],{"class":157},[147,136062,1099],{"class":448},[147,136064,51765],{"class":397},[147,136066,1565],{"class":157},[147,136068,136069],{"class":149,"line":1489},[147,136070,1839],{"class":157},[19,136072,136073],{},"解决方式2：",[19,136075,136076],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[138,136078,136080],{"className":140,"code":136079,"language":142,"meta":143,"style":143},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[51,136081,136082,136088,136098,136110,136122],{"__ignoreMap":143},[147,136083,136084,136086],{"class":149,"line":150},[147,136085,51884],{"class":153},[147,136087,15845],{"class":157},[147,136089,136090,136092,136094,136096],{"class":149,"line":312},[147,136091,132521],{"class":448},[147,136093,51710],{"class":157},[147,136095,55037],{"class":448},[147,136097,1565],{"class":157},[147,136099,136100,136102,136104,136106,136108],{"class":149,"line":1454},[147,136101,132535],{"class":448},[147,136103,51710],{"class":157},[147,136105,845],{"class":448},[147,136107,51765],{"class":397},[147,136109,1565],{"class":157},[147,136111,136112,136114,136116,136118,136120],{"class":149,"line":1469},[147,136113,132552],{"class":448},[147,136115,51710],{"class":157},[147,136117,1099],{"class":448},[147,136119,51765],{"class":397},[147,136121,1565],{"class":157},[147,136123,136124],{"class":149,"line":1475},[147,136125,1839],{"class":157},[367,136127,136129],{"id":136128},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,136131,135900],{},[29,136133],{"style":31,"src":136134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,136136,136137],{},"实现结构图：",[29,136139],{"style":31,"src":136140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,136142,136143],{},"巧妙运用浮动元素不会压住文字的特性",[19,136145,136146],{},"代码显示：",[138,136148,136150],{"className":140,"code":136149,"language":142,"meta":143,"style":143},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[51,136151,136152,136158,136168,136172,136177,136181,136187,136201],{"__ignoreMap":143},[147,136153,136154,136156],{"class":149,"line":150},[147,136155,130563],{"class":2237},[147,136157,15845],{"class":157},[147,136159,136160,136162,136164,136166],{"class":149,"line":312},[147,136161,131195],{"class":448},[147,136163,51710],{"class":157},[147,136165,24009],{"class":448},[147,136167,1565],{"class":157},[147,136169,136170],{"class":149,"line":1454},[147,136171,1839],{"class":157},[147,136173,136174],{"class":149,"line":1469},[147,136175,136176],{"class":157},"```Css\n",[147,136178,136179],{"class":149,"line":1475},[147,136180,130558],{"class":458},[147,136182,136183,136185],{"class":149,"line":1489},[147,136184,130563],{"class":2237},[147,136186,15845],{"class":157},[147,136188,136189,136191,136193,136195,136197,136199],{"class":149,"line":1495},[147,136190,70743],{"class":448},[147,136192,51710],{"class":157},[147,136194,590],{"class":448},[147,136196,51829],{"class":448},[147,136198,130578],{"class":157},[147,136200,130581],{"class":458},[147,136202,136203],{"class":149,"line":1586},[147,136204,1839],{"class":157},[19,136206,136207],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[138,136209,136212],{"className":136210,"code":136211,"language":5461},[5459],"\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",[51,136213,136211],{"__ignoreMap":143},[29,136215],{"style":31,"src":136216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,136218,136219],{},"最终展示结果：",[138,136221,136222],{"className":140,"code":130551,"language":142,"meta":143,"style":143},[51,136223,136224,136228,136234,136248],{"__ignoreMap":143},[147,136225,136226],{"class":149,"line":150},[147,136227,130558],{"class":458},[147,136229,136230,136232],{"class":149,"line":312},[147,136231,130563],{"class":2237},[147,136233,15845],{"class":157},[147,136235,136236,136238,136240,136242,136244,136246],{"class":149,"line":1454},[147,136237,70743],{"class":448},[147,136239,51710],{"class":157},[147,136241,590],{"class":448},[147,136243,51829],{"class":448},[147,136245,130578],{"class":157},[147,136247,130581],{"class":458},[147,136249,136250],{"class":149,"line":1469},[147,136251,1839],{"class":157},[29,136253],{"style":31,"src":136254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,136256,136258],{"id":136257},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[367,136260,136262],{"id":136261},"_1341-原理","13.4.1 原理",[29,136264],{"style":31,"src":136265},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[138,136267,136268],{"className":140,"code":130551,"language":142,"meta":143,"style":143},[51,136269,136270,136274,136280,136294],{"__ignoreMap":143},[147,136271,136272],{"class":149,"line":150},[147,136273,130558],{"class":458},[147,136275,136276,136278],{"class":149,"line":312},[147,136277,130563],{"class":2237},[147,136279,15845],{"class":157},[147,136281,136282,136284,136286,136288,136290,136292],{"class":149,"line":1454},[147,136283,70743],{"class":448},[147,136285,51710],{"class":157},[147,136287,590],{"class":448},[147,136289,51829],{"class":448},[147,136291,130578],{"class":157},[147,136293,130581],{"class":458},[147,136295,136296],{"class":149,"line":1469},[147,136297,1839],{"class":157},[367,136299,136301],{"id":136300},"_1342-实例","13.4.2 实例",[29,136303],{"style":31,"src":136304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[138,136306,136307],{"className":140,"code":131181,"language":142,"meta":143,"style":143},[51,136308,136309,136315,136325,136329,136335,136345],{"__ignoreMap":143},[147,136310,136311,136313],{"class":149,"line":150},[147,136312,131188],{"class":2237},[147,136314,15845],{"class":157},[147,136316,136317,136319,136321,136323],{"class":149,"line":312},[147,136318,131195],{"class":448},[147,136320,51710],{"class":157},[147,136322,24009],{"class":448},[147,136324,1565],{"class":157},[147,136326,136327],{"class":149,"line":1454},[147,136328,1839],{"class":157},[147,136330,136331,136333],{"class":149,"line":1469},[147,136332,131210],{"class":2237},[147,136334,15845],{"class":157},[147,136336,136337,136339,136341,136343],{"class":149,"line":1475},[147,136338,131195],{"class":448},[147,136340,51710],{"class":157},[147,136342,72795],{"class":448},[147,136344,1565],{"class":157},[147,136346,136347],{"class":149,"line":1489},[147,136348,1839],{"class":157},[14,136350,136352],{"id":136351},"_135-css的初始化","13.5 css的初始化",[19,136354,136355],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,136357,136358],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,136360,136361],{},"每个网页都必须首先进行 CSS初始化。",[19,136363,136364],{},"这里我们以 京东CSS初始化代码为例。",[19,136366,136367],{},"在网页右键查看网页源代码",[19,136369,136370],{},"找到css的link引入语句",[19,136372,136373],{},"然后ctrl+f 输入body",[19,136375,205],{},[29,136377],{"style":31,"src":136378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,136380,77521],{},[29,136382],{"style":31,"src":136383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,136385,136386],{},"③打开了网页上传压缩的代码",[29,136388],{"style":31,"src":136389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,136391,136392],{},"④从body前可以查看这个网页的初始化代码",[19,136394,136395],{},[234,136396,136397],{},"Unicode编码字体：",[19,136399,136400],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,136402,83479],{},[19,136404,136405],{},"黑体 \\9ED1\\4F53",[19,136407,136408],{},"宋体 \\5B8B\\4F53",[19,136410,136411],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[308,136413,136414],{},"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":143,"searchDepth":312,"depth":312,"links":136416},[136417,136418,136425,136429,136433],{"id":135214,"depth":312,"text":135215},{"id":135336,"depth":312,"text":135337,"children":136419},[136420,136421,136422,136423,136424],{"id":135340,"depth":1454,"text":135341},{"id":135493,"depth":1454,"text":135494},{"id":135612,"depth":1454,"text":135613},{"id":135754,"depth":1454,"text":135755},{"id":135812,"depth":1454,"text":135813},{"id":135873,"depth":312,"text":135874,"children":136426},[136427,136428],{"id":135896,"depth":1454,"text":135897},{"id":136128,"depth":1454,"text":136129},{"id":136257,"depth":312,"text":136258,"children":136430},[136431,136432],{"id":136261,"depth":1454,"text":136262},{"id":136300,"depth":1454,"text":136301},{"id":136351,"depth":312,"text":136352},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135206,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136440,"title":136441,"body":136442,"description":321,"extension":322,"meta":138128,"navigation":324,"path":138129,"seo":138130,"stem":138131,"__hash__":138132},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136443,"toc":138117},[136444,136447,136451,136455,136458,136465,136468,136471,136509,136512,136514,136528,136532,136541,136545,136550,136553,136556,136559,136594,136599,136602,136632,136635,136640,136643,136646,136676,136679,136733,136736,136740,136745,136757,136760,136764,136794,136797,136802,136805,136835,136838,136842,136859,136863,136867,136870,136903,136906,136910,136913,136916,136919,136922,136925,137036,137039,137042,137045,137147,137150,137154,137158,137162,137165,137205,137208,137210,137226,137230,137233,137238,137319,137322,137325,137451,137456,137459,137467,137470,137475,137560,137563,137567,137570,137573,137577,137597,137602,137686,137689,137694,137697,137700,137778,137781,137784,137787,137790,137793,137798,137801,137804,137876,137879,137884,137887,137984,137987,137993,137996,137999,138002,138005,138008,138011,138014,138017,138021,138026,138029,138062,138067,138070,138111,138114],[10,136445,136441],{"id":136446},"_14-html5与css3新特性",[14,136448,136450],{"id":136449},"_141-html5的新特性","14.1 HTML5的新特性",[367,136452,136454],{"id":136453},"_1411-基本标签","14.1.1 基本标签",[19,136456,136457],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,136459,136460,136461,136464],{},"这些新特性都有兼容性问题，基本是 ",[234,136462,136463],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,136466,136467],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,136469,136470],{},"现在使用的是新特性：",[1406,136472,136473,136479,136485,136491,136497,136503],{},[353,136474,136475,136478],{},[51,136476,136477],{},"\u003Cheader>"," 头部标签",[353,136480,136481,136484],{},[51,136482,136483],{},"\u003Cnav>"," 导航标签",[353,136486,136487,136490],{},[51,136488,136489],{},"\u003Carticle>"," 内容标签",[353,136492,136493,136496],{},[51,136494,136495],{},"\u003Csection>"," 定义文档某个区域",[353,136498,136499,136502],{},[51,136500,136501],{},"\u003Caside>"," 侧边栏标签",[353,136504,136505,136508],{},[51,136506,136507],{},"\u003Cfooter>"," 尾部标签",[29,136510],{"style":31,"src":136511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,136513,248],{},[1406,136515,136516,136519,136522,136525],{},[353,136517,136518],{},"这种语义化标准主要是针对搜索引擎的",[353,136520,136521],{},"这些标签页面中可以经常使用",[353,136523,136524],{},"在IE9中，需要把这些元素转换为块级元素",[353,136526,136527],{},"移动端更喜欢使用这些标签",[367,136529,136531],{"id":136530},"_1412-多媒体标签","14.1.2 多媒体标签",[19,136533,136534,136535,136537,136538,136540],{},"音频 ",[234,136536,28448],{}," 和视频 ",[234,136539,28457],{}," 两个标签",[22271,136542,136544],{"id":136543},"_14121-视频标签-video","14.1.2.1 视频标签- video",[350,136546,136547],{},[353,136548,136549],{},"支持格式：",[29,136551],{"style":31,"src":136552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,136554,136555],{},"尽量使用MP4，兼容性好",[19,136557,136558],{},"用MP4就可以",[138,136560,136562],{"className":127462,"code":136561,"language":127464,"meta":143,"style":143},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[51,136563,136564],{"__ignoreMap":143},[147,136565,136566,136568,136570,136572,136574,136577,136579,136582,136585,136588,136590,136592],{"class":149,"line":150},[147,136567,1309],{"class":157},[147,136569,28457],{"class":153},[147,136571,55512],{"class":2237},[147,136573,445],{"class":157},[147,136575,136576],{"class":504},"\"movie.mp4\"",[147,136578,92695],{"class":2237},[147,136580,136581],{"class":2237}," autoplay",[147,136583,136584],{"class":2237}," muted",[147,136586,136587],{"class":2237}," loop",[147,136589,55587],{"class":157},[147,136591,28457],{"class":153},[147,136593,51580],{"class":157},[350,136595,136596],{"start":312},[353,136597,136598],{},"兼容写法",[19,136600,136601],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[138,136603,136604],{"className":127462,"code":136561,"language":127464,"meta":143,"style":143},[51,136605,136606],{"__ignoreMap":143},[147,136607,136608,136610,136612,136614,136616,136618,136620,136622,136624,136626,136628,136630],{"class":149,"line":150},[147,136609,1309],{"class":157},[147,136611,28457],{"class":153},[147,136613,55512],{"class":2237},[147,136615,445],{"class":157},[147,136617,136576],{"class":504},[147,136619,92695],{"class":2237},[147,136621,136581],{"class":2237},[147,136623,136584],{"class":2237},[147,136625,136587],{"class":2237},[147,136627,55587],{"class":157},[147,136629,28457],{"class":153},[147,136631,51580],{"class":157},[19,136633,136634],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[350,136636,136637],{"start":1454},[353,136638,136639],{},"video常用属性",[29,136641],{"style":31,"src":136642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,136644,136645],{},"poster属性后面是跟的等待加载图片的地址",[138,136647,136648],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,136649,136650],{"__ignoreMap":143},[147,136651,136652,136654,136656,136658,136660,136662,136664,136666,136668,136670,136672,136674],{"class":149,"line":150},[147,136653,1309],{"class":157},[147,136655,29],{"class":153},[147,136657,55512],{"class":2237},[147,136659,445],{"class":157},[147,136661,134232],{"class":504},[147,136663,55520],{"class":2237},[147,136665,445],{"class":157},[147,136667,134239],{"class":504},[147,136669,134242],{"class":2237},[147,136671,445],{"class":157},[147,136673,134247],{"class":504},[147,136675,51580],{"class":157},[19,136677,136678],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[138,136680,136682],{"className":140,"code":136681,"language":142,"meta":143,"style":143},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[51,136683,136684,136689,136695,136719,136724,136729],{"__ignoreMap":143},[147,136685,136686],{"class":149,"line":150},[147,136687,136688],{"class":458},"\u002F* 2D 位移 *\u002F\n",[147,136690,136691,136693],{"class":149,"line":312},[147,136692,51884],{"class":153},[147,136694,15845],{"class":157},[147,136696,136697,136700,136702,136705,136707,136709,136711,136713,136715,136717],{"class":149,"line":1454},[147,136698,136699],{"class":448},"  transform",[147,136701,51710],{"class":157},[147,136703,136704],{"class":448},"translate",[147,136706,401],{"class":157},[147,136708,710],{"class":448},[147,136710,51765],{"class":397},[147,136712,12709],{"class":157},[147,136714,1055],{"class":448},[147,136716,51765],{"class":397},[147,136718,2993],{"class":157},[147,136720,136721],{"class":149,"line":1469},[147,136722,136723],{"class":458},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[147,136725,136726],{"class":149,"line":1475},[147,136727,136728],{"class":458},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[147,136730,136731],{"class":149,"line":1489},[147,136732,1839],{"class":157},[19,136734,136735],{},"muted:自动静音属性",[22271,136737,136739],{"id":136738},"_14122-音频标签audio","14.1.2.2 音频标签audio",[350,136741,136742],{},[353,136743,136744],{},"基本使用",[19,136746,136747,136748,136753,136754],{},"当前 ",[234,136749,136750],{},[51,136751,136752],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[234,136755,136756],{},"mp3格式",[29,136758],{"style":31,"src":136759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[350,136761,136762],{"start":312},[353,136763,136598],{},[138,136765,136766],{"className":127462,"code":136561,"language":127464,"meta":143,"style":143},[51,136767,136768],{"__ignoreMap":143},[147,136769,136770,136772,136774,136776,136778,136780,136782,136784,136786,136788,136790,136792],{"class":149,"line":150},[147,136771,1309],{"class":157},[147,136773,28457],{"class":153},[147,136775,55512],{"class":2237},[147,136777,445],{"class":157},[147,136779,136576],{"class":504},[147,136781,92695],{"class":2237},[147,136783,136581],{"class":2237},[147,136785,136584],{"class":2237},[147,136787,136587],{"class":2237},[147,136789,55587],{"class":157},[147,136791,28457],{"class":153},[147,136793,51580],{"class":157},[19,136795,136796],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[350,136798,136799],{"start":1454},[353,136800,136801],{},"常用属性",[29,136803],{"style":31,"src":136804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[138,136806,136807],{"className":127462,"code":136561,"language":127464,"meta":143,"style":143},[51,136808,136809],{"__ignoreMap":143},[147,136810,136811,136813,136815,136817,136819,136821,136823,136825,136827,136829,136831,136833],{"class":149,"line":150},[147,136812,1309],{"class":157},[147,136814,28457],{"class":153},[147,136816,55512],{"class":2237},[147,136818,445],{"class":157},[147,136820,136576],{"class":504},[147,136822,92695],{"class":2237},[147,136824,136581],{"class":2237},[147,136826,136584],{"class":2237},[147,136828,136587],{"class":2237},[147,136830,55587],{"class":157},[147,136832,28457],{"class":153},[147,136834,51580],{"class":157},[19,136836,136837],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22271,136839,136841],{"id":136840},"_14123-总结","14.1.2.3 总结",[1406,136843,136844,136847,136850,136853,136856],{},[353,136845,136846],{},"音频标签和视频标签使用方式基本一致",[353,136848,136849],{},"浏览器支持情况不同",[353,136851,136852],{},"谷歌浏览器把音频和视频自动播放禁止了",[353,136854,136855],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[353,136857,136858],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[367,136860,136862],{"id":136861},"_1413-表单元素","14.1.3 表单元素",[22271,136864,136866],{"id":136865},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[29,136868],{"style":31,"src":136869},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[138,136871,136873],{"className":127462,"code":136872,"language":127464,"meta":143,"style":143},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[51,136874,136875],{"__ignoreMap":143},[147,136876,136877,136879,136881,136883,136885,136887,136889,136891,136894,136896,136898,136901],{"class":149,"line":150},[147,136878,1309],{"class":157},[147,136880,54094],{"class":153},[147,136882,54097],{"class":2237},[147,136884,445],{"class":157},[147,136886,62972],{"class":504},[147,136888,15193],{"class":2237},[147,136890,445],{"class":157},[147,136892,136893],{"class":504},"\"username\"",[147,136895,61293],{"class":2237},[147,136897,445],{"class":157},[147,136899,136900],{"class":504},"\"请输入用户名\"",[147,136902,51580],{"class":157},[29,136904],{"style":31,"src":136905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22271,136907,136909],{"id":136908},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[29,136911],{"style":31,"src":136912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,136914,136915],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,136917,136918],{},"快捷操作：",[29,136920],{"style":31,"src":136921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,136923,136924],{},"例子1：",[138,136926,136928],{"className":127462,"code":136927,"language":127464,"meta":143,"style":143},"\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",[51,136929,136930,136953,136980,137009,137028],{"__ignoreMap":143},[147,136931,136932,136934,136936,136938,136940,136943,136946,136948,136951],{"class":149,"line":150},[147,136933,1309],{"class":157},[147,136935,66898],{"class":153},[147,136937,66901],{"class":2237},[147,136939,445],{"class":157},[147,136941,136942],{"class":504},"\"\u002Fsubmit\"",[147,136944,136945],{"class":2237}," method",[147,136947,445],{"class":157},[147,136949,136950],{"class":504},"\"post\"",[147,136952,51580],{"class":157},[147,136954,136955,136957,136959,136961,136963,136965,136967,136969,136971,136973,136975,136978],{"class":149,"line":312},[147,136956,52417],{"class":157},[147,136958,54094],{"class":153},[147,136960,54097],{"class":2237},[147,136962,445],{"class":157},[147,136964,62972],{"class":504},[147,136966,15193],{"class":2237},[147,136968,445],{"class":157},[147,136970,136893],{"class":504},[147,136972,61293],{"class":2237},[147,136974,445],{"class":157},[147,136976,136977],{"class":504},"\"用户名\"",[147,136979,51580],{"class":157},[147,136981,136982,136984,136986,136988,136990,136993,136995,136997,137000,137002,137004,137007],{"class":149,"line":1454},[147,136983,52417],{"class":157},[147,136985,54094],{"class":153},[147,136987,54097],{"class":2237},[147,136989,445],{"class":157},[147,136991,136992],{"class":504},"\"password\"",[147,136994,15193],{"class":2237},[147,136996,445],{"class":157},[147,136998,136999],{"class":504},"\"pwd\"",[147,137001,61293],{"class":2237},[147,137003,445],{"class":157},[147,137005,137006],{"class":504},"\"密码\"",[147,137008,51580],{"class":157},[147,137010,137011,137013,137015,137017,137019,137021,137024,137026],{"class":149,"line":1469},[147,137012,52417],{"class":157},[147,137014,54160],{"class":153},[147,137016,54097],{"class":2237},[147,137018,445],{"class":157},[147,137020,66921],{"class":504},[147,137022,137023],{"class":157},">提交\u003C\u002F",[147,137025,54160],{"class":153},[147,137027,51580],{"class":157},[147,137029,137030,137032,137034],{"class":149,"line":1475},[147,137031,52058],{"class":157},[147,137033,66898],{"class":153},[147,137035,51580],{"class":157},[29,137037],{"style":31,"src":137038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,137040,137041],{},"value是表单域的内容",[19,137043,137044],{},"例子2：",[138,137046,137047],{"className":127462,"code":136927,"language":127464,"meta":143,"style":143},[51,137048,137049,137069,137095,137121,137139],{"__ignoreMap":143},[147,137050,137051,137053,137055,137057,137059,137061,137063,137065,137067],{"class":149,"line":150},[147,137052,1309],{"class":157},[147,137054,66898],{"class":153},[147,137056,66901],{"class":2237},[147,137058,445],{"class":157},[147,137060,136942],{"class":504},[147,137062,136945],{"class":2237},[147,137064,445],{"class":157},[147,137066,136950],{"class":504},[147,137068,51580],{"class":157},[147,137070,137071,137073,137075,137077,137079,137081,137083,137085,137087,137089,137091,137093],{"class":149,"line":312},[147,137072,52417],{"class":157},[147,137074,54094],{"class":153},[147,137076,54097],{"class":2237},[147,137078,445],{"class":157},[147,137080,62972],{"class":504},[147,137082,15193],{"class":2237},[147,137084,445],{"class":157},[147,137086,136893],{"class":504},[147,137088,61293],{"class":2237},[147,137090,445],{"class":157},[147,137092,136977],{"class":504},[147,137094,51580],{"class":157},[147,137096,137097,137099,137101,137103,137105,137107,137109,137111,137113,137115,137117,137119],{"class":149,"line":1454},[147,137098,52417],{"class":157},[147,137100,54094],{"class":153},[147,137102,54097],{"class":2237},[147,137104,445],{"class":157},[147,137106,136992],{"class":504},[147,137108,15193],{"class":2237},[147,137110,445],{"class":157},[147,137112,136999],{"class":504},[147,137114,61293],{"class":2237},[147,137116,445],{"class":157},[147,137118,137006],{"class":504},[147,137120,51580],{"class":157},[147,137122,137123,137125,137127,137129,137131,137133,137135,137137],{"class":149,"line":1469},[147,137124,52417],{"class":157},[147,137126,54160],{"class":153},[147,137128,54097],{"class":2237},[147,137130,445],{"class":157},[147,137132,66921],{"class":504},[147,137134,137023],{"class":157},[147,137136,54160],{"class":153},[147,137138,51580],{"class":157},[147,137140,137141,137143,137145],{"class":149,"line":1475},[147,137142,52058],{"class":157},[147,137144,66898],{"class":153},[147,137146,51580],{"class":157},[29,137148],{"style":31,"src":137149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,137151,137153],{"id":137152},"_142-css新特性","14.2 CSS新特性",[367,137155,137157],{"id":137156},"_1421-新增选择器","14.2.1 新增选择器",[22271,137159,137161],{"id":137160},"_14211-属性选择器","14.2.1.1 属性选择器",[29,137163],{"style":31,"src":137164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[138,137166,137168],{"className":140,"code":137167,"language":142,"meta":143,"style":143},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[51,137169,137170,137185,137201],{"__ignoreMap":143},[147,137171,137172,137174,137176,137178,137180,137182],{"class":149,"line":150},[147,137173,54094],{"class":153},[147,137175,1289],{"class":157},[147,137177,103377],{"class":2237},[147,137179,445],{"class":397},[147,137181,62972],{"class":504},[147,137183,137184],{"class":157},"] {\n",[147,137186,137187,137189,137191,137193,137195,137197,137199],{"class":149,"line":312},[147,137188,71169],{"class":448},[147,137190,51710],{"class":157},[147,137192,616],{"class":448},[147,137194,51765],{"class":397},[147,137196,51794],{"class":448},[147,137198,130295],{"class":448},[147,137200,1565],{"class":157},[147,137202,137203],{"class":149,"line":1454},[147,137204,1839],{"class":157},[29,137206],{"style":31,"src":137207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,137209,248],{},[1406,137211,137212,137215,137218,137221],{},[353,137213,137214],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[353,137216,137217],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[353,137219,137220],{},"属性选择器也可以选择出来自定义的属性",[353,137222,137223,137225],{},[234,137224,9299],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22271,137227,137229],{"id":137228},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[29,137231],{"style":31,"src":137232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[350,137234,137235],{},[353,137236,137237],{},"fist-child",[138,137239,137241],{"className":140,"code":137240,"language":142,"meta":143,"style":143},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[51,137242,137243,137248,137263,137283,137301],{"__ignoreMap":143},[147,137244,137245],{"class":149,"line":150},[147,137246,137247],{"class":458},"\u002F* 属性选择器 *\u002F\n",[147,137249,137250,137252,137254,137256,137258,137260],{"class":149,"line":312},[147,137251,54094],{"class":153},[147,137253,1289],{"class":157},[147,137255,103377],{"class":2237},[147,137257,445],{"class":397},[147,137259,62972],{"class":504},[147,137261,137262],{"class":157},"] { }\n",[147,137264,137265,137267,137269,137271,137274,137277,137280],{"class":149,"line":1454},[147,137266,54094],{"class":153},[147,137268,1289],{"class":157},[147,137270,14967],{"class":2237},[147,137272,137273],{"class":397},"^=",[147,137275,137276],{"class":504},"\"icon\"",[147,137278,137279],{"class":157},"] { }  ",[147,137281,137282],{"class":458},"\u002F* 以 icon 开头 *\u002F\n",[147,137284,137285,137287,137289,137291,137294,137296,137298],{"class":149,"line":1469},[147,137286,54094],{"class":153},[147,137288,1289],{"class":157},[147,137290,14967],{"class":2237},[147,137292,137293],{"class":397},"$=",[147,137295,137276],{"class":504},[147,137297,137279],{"class":157},[147,137299,137300],{"class":458},"\u002F* 以 icon 结尾 *\u002F\n",[147,137302,137303,137305,137307,137309,137312,137314,137316],{"class":149,"line":1475},[147,137304,54094],{"class":153},[147,137306,1289],{"class":157},[147,137308,14967],{"class":2237},[147,137310,137311],{"class":397},"*=",[147,137313,137276],{"class":504},[147,137315,137279],{"class":157},[147,137317,137318],{"class":458},"\u002F* 包含 icon *\u002F\n",[19,137320,137321],{},"ul的第一个儿子文本为红色",[19,137323,137324],{},"一定要在冒号前加空格，不然就是选中所有的了",[138,137326,137328],{"className":140,"code":137327,"language":142,"meta":143,"style":143},".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",[51,137329,137330,137336,137346,137350,137354,137359,137372,137385,137401,137418,137435],{"__ignoreMap":143},[147,137331,137332,137334],{"class":149,"line":150},[147,137333,127006],{"class":2237},[147,137335,15845],{"class":157},[147,137337,137338,137340,137342,137344],{"class":149,"line":312},[147,137339,71178],{"class":448},[147,137341,51710],{"class":157},[147,137343,57694],{"class":448},[147,137345,1565],{"class":157},[147,137347,137348],{"class":149,"line":1454},[147,137349,1839],{"class":157},[147,137351,137352],{"class":149,"line":1469},[147,137353,136176],{"class":157},[147,137355,137356],{"class":149,"line":1475},[147,137357,137358],{"class":458},"\u002F* 结构伪类选择器 *\u002F\n",[147,137360,137361,137363,137366,137369],{"class":149,"line":1489},[147,137362,353],{"class":153},[147,137364,137365],{"class":2237},":first-child",[147,137367,137368],{"class":157}," { }           ",[147,137370,137371],{"class":458},"\u002F* 第一个 *\u002F\n",[147,137373,137374,137376,137379,137382],{"class":149,"line":1495},[147,137375,353],{"class":153},[147,137377,137378],{"class":2237},":last-child",[147,137380,137381],{"class":157}," { }            ",[147,137383,137384],{"class":458},"\u002F* 最后一个 *\u002F\n",[147,137386,137387,137389,137391,137393,137395,137398],{"class":149,"line":1586},[147,137388,353],{"class":153},[147,137390,129629],{"class":2237},[147,137392,401],{"class":157},[147,137394,477],{"class":448},[147,137396,137397],{"class":157},") { }          ",[147,137399,137400],{"class":458},"\u002F* 第2个 *\u002F\n",[147,137402,137403,137405,137407,137409,137412,137415],{"class":149,"line":1592},[147,137404,353],{"class":153},[147,137406,129629],{"class":2237},[147,137408,401],{"class":157},[147,137410,137411],{"class":448},"2n",[147,137413,137414],{"class":157},") { }         ",[147,137416,137417],{"class":458},"\u002F* 偶数 *\u002F\n",[147,137419,137420,137422,137424,137426,137429,137432],{"class":149,"line":1604},[147,137421,353],{"class":153},[147,137423,129629],{"class":2237},[147,137425,401],{"class":157},[147,137427,137428],{"class":448},"2n+1",[147,137430,137431],{"class":157},") { }       ",[147,137433,137434],{"class":458},"\u002F* 奇数 *\u002F\n",[147,137436,137437,137439,137441,137443,137446,137448],{"class":149,"line":1886},[147,137438,353],{"class":153},[147,137440,129629],{"class":2237},[147,137442,401],{"class":157},[147,137444,137445],{"class":448},"-n+3",[147,137447,137431],{"class":157},[147,137449,137450],{"class":458},"\u002F* 前3个 *\u002F\n",[51884,137452,137455],{"className":137453},[137454],"example","\n  示例内容\n",[19,137457,137458],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1406,137460,137461],{},[353,137462,137463,137466],{},[51,137464,137465],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,137468,137469],{},"也就是说它选择的是熊大",[350,137471,137472],{"start":1489},[353,137473,137474],{},"权重",[138,137476,137478],{"className":140,"code":137477,"language":142,"meta":143,"style":143},"\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",[51,137479,137480,137484,137494,137504,137518,137532,137546],{"__ignoreMap":143},[147,137481,137482],{"class":149,"line":150},[147,137483,137358],{"class":458},[147,137485,137486,137488,137490,137492],{"class":149,"line":312},[147,137487,353],{"class":153},[147,137489,137365],{"class":2237},[147,137491,137368],{"class":157},[147,137493,137371],{"class":458},[147,137495,137496,137498,137500,137502],{"class":149,"line":1454},[147,137497,353],{"class":153},[147,137499,137378],{"class":2237},[147,137501,137381],{"class":157},[147,137503,137384],{"class":458},[147,137505,137506,137508,137510,137512,137514,137516],{"class":149,"line":1469},[147,137507,353],{"class":153},[147,137509,129629],{"class":2237},[147,137511,401],{"class":157},[147,137513,477],{"class":448},[147,137515,137397],{"class":157},[147,137517,137400],{"class":458},[147,137519,137520,137522,137524,137526,137528,137530],{"class":149,"line":1475},[147,137521,353],{"class":153},[147,137523,129629],{"class":2237},[147,137525,401],{"class":157},[147,137527,137411],{"class":448},[147,137529,137414],{"class":157},[147,137531,137417],{"class":458},[147,137533,137534,137536,137538,137540,137542,137544],{"class":149,"line":1489},[147,137535,353],{"class":153},[147,137537,129629],{"class":2237},[147,137539,401],{"class":157},[147,137541,137428],{"class":448},[147,137543,137431],{"class":157},[147,137545,137434],{"class":458},[147,137547,137548,137550,137552,137554,137556,137558],{"class":149,"line":1495},[147,137549,353],{"class":153},[147,137551,129629],{"class":2237},[147,137553,401],{"class":157},[147,137555,137445],{"class":448},[147,137557,137431],{"class":157},[147,137559,137450],{"class":458},[19,137561,137562],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22271,137564,137566],{"id":137565},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,137568,137569],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[29,137571],{"style":31,"src":137572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[350,137574,137575],{},[353,137576,248],{},[1406,137578,137579,137582,137585,137588,137591,137594],{},[353,137580,137581],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[353,137583,137584],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[353,137586,137587],{},"语法： element::before {}",[353,137589,137590],{},"before 和 after 必须有 content 属性",[353,137592,137593],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[353,137595,137596],{},"伪元素选择器和标签选择器一样，权重为 1",[350,137598,137599],{"start":312},[353,137600,137601],{},"实例",[138,137603,137604],{"className":140,"code":137477,"language":142,"meta":143,"style":143},[51,137605,137606,137610,137620,137630,137644,137658,137672],{"__ignoreMap":143},[147,137607,137608],{"class":149,"line":150},[147,137609,137358],{"class":458},[147,137611,137612,137614,137616,137618],{"class":149,"line":312},[147,137613,353],{"class":153},[147,137615,137365],{"class":2237},[147,137617,137368],{"class":157},[147,137619,137371],{"class":458},[147,137621,137622,137624,137626,137628],{"class":149,"line":1454},[147,137623,353],{"class":153},[147,137625,137378],{"class":2237},[147,137627,137381],{"class":157},[147,137629,137384],{"class":458},[147,137631,137632,137634,137636,137638,137640,137642],{"class":149,"line":1469},[147,137633,353],{"class":153},[147,137635,129629],{"class":2237},[147,137637,401],{"class":157},[147,137639,477],{"class":448},[147,137641,137397],{"class":157},[147,137643,137400],{"class":458},[147,137645,137646,137648,137650,137652,137654,137656],{"class":149,"line":1475},[147,137647,353],{"class":153},[147,137649,129629],{"class":2237},[147,137651,401],{"class":157},[147,137653,137411],{"class":448},[147,137655,137414],{"class":157},[147,137657,137417],{"class":458},[147,137659,137660,137662,137664,137666,137668,137670],{"class":149,"line":1489},[147,137661,353],{"class":153},[147,137663,129629],{"class":2237},[147,137665,401],{"class":157},[147,137667,137428],{"class":448},[147,137669,137431],{"class":157},[147,137671,137434],{"class":458},[147,137673,137674,137676,137678,137680,137682,137684],{"class":149,"line":1495},[147,137675,353],{"class":153},[147,137677,129629],{"class":2237},[147,137679,401],{"class":157},[147,137681,137445],{"class":448},[147,137683,137431],{"class":157},[147,137685,137450],{"class":458},[29,137687],{"style":31,"src":137688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[350,137690,137691],{"start":1454},[353,137692,137693],{},"使用场景1",[29,137695],{"style":31,"src":137696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,137698,137699],{},"不需要再加盒子来整红色那部分了",[138,137701,137703],{"className":140,"code":137702,"language":142,"meta":143,"style":143},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[51,137704,137705,137710,137719,137730,137740,137744,137753,137764,137774],{"__ignoreMap":143},[147,137706,137707],{"class":149,"line":150},[147,137708,137709],{"class":458},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[147,137711,137712,137714,137717],{"class":149,"line":312},[147,137713,51884],{"class":153},[147,137715,137716],{"class":2237},"::before",[147,137718,15845],{"class":157},[147,137720,137721,137724,137726,137728],{"class":149,"line":1454},[147,137722,137723],{"class":448},"  content",[147,137725,51710],{"class":157},[147,137727,7926],{"class":504},[147,137729,1565],{"class":157},[147,137731,137732,137734,137736,137738],{"class":149,"line":1469},[147,137733,128331],{"class":448},[147,137735,51710],{"class":157},[147,137737,61142],{"class":448},[147,137739,1565],{"class":157},[147,137741,137742],{"class":149,"line":1475},[147,137743,1839],{"class":157},[147,137745,137746,137748,137751],{"class":149,"line":1489},[147,137747,51884],{"class":153},[147,137749,137750],{"class":2237},"::after",[147,137752,15845],{"class":157},[147,137754,137755,137757,137759,137762],{"class":149,"line":1495},[147,137756,137723],{"class":448},[147,137758,51710],{"class":157},[147,137760,137761],{"class":504},"\"→\"",[147,137763,1565],{"class":157},[147,137765,137766,137768,137770,137772],{"class":149,"line":1586},[147,137767,71178],{"class":448},[147,137769,51710],{"class":157},[147,137771,62343],{"class":448},[147,137773,1565],{"class":157},[147,137775,137776],{"class":149,"line":1592},[147,137777,1839],{"class":157},[29,137779],{"style":31,"src":137780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,137782,137783],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[29,137785],{"style":31,"src":137786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,137788,137789],{},"但是在引用时需要先转义一下",[19,137791,137792],{},"content='\\e930'",[350,137794,137795],{"start":1469},[353,137796,137797],{},"使用场景2",[19,137799,137800],{},"仿土豆效果",[19,137802,137803],{},"通过使用伪元素选择器可以减少body中盒子的数量",[138,137805,137806],{"className":140,"code":137702,"language":142,"meta":143,"style":143},[51,137807,137808,137812,137820,137830,137840,137844,137852,137862,137872],{"__ignoreMap":143},[147,137809,137810],{"class":149,"line":150},[147,137811,137709],{"class":458},[147,137813,137814,137816,137818],{"class":149,"line":312},[147,137815,51884],{"class":153},[147,137817,137716],{"class":2237},[147,137819,15845],{"class":157},[147,137821,137822,137824,137826,137828],{"class":149,"line":1454},[147,137823,137723],{"class":448},[147,137825,51710],{"class":157},[147,137827,7926],{"class":504},[147,137829,1565],{"class":157},[147,137831,137832,137834,137836,137838],{"class":149,"line":1469},[147,137833,128331],{"class":448},[147,137835,51710],{"class":157},[147,137837,61142],{"class":448},[147,137839,1565],{"class":157},[147,137841,137842],{"class":149,"line":1475},[147,137843,1839],{"class":157},[147,137845,137846,137848,137850],{"class":149,"line":1489},[147,137847,51884],{"class":153},[147,137849,137750],{"class":2237},[147,137851,15845],{"class":157},[147,137853,137854,137856,137858,137860],{"class":149,"line":1495},[147,137855,137723],{"class":448},[147,137857,51710],{"class":157},[147,137859,137761],{"class":504},[147,137861,1565],{"class":157},[147,137863,137864,137866,137868,137870],{"class":149,"line":1586},[147,137865,71178],{"class":448},[147,137867,51710],{"class":157},[147,137869,62343],{"class":448},[147,137871,1565],{"class":157},[147,137873,137874],{"class":149,"line":1592},[147,137875,1839],{"class":157},[29,137877],{"style":31,"src":137878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[350,137880,137881],{"start":1475},[353,137882,137883],{},"使用场景3",[19,137885,137886],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[138,137888,137890],{"className":140,"code":137889,"language":142,"meta":143,"style":143},".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",[51,137891,137892,137898,137908,137912,137916,137920,137928,137938,137948,137952,137960,137970,137980],{"__ignoreMap":143},[147,137893,137894,137896],{"class":149,"line":150},[147,137895,130563],{"class":2237},[147,137897,15845],{"class":157},[147,137899,137900,137902,137904,137906],{"class":149,"line":312},[147,137901,131195],{"class":448},[147,137903,51710],{"class":157},[147,137905,24009],{"class":448},[147,137907,1565],{"class":157},[147,137909,137910],{"class":149,"line":1454},[147,137911,1839],{"class":157},[147,137913,137914],{"class":149,"line":1469},[147,137915,136176],{"class":157},[147,137917,137918],{"class":149,"line":1475},[147,137919,137709],{"class":458},[147,137921,137922,137924,137926],{"class":149,"line":1489},[147,137923,51884],{"class":153},[147,137925,137716],{"class":2237},[147,137927,15845],{"class":157},[147,137929,137930,137932,137934,137936],{"class":149,"line":1495},[147,137931,137723],{"class":448},[147,137933,51710],{"class":157},[147,137935,7926],{"class":504},[147,137937,1565],{"class":157},[147,137939,137940,137942,137944,137946],{"class":149,"line":1586},[147,137941,128331],{"class":448},[147,137943,51710],{"class":157},[147,137945,61142],{"class":448},[147,137947,1565],{"class":157},[147,137949,137950],{"class":149,"line":1592},[147,137951,1839],{"class":157},[147,137953,137954,137956,137958],{"class":149,"line":1604},[147,137955,51884],{"class":153},[147,137957,137750],{"class":2237},[147,137959,15845],{"class":157},[147,137961,137962,137964,137966,137968],{"class":149,"line":1886},[147,137963,137723],{"class":448},[147,137965,51710],{"class":157},[147,137967,137761],{"class":504},[147,137969,1565],{"class":157},[147,137971,137972,137974,137976,137978],{"class":149,"line":1891},[147,137973,71178],{"class":448},[147,137975,51710],{"class":157},[147,137977,62343],{"class":448},[147,137979,1565],{"class":157},[147,137981,137982],{"class":149,"line":1897},[147,137983,1839],{"class":157},[19,137985,137986],{},"div {\nmargin: 0 auto;\n}",[138,137988,137991],{"className":137989,"code":137990,"language":5461},[5459],"\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",[51,137992,137990],{"__ignoreMap":143},[19,137994,137995],{},"如果想让多个元素都发生变化",[19,137997,137998],{},"不能如下操作：",[19,138000,138001],{},"transition: width 2s ease 0.5s;",[19,138003,138004],{},"transition: height 2s ease 0.5s;不对！！！",[19,138006,138007],{},"上方会样式冲突，导致不显示任何过渡效果",[19,138009,138010],{},"使用如下：加逗号隔开",[19,138012,138013],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,138015,138016],{},"transition all 2s ease;",[367,138018,138020],{"id":138019},"_1426-过渡练习","14.2.6 过渡练习",[350,138022,138023],{},[353,138024,138025],{},"进度条",[29,138027],{"style":31,"src":138028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[138,138030,138032],{"className":140,"code":138031,"language":142,"meta":143,"style":143},"div {\n  transition: all 0.3s ease;\n}\n",[51,138033,138034,138040,138058],{"__ignoreMap":143},[147,138035,138036,138038],{"class":149,"line":150},[147,138037,51884],{"class":153},[147,138039,15845],{"class":157},[147,138041,138042,138045,138047,138049,138052,138054,138056],{"class":149,"line":312},[147,138043,138044],{"class":448},"  transition",[147,138046,51710],{"class":157},[147,138048,28395],{"class":448},[147,138050,138051],{"class":448}," 0.3",[147,138053,1094],{"class":397},[147,138055,78952],{"class":448},[147,138057,1565],{"class":157},[147,138059,138060],{"class":149,"line":1454},[147,138061,1839],{"class":157},[350,138063,138064],{"start":312},[353,138065,138066],{},"小米logo",[19,138068,138069],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[138,138071,138073],{"className":140,"code":138072,"language":142,"meta":143,"style":143},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[51,138074,138075,138080,138086,138102,138107],{"__ignoreMap":143},[147,138076,138077],{"class":149,"line":150},[147,138078,138079],{"class":458},"\u002F* CSS3 过渡 *\u002F\n",[147,138081,138082,138084],{"class":149,"line":312},[147,138083,51884],{"class":153},[147,138085,15845],{"class":157},[147,138087,138088,138090,138092,138094,138096,138098,138100],{"class":149,"line":1454},[147,138089,138044],{"class":448},[147,138091,51710],{"class":157},[147,138093,28395],{"class":448},[147,138095,138051],{"class":448},[147,138097,1094],{"class":397},[147,138099,78952],{"class":448},[147,138101,1565],{"class":157},[147,138103,138104],{"class":149,"line":1469},[147,138105,138106],{"class":458},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[147,138108,138109],{"class":149,"line":1475},[147,138110,1839],{"class":157},[19,138112,138113],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[308,138115,138116],{},"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":143,"searchDepth":312,"depth":312,"links":138118},[138119,138124],{"id":136449,"depth":312,"text":136450,"children":138120},[138121,138122,138123],{"id":136453,"depth":1454,"text":136454},{"id":136530,"depth":1454,"text":136531},{"id":136861,"depth":1454,"text":136862},{"id":137152,"depth":312,"text":137153,"children":138125},[138126,138127],{"id":137156,"depth":1454,"text":137157},{"id":138019,"depth":1454,"text":138020},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136441,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":138134,"title":138135,"body":138136,"description":321,"extension":322,"meta":139880,"navigation":324,"path":139881,"seo":139882,"stem":139883,"__hash__":139884},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":138137,"toc":139861},[138138,138141,138145,138148,138154,138160,138164,138166,138169,138172,138175,138178,138181,138184,138187,138191,138195,138198,138201,138204,138208,138211,138214,138219,138222,138225,138228,138232,138235,138244,138247,138250,138254,138257,138260,138265,138272,138286,138294,138301,138306,138309,138312,138315,138322,138326,138332,138338,138341,138344,138349,138355,138357,138365,138370,138373,138379,138381,138386,138391,138394,138396,138401,138404,138409,138414,138448,138452,138456,138459,138463,138466,138552,138555,138592,138595,138631,138635,138640,138653,138707,138709,138737,138739,138767,138773,138787,138789,138833,138835,138879,138882,138889,138900,138902,138929,138931,138957,138964,138980,138982,139076,139078,139172,139179,139182,139187,139193,139267,139270,139272,139308,139310,139346,139349,139356,139375,139378,139381,139383,139408,139410,139434,139437,139440,139470,139474,139477,139540,139542,139608,139610,139674,139677,139709,139711,139737,139739,139765,139768,139799,139801,139827,139829,139855,139858],[10,138139,138135],{"id":138140},"_15-品优购项目上篇-搭建与公共模块",[14,138142,138144],{"id":138143},"_151-项目规划","15.1 项目规划",[29,138146],{"style":31,"src":138147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,138149,138150,138153],{},[234,138151,138152],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,138155,138156,138159],{},[234,138157,138158],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,138161,138163],{"id":138162},"_152-项目介绍","15.2 项目介绍",[19,138165,138152],{},[29,138167],{"style":31,"src":138168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,138170,138171],{},"主页：",[29,138173],{"style":31,"src":138174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,138176,138177],{},"列表页：",[29,138179],{"style":31,"src":138180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,138182,138183],{},"注册页：",[29,138185],{"style":31,"src":138186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,138188,138190],{"id":138189},"_153-项目搭建工作","15.3 项目搭建工作",[367,138192,138194],{"id":138193},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[29,138196],{"style":31,"src":138197},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,138199,138200],{},"经常更换的图片要放到upload文件夹中",[19,138202,138203],{},"不经常换的放到images文件夹中",[367,138205,138207],{"id":138206},"_1532-创建文件如下","15.3.2 创建文件如下",[29,138209],{"style":31,"src":138210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[29,138212],{"style":31,"src":138213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,138215,138216],{},[234,138217,138218],{},"初始化样式：",[19,138220,138221],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,138223,138224],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,138226,138227],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[367,138229,138231],{"id":138230},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,138233,138234],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,138236,138237,138238,138243],{},"这里最典型的应用就是 ",[234,138239,138240],{},[51,138241,138242],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[29,138245],{"style":31,"src":138246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,138248,138249],{},"通过link方法来引入",[367,138251,138253],{"id":138252},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[29,138255],{"style":31,"src":138256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,138258,138259],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[350,138261,138262],{},[353,138263,138264],{},"制作favicon图标",[19,138266,138267,138268,138271],{},"①把品优购图标切成 ",[51,138269,138270],{},"png"," 图片",[19,138273,138274,138275,138277,138278,138281,138282],{},"②把 ",[51,138276,138270],{}," 图片转换为 ",[51,138279,138280],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[637,138283,138284],{"href":138284,"rel":138285},"http:\u002F\u002Fwww.bitbug.net\u002F",[24138],[350,138287,138288,138291],{"start":312},[353,138289,138290],{},"favicon图标放到网站根目录下",[353,138292,138293],{},"HTML页面引入favicon",[19,138295,138296,138297,138300],{},"在html 页面里面的 ",[51,138298,138299],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,138302,138303],{},[51,138304,138305],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,138307,138308],{},"复制这行代码或者在生成这个的网站进行复制",[29,138310],{"style":31,"src":138311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,138313,138314],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,138316,138317,138318],{},"例如:",[637,138319,138320],{"href":138320,"rel":138321},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[24138],[367,138323,138325],{"id":138324},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,138327,138328,138331],{},[234,138329,138330],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,138333,138334,138337],{},[234,138335,138336],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,138339,138340],{},"页面必须有三个标签用来符合 SEO 优化",[29,138342],{"style":31,"src":138343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[350,138345,138346],{},[353,138347,138348],{},"title网站标题",[19,138350,138351,138354],{},[234,138352,138353],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,138356,69063],{},[1406,138358,138359,138362],{},[353,138360,138361],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[353,138363,138364],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[350,138366,138367],{"start":312},[353,138368,138369],{},"description网站描述",[19,138371,138372],{},"简要说明我们网站主要是做什么的",[19,138374,138375,138378],{},[234,138376,138377],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,138380,69063],{},[19,138382,138383],{},[51,138384,138385],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[350,138387,138388],{"start":1454},[353,138389,138390],{},"keywords关键词",[19,138392,138393],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,138395,69063],{},[19,138397,138398],{},[51,138399,138400],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,138402,138403],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,138405,138406],{},[234,138407,138408],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[350,138410,138411],{"start":1469},[353,138412,138413],{},"代码总结",[138,138415,138416],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,138417,138418,138422,138436,138440],{"__ignoreMap":143},[147,138419,138420],{"class":149,"line":150},[147,138421,130826],{"class":458},[147,138423,138424,138426,138428,138430,138432,138434],{"class":149,"line":312},[147,138425,1309],{"class":157},[147,138427,51884],{"class":153},[147,138429,53759],{"class":2237},[147,138431,445],{"class":157},[147,138433,130839],{"class":504},[147,138435,51580],{"class":157},[147,138437,138438],{"class":149,"line":1454},[147,138439,130846],{"class":157},[147,138441,138442,138444,138446],{"class":149,"line":1469},[147,138443,52058],{"class":157},[147,138445,51884],{"class":153},[147,138447,51580],{"class":157},[14,138449,138451],{"id":138450},"_154-项目公共部分制作","15.4 项目公共部分制作",[367,138453,138455],{"id":138454},"_1541-常用模块类命名","15.4.1 常用模块类命名",[29,138457],{"style":31,"src":138458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[367,138460,138462],{"id":138461},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,138464,138465],{},"布局思路：",[1406,138467,138468,138471,138474,138496,138529],{},[353,138469,138470],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[353,138472,138473],{},"里面包含版心的盒子",[353,138475,138476,138477],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1406,138478,138479,138487,138493],{},[353,138480,138481,138482,21773,138484,138486],{},"1 号盒子 里面包含一个",[51,138483,1406],{},[51,138485,1406],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[353,138488,138489,138490,138492],{},"里面的内容是水平排列，所以需要给",[51,138491,353],{},"设置浮动",[353,138494,138495],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[353,138497,138498,138499],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1406,138500,138501,138515,138520],{},[353,138502,138503,138504,21773,138506,138508,138509,138511,138512,138514],{},"2 号盒子 里面包含一个",[51,138505,1406],{},[51,138507,1406],{},"包裹",[51,138510,353],{},"，中间的",[51,138513,1320],{},"可以用样式去设置，也可以用字符 |",[353,138516,138517,138518,138492],{},"里面内容水平排列，给",[51,138519,353],{},[353,138521,138522,138523,138525,138526,138528],{},"找到里面所有偶数的 ",[51,138524,353],{}," 设置样式（偶数的 ",[51,138527,353],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[353,138530,138531,138532],{},"需要用到字体图标",[1406,138533,138534,138540,138543,138546,138549],{},[353,138535,138536,138537],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[51,138538,138539],{},"arrow-icon",[353,138541,138542],{},"先要引入字体图片的资源",[353,138544,138545],{},"在样式里面利用 font-face 来进行声明",[353,138547,138548],{},"在伪元素的 content属性设置 图标的编码",[353,138550,138551],{},"给伪元素设置font-family属性",[19,138553,138554],{},"结构实例代码：",[138,138556,138558],{"className":140,"code":138557,"language":142,"meta":143,"style":143},"div::before {\n  content: \"\";\n  display: block;\n}\n",[51,138559,138560,138568,138578,138588],{"__ignoreMap":143},[147,138561,138562,138564,138566],{"class":149,"line":150},[147,138563,51884],{"class":153},[147,138565,137716],{"class":2237},[147,138567,15845],{"class":157},[147,138569,138570,138572,138574,138576],{"class":149,"line":312},[147,138571,137723],{"class":448},[147,138573,51710],{"class":157},[147,138575,7926],{"class":504},[147,138577,1565],{"class":157},[147,138579,138580,138582,138584,138586],{"class":149,"line":1454},[147,138581,128331],{"class":448},[147,138583,51710],{"class":157},[147,138585,61142],{"class":448},[147,138587,1565],{"class":157},[147,138589,138590],{"class":149,"line":1469},[147,138591,1839],{"class":157},[19,138593,138594],{},"样式实例代码：",[138,138596,138597],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,138598,138599,138607,138617,138627],{"__ignoreMap":143},[147,138600,138601,138603,138605],{"class":149,"line":150},[147,138602,51884],{"class":153},[147,138604,137716],{"class":2237},[147,138606,15845],{"class":157},[147,138608,138609,138611,138613,138615],{"class":149,"line":312},[147,138610,137723],{"class":448},[147,138612,51710],{"class":157},[147,138614,7926],{"class":504},[147,138616,1565],{"class":157},[147,138618,138619,138621,138623,138625],{"class":149,"line":1454},[147,138620,128331],{"class":448},[147,138622,51710],{"class":157},[147,138624,61142],{"class":448},[147,138626,1565],{"class":157},[147,138628,138629],{"class":149,"line":1469},[147,138630,1839],{"class":157},[367,138632,138634],{"id":138633},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1406,138636,138637],{},[353,138638,138639],{},"header 盒子必须要有高度",[19,138641,138642,138643,138645,138646],{},"1 号盒子是 ",[51,138644,131727],{}," 标志定位，在正常开发过程中， ",[234,138647,138648,138649,138652],{},"logo的布局其实是有讲究的，需要进行 ",[51,138650,138651],{},"logoSEO","的优化 （★★★）",[1406,138654,138655,138663,138671,138698],{},[353,138656,138657,138659,138660,138662],{},[51,138658,131727],{}," 里面首先放一个 ",[51,138661,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[353,138664,138665,138667,138668,138670],{},[51,138666,10],{}," 里面再放一个链接，可以返回首页的，把 ",[51,138669,131727],{}," 的背景图片给链接即可",[353,138672,138673,138674],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1406,138675,138676,138691],{},[353,138677,138678,138679,138682,138683,138686,138687,138690],{},"方法1：",[51,138680,138681],{},"text-indent"," 移到盒子外面（",[51,138684,138685],{},"text-indent: -9999px",") ，然后 ",[51,138688,138689],{},"overflow:hidden"," ，淘宝的做法",[353,138692,138693,138694,138697],{},"方法2：直接给 ",[51,138695,138696],{},"font-size: 0;"," 就看不到文字了，京东的做法",[353,138699,138700,138701,138703,138704,138706],{},"最后给链接一个 ",[51,138702,51680],{}," 属性，这样鼠标放到 ",[51,138705,131727],{}," 上就可以看到提示文字了",[19,138708,138554],{},[138,138710,138711],{"className":127462,"code":131948,"language":127464,"meta":143,"style":143},[51,138712,138713],{"__ignoreMap":143},[147,138714,138715,138717,138719,138721,138723,138725,138727,138729,138731,138733,138735],{"class":149,"line":150},[147,138716,1309],{"class":157},[147,138718,637],{"class":153},[147,138720,61330],{"class":2237},[147,138722,445],{"class":157},[147,138724,131963],{"class":504},[147,138726,131966],{"class":2237},[147,138728,445],{"class":157},[147,138730,131971],{"class":504},[147,138732,131974],{"class":157},[147,138734,637],{"class":153},[147,138736,51580],{"class":157},[19,138738,138594],{},[138,138740,138741],{"className":127462,"code":131948,"language":127464,"meta":143,"style":143},[51,138742,138743],{"__ignoreMap":143},[147,138744,138745,138747,138749,138751,138753,138755,138757,138759,138761,138763,138765],{"class":149,"line":150},[147,138746,1309],{"class":157},[147,138748,637],{"class":153},[147,138750,61330],{"class":2237},[147,138752,445],{"class":157},[147,138754,131963],{"class":504},[147,138756,131966],{"class":2237},[147,138758,445],{"class":157},[147,138760,131971],{"class":504},[147,138762,131974],{"class":157},[147,138764,637],{"class":153},[147,138766,51580],{"class":157},[19,138768,138769,138770,138772],{},"2 号盒子是 ",[51,138771,131740],{}," 搜索模块定位",[1406,138774,138775,138778,138781,138784],{},[353,138776,138777],{},"search盒子利用定位的方式放在对应的位置",[353,138779,138780],{},"search盒子设置绝对定位，header盒子设置相对定位",[353,138782,138783],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[353,138785,138786],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,138788,138554],{},[138,138790,138791],{"className":140,"code":132035,"language":142,"meta":143,"style":143},[51,138792,138793,138815,138819,138829],{"__ignoreMap":143},[147,138794,138795,138797,138799,138801,138803,138805,138807,138809,138811,138813],{"class":149,"line":150},[147,138796,51884],{"class":153},[147,138798,12709],{"class":157},[147,138800,19],{"class":153},[147,138802,12709],{"class":157},[147,138804,10],{"class":153},[147,138806,12709],{"class":157},[147,138808,1406],{"class":153},[147,138810,12709],{"class":157},[147,138812,353],{"class":153},[147,138814,15845],{"class":157},[147,138816,138817],{"class":149,"line":312},[147,138818,132064],{"class":458},[147,138820,138821,138823,138825,138827],{"class":149,"line":1454},[147,138822,128331],{"class":448},[147,138824,51710],{"class":157},[147,138826,61142],{"class":448},[147,138828,1565],{"class":157},[147,138830,138831],{"class":149,"line":1469},[147,138832,1839],{"class":157},[19,138834,138594],{},[138,138836,138837],{"className":140,"code":132035,"language":142,"meta":143,"style":143},[51,138838,138839,138861,138865,138875],{"__ignoreMap":143},[147,138840,138841,138843,138845,138847,138849,138851,138853,138855,138857,138859],{"class":149,"line":150},[147,138842,51884],{"class":153},[147,138844,12709],{"class":157},[147,138846,19],{"class":153},[147,138848,12709],{"class":157},[147,138850,10],{"class":153},[147,138852,12709],{"class":157},[147,138854,1406],{"class":153},[147,138856,12709],{"class":157},[147,138858,353],{"class":153},[147,138860,15845],{"class":157},[147,138862,138863],{"class":149,"line":312},[147,138864,132064],{"class":458},[147,138866,138867,138869,138871,138873],{"class":149,"line":1454},[147,138868,128331],{"class":448},[147,138870,51710],{"class":157},[147,138872,61142],{"class":448},[147,138874,1565],{"class":157},[147,138876,138877],{"class":149,"line":1469},[147,138878,1839],{"class":157},[19,138880,138881],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,138883,138884,138885,138888],{},"3 号盒子是 ",[51,138886,138887],{},"hotwords"," 热词模块定位",[1406,138890,138891,138894,138897],{},[353,138892,138893],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[353,138895,138896],{},"给里面所有的a标签设置 左右10px的外边距",[353,138898,138899],{},"给第一个a标签设置文字变红色（#c81623）",[19,138901,138554],{},[138,138903,138905],{"className":140,"code":138904,"language":142,"meta":143,"style":143},"div {\n  margin: 0 auto;\n}\n",[51,138906,138907,138913,138925],{"__ignoreMap":143},[147,138908,138909,138911],{"class":149,"line":150},[147,138910,51884],{"class":153},[147,138912,15845],{"class":157},[147,138914,138915,138917,138919,138921,138923],{"class":149,"line":312},[147,138916,70743],{"class":448},[147,138918,51710],{"class":157},[147,138920,590],{"class":448},[147,138922,51829],{"class":448},[147,138924,1565],{"class":157},[147,138926,138927],{"class":149,"line":1454},[147,138928,1839],{"class":157},[19,138930,138594],{},[138,138932,138933],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,138934,138935,138941,138953],{"__ignoreMap":143},[147,138936,138937,138939],{"class":149,"line":150},[147,138938,51884],{"class":153},[147,138940,15845],{"class":157},[147,138942,138943,138945,138947,138949,138951],{"class":149,"line":312},[147,138944,70743],{"class":448},[147,138946,51710],{"class":157},[147,138948,590],{"class":448},[147,138950,51829],{"class":448},[147,138952,1565],{"class":157},[147,138954,138955],{"class":149,"line":1454},[147,138956,1839],{"class":157},[19,138958,138959,138960,138963],{},"4 号盒子是 ",[51,138961,138962],{},"shopcar"," 购物车模块",[1406,138965,138966,138971,138974,138977],{},[353,138967,123605,138968,138970],{},[51,138969,138962],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[353,138972,138973],{},"count 统计部分用绝对定位做",[353,138975,138976],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[353,138978,138979],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,138981,138554],{},[138,138983,138984],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,138985,138986,138990,139004,139008,139022,139026,139040,139044,139058,139062],{"__ignoreMap":143},[147,138987,138988],{"class":149,"line":150},[147,138989,132154],{"class":458},[147,138991,138992,138994,138996,138998,139000,139002],{"class":149,"line":312},[147,138993,132159],{"class":2237},[147,138995,80079],{"class":157},[147,138997,129075],{"class":448},[147,138999,51710],{"class":157},[147,139001,132168],{"class":448},[147,139003,129645],{"class":157},[147,139005,139006],{"class":149,"line":1454},[147,139007,132175],{"class":458},[147,139009,139010,139012,139014,139016,139018,139020],{"class":149,"line":1469},[147,139011,132180],{"class":2237},[147,139013,80079],{"class":157},[147,139015,129075],{"class":448},[147,139017,51710],{"class":157},[147,139019,55037],{"class":448},[147,139021,129645],{"class":157},[147,139023,139024],{"class":149,"line":1475},[147,139025,132195],{"class":458},[147,139027,139028,139030,139032,139034,139036,139038],{"class":149,"line":1489},[147,139029,132200],{"class":2237},[147,139031,80079],{"class":157},[147,139033,129075],{"class":448},[147,139035,51710],{"class":157},[147,139037,55104],{"class":448},[147,139039,129645],{"class":157},[147,139041,139042],{"class":149,"line":1495},[147,139043,132215],{"class":458},[147,139045,139046,139048,139050,139052,139054,139056],{"class":149,"line":1586},[147,139047,132220],{"class":2237},[147,139049,80079],{"class":157},[147,139051,129075],{"class":448},[147,139053,51710],{"class":157},[147,139055,86505],{"class":448},[147,139057,129645],{"class":157},[147,139059,139060],{"class":149,"line":1592},[147,139061,132235],{"class":458},[147,139063,139064,139066,139068,139070,139072,139074],{"class":149,"line":1604},[147,139065,132240],{"class":2237},[147,139067,80079],{"class":157},[147,139069,129075],{"class":448},[147,139071,51710],{"class":157},[147,139073,132249],{"class":448},[147,139075,129645],{"class":157},[19,139077,138594],{},[138,139079,139080],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,139081,139082,139086,139100,139104,139118,139122,139136,139140,139154,139158],{"__ignoreMap":143},[147,139083,139084],{"class":149,"line":150},[147,139085,132154],{"class":458},[147,139087,139088,139090,139092,139094,139096,139098],{"class":149,"line":312},[147,139089,132159],{"class":2237},[147,139091,80079],{"class":157},[147,139093,129075],{"class":448},[147,139095,51710],{"class":157},[147,139097,132168],{"class":448},[147,139099,129645],{"class":157},[147,139101,139102],{"class":149,"line":1454},[147,139103,132175],{"class":458},[147,139105,139106,139108,139110,139112,139114,139116],{"class":149,"line":1469},[147,139107,132180],{"class":2237},[147,139109,80079],{"class":157},[147,139111,129075],{"class":448},[147,139113,51710],{"class":157},[147,139115,55037],{"class":448},[147,139117,129645],{"class":157},[147,139119,139120],{"class":149,"line":1475},[147,139121,132195],{"class":458},[147,139123,139124,139126,139128,139130,139132,139134],{"class":149,"line":1489},[147,139125,132200],{"class":2237},[147,139127,80079],{"class":157},[147,139129,129075],{"class":448},[147,139131,51710],{"class":157},[147,139133,55104],{"class":448},[147,139135,129645],{"class":157},[147,139137,139138],{"class":149,"line":1495},[147,139139,132215],{"class":458},[147,139141,139142,139144,139146,139148,139150,139152],{"class":149,"line":1586},[147,139143,132220],{"class":2237},[147,139145,80079],{"class":157},[147,139147,129075],{"class":448},[147,139149,51710],{"class":157},[147,139151,86505],{"class":448},[147,139153,129645],{"class":157},[147,139155,139156],{"class":149,"line":1592},[147,139157,132235],{"class":458},[147,139159,139160,139162,139164,139166,139168,139170],{"class":149,"line":1604},[147,139161,132240],{"class":2237},[147,139163,80079],{"class":157},[147,139165,129075],{"class":448},[147,139167,51710],{"class":157},[147,139169,132249],{"class":448},[147,139171,129645],{"class":157},[367,139173,139175,139176,139178],{"id":139174},"_1544-nav导航模块制作","15.4.4 ",[51,139177,53986],{},"导航模块制作",[29,139180],{"style":31,"src":139181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,139183,139184,139186],{},[51,139185,53986],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,139188,139189,139190],{},"1 号盒子左侧浮动，",[51,139191,139192],{},"dropdown",[1406,139194,139195,139205,139213,139219,139227,139237,139245,139256],{},[353,139196,139197,139198,101290,139201,139204],{},"1号盒子有讲究，根据相关性 里面包含 ",[51,139199,139200],{},".dt",[51,139202,139203],{},".dd"," 两个盒子",[353,139206,139207,139209,139210,139212],{},[51,139208,139200],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[51,139211,139203],{}," 挤到下面去了",[353,139214,139215,139216,139218],{},"给 ",[51,139217,139203],{}," 盒子设置宽度 和 高度，以及背景颜色",[353,139220,139215,139221,139223,139224,120507],{},[51,139222,139203],{}," 盒子里面定义 无序列表 （",[51,139225,139226],{},"ul > li > a",[353,139228,139229,139230,139232,139233,139236],{},"每个 ",[51,139231,353],{}," 都有一个高度（",[51,139234,139235],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[353,139238,139215,139239,139241,139242,120507],{},[51,139240,353],{}," 里面的a设置文字大小（",[51,139243,139244],{},"14px",[353,139246,139215,139247,139249,139250,139252,139253,139255],{},[51,139248,353],{}," 设置 ",[51,139251,127876],{},"，当鼠标移入的时候，让",[51,139254,353],{},"的背景变成白色，让里面的文字变成红色",[353,139257,139258,139260,139261,139263,139264,139266],{},[51,139259,353],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[51,139262,353],{},"的右侧，那么给",[51,139265,353],{},"设置相对定位",[19,139268,139269],{},"一定要注意相关性",[19,139271,138554],{},[138,139273,139274],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,139275,139276,139284,139294,139304],{"__ignoreMap":143},[147,139277,139278,139280,139282],{"class":149,"line":150},[147,139279,51884],{"class":153},[147,139281,137716],{"class":2237},[147,139283,15845],{"class":157},[147,139285,139286,139288,139290,139292],{"class":149,"line":312},[147,139287,137723],{"class":448},[147,139289,51710],{"class":157},[147,139291,7926],{"class":504},[147,139293,1565],{"class":157},[147,139295,139296,139298,139300,139302],{"class":149,"line":1454},[147,139297,128331],{"class":448},[147,139299,51710],{"class":157},[147,139301,61142],{"class":448},[147,139303,1565],{"class":157},[147,139305,139306],{"class":149,"line":1469},[147,139307,1839],{"class":157},[19,139309,138594],{},[138,139311,139312],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,139313,139314,139322,139332,139342],{"__ignoreMap":143},[147,139315,139316,139318,139320],{"class":149,"line":150},[147,139317,51884],{"class":153},[147,139319,137716],{"class":2237},[147,139321,15845],{"class":157},[147,139323,139324,139326,139328,139330],{"class":149,"line":312},[147,139325,137723],{"class":448},[147,139327,51710],{"class":157},[147,139329,7926],{"class":504},[147,139331,1565],{"class":157},[147,139333,139334,139336,139338,139340],{"class":149,"line":1454},[147,139335,128331],{"class":448},[147,139337,51710],{"class":157},[147,139339,61142],{"class":448},[147,139341,1565],{"class":157},[147,139343,139344],{"class":149,"line":1469},[147,139345,1839],{"class":157},[19,139347,139348],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,139350,139351,139352,139355],{},"2 号盒子左侧浮动，",[51,139353,139354],{},"navitems"," 导航栏组",[1406,139357,139358,139363,139372],{},[353,139359,139360,139361],{},"里面结构是 ",[51,139362,139226],{},[353,139364,139365,139366,139368,139369,139371],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[51,139367,637],{},"左右的",[51,139370,31157],{},"把两侧撑开",[353,139373,139374],{},"让文字垂直居中（行高等于高度）",[29,139376],{"style":31,"src":139377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,139379,139380],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,139382,138554],{},[138,139384,139386],{"className":140,"code":139385,"language":142,"meta":143,"style":143},".box {\n  float: left;\n}\n",[51,139387,139388,139394,139404],{"__ignoreMap":143},[147,139389,139390,139392],{"class":149,"line":150},[147,139391,130563],{"class":2237},[147,139393,15845],{"class":157},[147,139395,139396,139398,139400,139402],{"class":149,"line":312},[147,139397,131195],{"class":448},[147,139399,51710],{"class":157},[147,139401,24009],{"class":448},[147,139403,1565],{"class":157},[147,139405,139406],{"class":149,"line":1454},[147,139407,1839],{"class":157},[19,139409,138594],{},[138,139411,139412],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,139413,139414,139420,139430],{"__ignoreMap":143},[147,139415,139416,139418],{"class":149,"line":150},[147,139417,130563],{"class":2237},[147,139419,15845],{"class":157},[147,139421,139422,139424,139426,139428],{"class":149,"line":312},[147,139423,131195],{"class":448},[147,139425,51710],{"class":157},[147,139427,24009],{"class":448},[147,139429,1565],{"class":157},[147,139431,139432],{"class":149,"line":1454},[147,139433,1839],{"class":157},[19,139435,139436],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[29,139438],{"style":31,"src":139439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[138,139441,139442],{"className":140,"code":130872,"language":142,"meta":143,"style":143},[51,139443,139444,139450,139466],{"__ignoreMap":143},[147,139445,139446,139448],{"class":149,"line":150},[147,139447,51884],{"class":153},[147,139449,15845],{"class":157},[147,139451,139452,139454,139456,139458,139460,139462,139464],{"class":149,"line":312},[147,139453,71169],{"class":448},[147,139455,51710],{"class":157},[147,139457,616],{"class":448},[147,139459,51765],{"class":397},[147,139461,51794],{"class":448},[147,139463,130107],{"class":448},[147,139465,1565],{"class":157},[147,139467,139468],{"class":149,"line":1454},[147,139469,1839],{"class":157},[367,139471,139473],{"id":139472},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[29,139475],{"style":31,"src":139476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1406,139478,139479,139484,139489],{},[353,139480,139481,139483],{},[51,139482,131918],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[353,139485,139486,139488],{},[51,139487,131918],{}," 里面有一个大的版心",[353,139490,139491,139492,139495,139496],{},"版心里面包含 1 号盒子，",[51,139493,139494],{},"mod_service"," 是服务模块，mod 是模块的意思",[1406,139497,139498,139503,139516,139532,139537],{},[353,139499,139215,139500,139502],{},[51,139501,139494],{}," 设置高度（80px）和下边框",[353,139504,139505,139506,139509,139510,139512,139513,139515],{},"在里面定义 ",[51,139507,139508],{},"ul > li"," ,每个",[51,139511,353],{}," 宽度是300px 高度是 50px，给每个",[51,139514,353],{},"设置35px的左内边距",[353,139517,139518,139519,139521,139522,139524,139525,139527,139528,18683,139530,120507],{},"在每个",[51,139520,353],{},"里面，放一个 ",[51,139523,23183],{},"（里面放图标），一个",[51,139526,51884],{},"（里面放",[51,139529,51884],{},[51,139531,19],{},[353,139533,139215,139534,139536],{},[51,139535,23183],{},"设置浮动，让h5与这个div左右排列",[353,139538,139539],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,139541,138554],{},[138,139543,139545],{"className":140,"code":139544,"language":142,"meta":143,"style":143},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[51,139546,139547,139553,139565,139577,139604],{"__ignoreMap":143},[147,139548,139549,139551],{"class":149,"line":150},[147,139550,134472],{"class":2237},[147,139552,15845],{"class":157},[147,139554,139555,139557,139559,139561,139563],{"class":149,"line":312},[147,139556,70841],{"class":448},[147,139558,51710],{"class":157},[147,139560,1099],{"class":448},[147,139562,51765],{"class":397},[147,139564,1565],{"class":157},[147,139566,139567,139569,139571,139573,139575],{"class":149,"line":1454},[147,139568,71061],{"class":448},[147,139570,51710],{"class":157},[147,139572,1099],{"class":448},[147,139574,51765],{"class":397},[147,139576,1565],{"class":157},[147,139578,139579,139581,139583,139585,139587,139589,139591,139593,139596,139598,139600,139602],{"class":149,"line":1469},[147,139580,70884],{"class":448},[147,139582,51710],{"class":157},[147,139584,61999],{"class":448},[147,139586,401],{"class":157},[147,139588,134511],{"class":5490},[147,139590,13988],{"class":157},[147,139592,62009],{"class":448},[147,139594,139595],{"class":448}," -10",[147,139597,51765],{"class":397},[147,139599,134530],{"class":448},[147,139601,51765],{"class":397},[147,139603,1565],{"class":157},[147,139605,139606],{"class":149,"line":1475},[147,139607,1839],{"class":157},[19,139609,138594],{},[138,139611,139612],{"className":140,"code":139544,"language":142,"meta":143,"style":143},[51,139613,139614,139620,139632,139644,139670],{"__ignoreMap":143},[147,139615,139616,139618],{"class":149,"line":150},[147,139617,134472],{"class":2237},[147,139619,15845],{"class":157},[147,139621,139622,139624,139626,139628,139630],{"class":149,"line":312},[147,139623,70841],{"class":448},[147,139625,51710],{"class":157},[147,139627,1099],{"class":448},[147,139629,51765],{"class":397},[147,139631,1565],{"class":157},[147,139633,139634,139636,139638,139640,139642],{"class":149,"line":1454},[147,139635,71061],{"class":448},[147,139637,51710],{"class":157},[147,139639,1099],{"class":448},[147,139641,51765],{"class":397},[147,139643,1565],{"class":157},[147,139645,139646,139648,139650,139652,139654,139656,139658,139660,139662,139664,139666,139668],{"class":149,"line":1469},[147,139647,70884],{"class":448},[147,139649,51710],{"class":157},[147,139651,61999],{"class":448},[147,139653,401],{"class":157},[147,139655,134511],{"class":5490},[147,139657,13988],{"class":157},[147,139659,62009],{"class":448},[147,139661,139595],{"class":448},[147,139663,51765],{"class":397},[147,139665,134530],{"class":448},[147,139667,51765],{"class":397},[147,139669,1565],{"class":157},[147,139671,139672],{"class":149,"line":1475},[147,139673,1839],{"class":157},[19,139675,139676],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1406,139678,139679,139682,139688,139694,139706],{},[353,139680,139681],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[353,139683,139684,139685,120507],{},"里面的布局利用 自定义列表来实现（",[51,139686,139687],{},"dl > dt + dd",[353,139689,139215,139690,139693],{},[51,139691,139692],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[353,139695,139215,139696,139699,139700,18683,139702,139705],{},[51,139697,139698],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[51,139701,139698],{},[51,139703,139704],{},"dd","之间有些距离",[353,139707,139708],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,139710,138554],{},[138,139712,139713],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,139714,139715,139721,139733],{"__ignoreMap":143},[147,139716,139717,139719],{"class":149,"line":150},[147,139718,51884],{"class":153},[147,139720,15845],{"class":157},[147,139722,139723,139725,139727,139729,139731],{"class":149,"line":312},[147,139724,70743],{"class":448},[147,139726,51710],{"class":157},[147,139728,590],{"class":448},[147,139730,51829],{"class":448},[147,139732,1565],{"class":157},[147,139734,139735],{"class":149,"line":1454},[147,139736,1839],{"class":157},[19,139738,138594],{},[138,139740,139741],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,139742,139743,139749,139761],{"__ignoreMap":143},[147,139744,139745,139747],{"class":149,"line":150},[147,139746,51884],{"class":153},[147,139748,15845],{"class":157},[147,139750,139751,139753,139755,139757,139759],{"class":149,"line":312},[147,139752,70743],{"class":448},[147,139754,51710],{"class":157},[147,139756,590],{"class":448},[147,139758,51829],{"class":448},[147,139760,1565],{"class":157},[147,139762,139763],{"class":149,"line":1454},[147,139764,1839],{"class":157},[19,139766,139767],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1406,139769,139770,139779,139782,139793],{},[353,139771,139772,139773,139775,139776,139778],{},"分为上下两块，上面是 ",[51,139774,131935],{}," 友情链接，下面是 ",[51,139777,131928],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[353,139780,139781],{},"把内容分别复制到相应模块中",[353,139783,139215,139784,139786,139787,139789,139790,139792],{},[51,139785,131935],{}," 设置 15px 的下外边距，给",[51,139788,131935],{}," 里面 的 ",[51,139791,637],{}," 标签设置 左右 3px 的外边距",[353,139794,139795,139796,139798],{},"给",[51,139797,131928],{}," 设置 20px 的行高",[19,139800,138554],{},[138,139802,139803],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,139804,139805,139811,139823],{"__ignoreMap":143},[147,139806,139807,139809],{"class":149,"line":150},[147,139808,51884],{"class":153},[147,139810,15845],{"class":157},[147,139812,139813,139815,139817,139819,139821],{"class":149,"line":312},[147,139814,70743],{"class":448},[147,139816,51710],{"class":157},[147,139818,590],{"class":448},[147,139820,51829],{"class":448},[147,139822,1565],{"class":157},[147,139824,139825],{"class":149,"line":1454},[147,139826,1839],{"class":157},[19,139828,138594],{},[138,139830,139831],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,139832,139833,139839,139851],{"__ignoreMap":143},[147,139834,139835,139837],{"class":149,"line":150},[147,139836,51884],{"class":153},[147,139838,15845],{"class":157},[147,139840,139841,139843,139845,139847,139849],{"class":149,"line":312},[147,139842,70743],{"class":448},[147,139844,51710],{"class":157},[147,139846,590],{"class":448},[147,139848,51829],{"class":448},[147,139850,1565],{"class":157},[147,139852,139853],{"class":149,"line":1454},[147,139854,1839],{"class":157},[19,139856,139857],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[308,139859,139860],{},"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":143,"searchDepth":312,"depth":312,"links":139862},[139863,139864,139865,139872],{"id":138143,"depth":312,"text":138144},{"id":138162,"depth":312,"text":138163},{"id":138189,"depth":312,"text":138190,"children":139866},[139867,139868,139869,139870,139871],{"id":138193,"depth":1454,"text":138194},{"id":138206,"depth":1454,"text":138207},{"id":138230,"depth":1454,"text":138231},{"id":138252,"depth":1454,"text":138253},{"id":138324,"depth":1454,"text":138325},{"id":138450,"depth":312,"text":138451,"children":139873},[139874,139875,139876,139877,139879],{"id":138454,"depth":1454,"text":138455},{"id":138461,"depth":1454,"text":138462},{"id":138633,"depth":1454,"text":138634},{"id":139174,"depth":1454,"text":139878},"15.4.4 nav导航模块制作",{"id":139472,"depth":1454,"text":139473},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":138135,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139886,"title":139887,"body":139888,"description":321,"extension":322,"meta":142290,"navigation":324,"path":142291,"seo":142292,"stem":142293,"__hash__":142294},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139889,"toc":142267},[139890,139893,139897,139901,139913,139916,139919,139922,139933,139935,139959,139961,139985,139990,139993,139995,140031,140033,140069,140072,140077,140080,140083,140086,140116,140123,140126,140136,140138,140172,140175,140209,140215,140232,140234,140270,140272,140308,140313,140338,140340,140366,140368,140392,140399,140402,140466,140468,140510,140512,140552,140559,140564,140566,140596,140598,140628,140632,140635,140642,140654,140656,140682,140684,140708,140711,140713,140737,140743,140753,140755,140785,140787,140817,140824,140865,140867,140903,140905,140941,140945,140948,140951,140954,140960,140965,140968,140991,140994,141018,141021,141045,141050,141053,141056,141059,141062,141065,141139,141141,141171,141173,141203,141206,141209,141241,141245,141249,141263,141272,141275,141280,141282,141376,141378,141472,141495,141497,141521,141523,141547,141554,141557,141567,141569,141593,141598,141606,141608,141638,141643,141683,141685,141711,141713,141739,141743,141746,141751,141754,141758,141766,141773,141781,141783,141813,141815,141845,141853,141856,141859,141861,141891,141893,141923,141926,141931,141933,141957,141959,141983,141986,142071,142073,142097,142099,142123,142127,142129,142153,142155,142189,142193,142207,142210,142215,142218,142223,142226,142256,142264],[10,139891,139887],{"id":139892},"_16-品优购项目下篇-主体与页面开发",[14,139894,139896],{"id":139895},"_161-项目主体模块制作","16.1 项目主体模块制作",[367,139898,139900],{"id":139899},"_1611-首页制作","16.1.1 首页制作",[19,139902,139903,139905,139906,139908,139909,139912],{},[234,139904,102330],{}," 主体模块是 ",[234,139907,74331],{}," 里面专有的，注意需要新的样式文件 ",[234,139910,139911],{},"index.css，"," 就不要写在common.css中了",[29,139914],{"style":31,"src":139915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[29,139917],{"style":31,"src":139918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,139920,139921],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1406,139923,139924,139927,139930],{},[353,139925,139926],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[353,139928,139929],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[353,139931,139932],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,139934,138554],{},[138,139936,139937],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,139938,139939,139945,139955],{"__ignoreMap":143},[147,139940,139941,139943],{"class":149,"line":150},[147,139942,130563],{"class":2237},[147,139944,15845],{"class":157},[147,139946,139947,139949,139951,139953],{"class":149,"line":312},[147,139948,131195],{"class":448},[147,139950,51710],{"class":157},[147,139952,24009],{"class":448},[147,139954,1565],{"class":157},[147,139956,139957],{"class":149,"line":1454},[147,139958,1839],{"class":157},[19,139960,138594],{},[138,139962,139963],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,139964,139965,139971,139981],{"__ignoreMap":143},[147,139966,139967,139969],{"class":149,"line":150},[147,139968,130563],{"class":2237},[147,139970,15845],{"class":157},[147,139972,139973,139975,139977,139979],{"class":149,"line":312},[147,139974,131195],{"class":448},[147,139976,51710],{"class":157},[147,139978,24009],{"class":448},[147,139980,1565],{"class":157},[147,139982,139983],{"class":149,"line":1454},[147,139984,1839],{"class":157},[350,139986,139987],{},[353,139988,139989],{},"左侧focus模块制作",[29,139991],{"style":31,"src":139992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,139994,138554],{},[138,139996,139997],{"className":140,"code":128038,"language":142,"meta":143,"style":143},[51,139998,139999,140007,140017,140027],{"__ignoreMap":143},[147,140000,140001,140003,140005],{"class":149,"line":150},[147,140002,54094],{"class":153},[147,140004,62173],{"class":2237},[147,140006,15845],{"class":157},[147,140008,140009,140011,140013,140015],{"class":149,"line":312},[147,140010,128053],{"class":448},[147,140012,51710],{"class":157},[147,140014,55162],{"class":448},[147,140016,1565],{"class":157},[147,140018,140019,140021,140023,140025],{"class":149,"line":1454},[147,140020,71071],{"class":448},[147,140022,51710],{"class":157},[147,140024,55010],{"class":448},[147,140026,1565],{"class":157},[147,140028,140029],{"class":149,"line":1469},[147,140030,1839],{"class":157},[19,140032,138594],{},[138,140034,140035],{"className":140,"code":128038,"language":142,"meta":143,"style":143},[51,140036,140037,140045,140055,140065],{"__ignoreMap":143},[147,140038,140039,140041,140043],{"class":149,"line":150},[147,140040,54094],{"class":153},[147,140042,62173],{"class":2237},[147,140044,15845],{"class":157},[147,140046,140047,140049,140051,140053],{"class":149,"line":312},[147,140048,128053],{"class":448},[147,140050,51710],{"class":157},[147,140052,55162],{"class":448},[147,140054,1565],{"class":157},[147,140056,140057,140059,140061,140063],{"class":149,"line":1454},[147,140058,71071],{"class":448},[147,140060,51710],{"class":157},[147,140062,55010],{"class":448},[147,140064,1565],{"class":157},[147,140066,140067],{"class":149,"line":1469},[147,140068,1839],{"class":157},[19,140070,140071],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[350,140073,140074],{"start":312},[353,140075,140076],{},"右侧newsflash模块制作",[29,140078],{"style":31,"src":140079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,140081,140082],{},"右侧的模块 分为上中下三个盒子",[19,140084,140085],{},"结构代码：",[138,140087,140088],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,140089,140090],{"__ignoreMap":143},[147,140091,140092,140094,140096,140098,140100,140102,140104,140106,140108,140110,140112,140114],{"class":149,"line":150},[147,140093,1309],{"class":157},[147,140095,29],{"class":153},[147,140097,55512],{"class":2237},[147,140099,445],{"class":157},[147,140101,134232],{"class":504},[147,140103,55520],{"class":2237},[147,140105,445],{"class":157},[147,140107,134239],{"class":504},[147,140109,134242],{"class":2237},[147,140111,445],{"class":157},[147,140113,134247],{"class":504},[147,140115,51580],{"class":157},[19,140117,140118,140119,140122],{},"1 号盒子为 ",[51,140120,140121],{},"news"," 新闻模块 高度为 165px",[29,140124],{"style":31,"src":140125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,140127,140128,140129,140132,140133],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[51,140130,140131],{},"news-hd","，下面是 ",[51,140134,140135],{},"news-bd",[19,140137,140085],{},[138,140139,140140],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,140141,140142,140146,140160,140164],{"__ignoreMap":143},[147,140143,140144],{"class":149,"line":150},[147,140145,130826],{"class":458},[147,140147,140148,140150,140152,140154,140156,140158],{"class":149,"line":312},[147,140149,1309],{"class":157},[147,140151,51884],{"class":153},[147,140153,53759],{"class":2237},[147,140155,445],{"class":157},[147,140157,130839],{"class":504},[147,140159,51580],{"class":157},[147,140161,140162],{"class":149,"line":1454},[147,140163,130846],{"class":157},[147,140165,140166,140168,140170],{"class":149,"line":1469},[147,140167,52058],{"class":157},[147,140169,51884],{"class":153},[147,140171,51580],{"class":157},[19,140173,140174],{},"样式代码：",[138,140176,140177],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,140178,140179,140183,140197,140201],{"__ignoreMap":143},[147,140180,140181],{"class":149,"line":150},[147,140182,130826],{"class":458},[147,140184,140185,140187,140189,140191,140193,140195],{"class":149,"line":312},[147,140186,1309],{"class":157},[147,140188,51884],{"class":153},[147,140190,53759],{"class":2237},[147,140192,445],{"class":157},[147,140194,130839],{"class":504},[147,140196,51580],{"class":157},[147,140198,140199],{"class":149,"line":1454},[147,140200,130846],{"class":157},[147,140202,140203,140205,140207],{"class":149,"line":1469},[147,140204,52058],{"class":157},[147,140206,51884],{"class":153},[147,140208,51580],{"class":157},[19,140210,140211,140212,140214],{},"上面是",[51,140213,140131],{},"，设置高度是 33px，设置下边框",[1406,140216,140217,140223],{},[353,140218,140219,140220,140222],{},"里面放一个",[51,140221,23183],{}," 标题",[353,140224,140225,140226,140228,140229,140231],{},"放一个a",[51,140227,281],{},"，内容是 更多，然后让 ",[51,140230,637],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,140233,140085],{},[138,140235,140236],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,140237,140238,140246,140256,140266],{"__ignoreMap":143},[147,140239,140240,140242,140244],{"class":149,"line":150},[147,140241,51884],{"class":153},[147,140243,137716],{"class":2237},[147,140245,15845],{"class":157},[147,140247,140248,140250,140252,140254],{"class":149,"line":312},[147,140249,137723],{"class":448},[147,140251,51710],{"class":157},[147,140253,7926],{"class":504},[147,140255,1565],{"class":157},[147,140257,140258,140260,140262,140264],{"class":149,"line":1454},[147,140259,128331],{"class":448},[147,140261,51710],{"class":157},[147,140263,61142],{"class":448},[147,140265,1565],{"class":157},[147,140267,140268],{"class":149,"line":1469},[147,140269,1839],{"class":157},[19,140271,140174],{},[138,140273,140274],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,140275,140276,140284,140294,140304],{"__ignoreMap":143},[147,140277,140278,140280,140282],{"class":149,"line":150},[147,140279,51884],{"class":153},[147,140281,137716],{"class":2237},[147,140283,15845],{"class":157},[147,140285,140286,140288,140290,140292],{"class":149,"line":312},[147,140287,137723],{"class":448},[147,140289,51710],{"class":157},[147,140291,7926],{"class":504},[147,140293,1565],{"class":157},[147,140295,140296,140298,140300,140302],{"class":149,"line":1454},[147,140297,128331],{"class":448},[147,140299,51710],{"class":157},[147,140301,61142],{"class":448},[147,140303,1565],{"class":157},[147,140305,140306],{"class":149,"line":1469},[147,140307,1839],{"class":157},[19,140309,140310,140311],{},"下面是",[51,140312,140135],{},[1406,140314,140315,140323],{},[353,140316,140317,140318,101290,140320,140322],{},"里面包含 ",[51,140319,1406],{},[51,140321,353],{}," 还有链接",[353,140324,139795,140325,140327,140328,140330,140331,140334,140335],{},[51,140326,353],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[51,140329,131381],{}," 2.设置 ",[51,140332,140333],{},"white-space: nowrap;"," 3. 设置 ",[51,140336,140337],{},"text-overflow: ellipsis;",[19,140339,140085],{},[138,140341,140343],{"className":140,"code":140342,"language":142,"meta":143,"style":143},"div {\n  overflow: hidden;\n}\n",[51,140344,140345,140351,140362],{"__ignoreMap":143},[147,140346,140347,140349],{"class":149,"line":150},[147,140348,51884],{"class":153},[147,140350,15845],{"class":157},[147,140352,140353,140356,140358,140360],{"class":149,"line":312},[147,140354,140355],{"class":448},"  overflow",[147,140357,51710],{"class":157},[147,140359,61987],{"class":448},[147,140361,1565],{"class":157},[147,140363,140364],{"class":149,"line":1454},[147,140365,1839],{"class":157},[19,140367,140174],{},[138,140369,140370],{"className":140,"code":140342,"language":142,"meta":143,"style":143},[51,140371,140372,140378,140388],{"__ignoreMap":143},[147,140373,140374,140376],{"class":149,"line":150},[147,140375,51884],{"class":153},[147,140377,15845],{"class":157},[147,140379,140380,140382,140384,140386],{"class":149,"line":312},[147,140381,140355],{"class":448},[147,140383,51710],{"class":157},[147,140385,61987],{"class":448},[147,140387,1565],{"class":157},[147,140389,140390],{"class":149,"line":1454},[147,140391,1839],{"class":157},[19,140393,140394,140395,140398],{},"2 号盒子为 ",[51,140396,140397],{},"lifeservice"," 生活服务模块 高度为 209px",[29,140400],{"style":31,"src":140401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1406,140403,140404,140407,140417,140441,140452],{},[353,140405,140406],{},"设置边框（左右下边框）",[353,140408,140409,140410,140413,140414,140416],{},"里面的内容 是 ",[51,140411,140412],{},"ul > 12*li","，给",[51,140415,353],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[353,140418,140419,140420],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1406,140421,140422,140427,140436],{},[353,140423,140424,140426],{},[51,140425,140397],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[353,140428,140429,140430,140432,140433,140435],{},"可以让 ",[51,140431,140397],{}," 里面的 ",[51,140434,1406],{}," 宽度为 252，就可以装的下 4 个 小 li",[353,140437,140438,140440],{},[51,140439,140397],{}," 盒子 overflow 隐藏多余的部分就可以了",[353,140442,116737,140443,140445,140446,140448,140449,140451],{},[51,140444,353],{}," 里面放一个 ",[51,140447,840],{},"（里面放图标），下面的文本用 ",[51,140450,19],{}," 标签包裹",[353,140453,139215,140454,140456,140457,140459,140460,139249,140462,140465],{},[51,140455,840],{}," 设置 24px宽和28px的高（注意 ",[51,140458,840],{}," 是行内元素， 转成行内块），给 ",[51,140461,353],{},[51,140463,140464],{},"text-align:center"," 让里面内容居中显示",[19,140467,140085],{},[138,140469,140471],{"className":140,"code":140470,"language":142,"meta":143,"style":143},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[51,140472,140473,140491,140496,140506],{"__ignoreMap":143},[147,140474,140475,140477,140479,140481,140483,140485,140487,140489],{"class":149,"line":150},[147,140476,147],{"class":153},[147,140478,12709],{"class":157},[147,140480,637],{"class":153},[147,140482,12709],{"class":157},[147,140484,23826],{"class":153},[147,140486,12709],{"class":157},[147,140488,234],{"class":153},[147,140490,15845],{"class":157},[147,140492,140493],{"class":149,"line":312},[147,140494,140495],{"class":458},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[147,140497,140498,140500,140502,140504],{"class":149,"line":1454},[147,140499,128331],{"class":448},[147,140501,51710],{"class":157},[147,140503,128393],{"class":448},[147,140505,1565],{"class":157},[147,140507,140508],{"class":149,"line":1469},[147,140509,1839],{"class":157},[19,140511,140174],{},[138,140513,140514],{"className":140,"code":140470,"language":142,"meta":143,"style":143},[51,140515,140516,140534,140538,140548],{"__ignoreMap":143},[147,140517,140518,140520,140522,140524,140526,140528,140530,140532],{"class":149,"line":150},[147,140519,147],{"class":153},[147,140521,12709],{"class":157},[147,140523,637],{"class":153},[147,140525,12709],{"class":157},[147,140527,23826],{"class":153},[147,140529,12709],{"class":157},[147,140531,234],{"class":153},[147,140533,15845],{"class":157},[147,140535,140536],{"class":149,"line":312},[147,140537,140495],{"class":458},[147,140539,140540,140542,140544,140546],{"class":149,"line":1454},[147,140541,128331],{"class":448},[147,140543,51710],{"class":157},[147,140545,128393],{"class":448},[147,140547,1565],{"class":157},[147,140549,140550],{"class":149,"line":1469},[147,140551,1839],{"class":157},[19,140553,140554,140555,140558],{},"3 号盒子为 ",[51,140556,140557],{},"bargain"," 特价商品",[1406,140560,140561],{},[353,140562,140563],{},"这个比较简单，直接插入一张图片即可",[19,140565,140085],{},[138,140567,140568],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,140569,140570],{"__ignoreMap":143},[147,140571,140572,140574,140576,140578,140580,140582,140584,140586,140588,140590,140592,140594],{"class":149,"line":150},[147,140573,1309],{"class":157},[147,140575,29],{"class":153},[147,140577,55512],{"class":2237},[147,140579,445],{"class":157},[147,140581,134232],{"class":504},[147,140583,55520],{"class":2237},[147,140585,445],{"class":157},[147,140587,134239],{"class":504},[147,140589,134242],{"class":2237},[147,140591,445],{"class":157},[147,140593,134247],{"class":504},[147,140595,51580],{"class":157},[19,140597,140174],{},[138,140599,140600],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,140601,140602],{"__ignoreMap":143},[147,140603,140604,140606,140608,140610,140612,140614,140616,140618,140620,140622,140624,140626],{"class":149,"line":150},[147,140605,1309],{"class":157},[147,140607,29],{"class":153},[147,140609,55512],{"class":2237},[147,140611,445],{"class":157},[147,140613,134232],{"class":504},[147,140615,55520],{"class":2237},[147,140617,445],{"class":157},[147,140619,134239],{"class":504},[147,140621,134242],{"class":2237},[147,140623,445],{"class":157},[147,140625,134247],{"class":504},[147,140627,51580],{"class":157},[367,140629,140631],{"id":140630},"_1612-推荐模块制作","16.1.2 推荐模块制作",[29,140633],{"style":31,"src":140634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,140636,140637,140638,140641],{},"大盒子 ",[51,140639,140640],{},"recom"," 推荐模块 recommend",[1406,140643,140644],{},[353,140645,140646,140647,140649,140650,140653],{},"给这个 ",[51,140648,140640],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[51,140651,140652],{},"#ebebeb","），设置距离上边 12px",[19,140655,140085],{},[138,140657,140659],{"className":140,"code":140658,"language":142,"meta":143,"style":143},"div {\n  background-color: #f0f0f0;\n}\n",[51,140660,140661,140667,140678],{"__ignoreMap":143},[147,140662,140663,140665],{"class":149,"line":150},[147,140664,51884],{"class":153},[147,140666,15845],{"class":157},[147,140668,140669,140671,140673,140676],{"class":149,"line":312},[147,140670,71151],{"class":448},[147,140672,51710],{"class":157},[147,140674,140675],{"class":448},"#f0f0f0",[147,140677,1565],{"class":157},[147,140679,140680],{"class":149,"line":1454},[147,140681,1839],{"class":157},[19,140683,140174],{},[138,140685,140686],{"className":140,"code":140658,"language":142,"meta":143,"style":143},[51,140687,140688,140694,140704],{"__ignoreMap":143},[147,140689,140690,140692],{"class":149,"line":150},[147,140691,51884],{"class":153},[147,140693,15845],{"class":157},[147,140695,140696,140698,140700,140702],{"class":149,"line":312},[147,140697,71151],{"class":448},[147,140699,51710],{"class":157},[147,140701,140675],{"class":448},[147,140703,1565],{"class":157},[147,140705,140706],{"class":149,"line":1454},[147,140707,1839],{"class":157},[19,140709,140710],{},"里面包含 2 个盒子， 浮动即可",[19,140712,140085],{},[138,140714,140715],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,140716,140717,140723,140733],{"__ignoreMap":143},[147,140718,140719,140721],{"class":149,"line":150},[147,140720,130563],{"class":2237},[147,140722,15845],{"class":157},[147,140724,140725,140727,140729,140731],{"class":149,"line":312},[147,140726,131195],{"class":448},[147,140728,51710],{"class":157},[147,140730,24009],{"class":448},[147,140732,1565],{"class":157},[147,140734,140735],{"class":149,"line":1454},[147,140736,1839],{"class":157},[19,140738,140739,140740],{},"1 号盒子 ",[51,140741,140742],{},"recom_hd",[1406,140744,140745,140748],{},[353,140746,140747],{},"设置宽度205px，高度163px",[353,140749,140219,140750,140752],{},[51,140751,29],{},"标签，插入图片即可",[19,140754,140085],{},[138,140756,140757],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,140758,140759],{"__ignoreMap":143},[147,140760,140761,140763,140765,140767,140769,140771,140773,140775,140777,140779,140781,140783],{"class":149,"line":150},[147,140762,1309],{"class":157},[147,140764,29],{"class":153},[147,140766,55512],{"class":2237},[147,140768,445],{"class":157},[147,140770,134232],{"class":504},[147,140772,55520],{"class":2237},[147,140774,445],{"class":157},[147,140776,134239],{"class":504},[147,140778,134242],{"class":2237},[147,140780,445],{"class":157},[147,140782,134247],{"class":504},[147,140784,51580],{"class":157},[19,140786,140174],{},[138,140788,140789],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,140790,140791],{"__ignoreMap":143},[147,140792,140793,140795,140797,140799,140801,140803,140805,140807,140809,140811,140813,140815],{"class":149,"line":150},[147,140794,1309],{"class":157},[147,140796,29],{"class":153},[147,140798,55512],{"class":2237},[147,140800,445],{"class":157},[147,140802,134232],{"class":504},[147,140804,55520],{"class":2237},[147,140806,445],{"class":157},[147,140808,134239],{"class":504},[147,140810,134242],{"class":2237},[147,140812,445],{"class":157},[147,140814,134247],{"class":504},[147,140816,51580],{"class":157},[19,140818,140819,140820,140823],{},"2 号盒子 ",[51,140821,140822],{},"recom_bd"," ，注意里面的小竖线",[1406,140825,140826,140837,140840,140845,140850],{},[353,140827,140828,140829,140831,140832,140834,140835],{},"右侧结构里面放 ",[51,140830,1406],{}," 包含 4个 ",[51,140833,353],{},"，每个li里面包含一个",[51,140836,29],{},[353,140838,140839],{},"直接利用切片工具把里面的内容当成一张图片",[353,140841,139215,140842,140844],{},[51,140843,353],{}," 设置浮动",[353,140846,139215,140847,140849],{},[51,140848,29],{}," 设置宽高，宽度 248px，高度 163px",[353,140851,140852,140853,140413,140856,140858,140859,140861,140862],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[51,140854,140855],{},"top 10px",[51,140857,353],{},"设置相对定位（注意，最后一个",[51,140860,353],{},"不用设置伪元素），可以利用 ",[51,140863,140864],{},"nth-child(-n+3){...}",[19,140866,140085],{},[138,140868,140869],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,140870,140871,140879,140889,140899],{"__ignoreMap":143},[147,140872,140873,140875,140877],{"class":149,"line":150},[147,140874,51884],{"class":153},[147,140876,137716],{"class":2237},[147,140878,15845],{"class":157},[147,140880,140881,140883,140885,140887],{"class":149,"line":312},[147,140882,137723],{"class":448},[147,140884,51710],{"class":157},[147,140886,7926],{"class":504},[147,140888,1565],{"class":157},[147,140890,140891,140893,140895,140897],{"class":149,"line":1454},[147,140892,128331],{"class":448},[147,140894,51710],{"class":157},[147,140896,61142],{"class":448},[147,140898,1565],{"class":157},[147,140900,140901],{"class":149,"line":1469},[147,140902,1839],{"class":157},[19,140904,140174],{},[138,140906,140907],{"className":140,"code":138557,"language":142,"meta":143,"style":143},[51,140908,140909,140917,140927,140937],{"__ignoreMap":143},[147,140910,140911,140913,140915],{"class":149,"line":150},[147,140912,51884],{"class":153},[147,140914,137716],{"class":2237},[147,140916,15845],{"class":157},[147,140918,140919,140921,140923,140925],{"class":149,"line":312},[147,140920,137723],{"class":448},[147,140922,51710],{"class":157},[147,140924,7926],{"class":504},[147,140926,1565],{"class":157},[147,140928,140929,140931,140933,140935],{"class":149,"line":1454},[147,140930,128331],{"class":448},[147,140932,51710],{"class":157},[147,140934,61142],{"class":448},[147,140936,1565],{"class":157},[147,140938,140939],{"class":149,"line":1469},[147,140940,1839],{"class":157},[367,140942,140944],{"id":140943},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[29,140946],{"style":31,"src":140947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,140949,140950],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,140952,140953],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,140955,140956,140959],{},[51,140957,140958],{},"box_hd"," 制作",[19,140961,140739,140962,140964],{},[51,140963,140958],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[29,140966],{"style":31,"src":140967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1406,140969,140970,140975,140980,140983],{},[353,140971,140972,140974],{},[51,140973,140958],{}," 给 30px 的高度，2个像素的下边框",[353,140976,140977,140978],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[51,140979,139226],{},[353,140981,140982],{},"左侧盒左浮动，右侧盒子右浮动",[353,140984,140985,140987,140988,140990],{},[51,140986,637],{},"标签之间的距离用左右的",[51,140989,31157],{},"撑开即可",[19,140992,140993],{},"结构代码",[138,140995,140996],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,140997,140998,141004,141014],{"__ignoreMap":143},[147,140999,141000,141002],{"class":149,"line":150},[147,141001,130563],{"class":2237},[147,141003,15845],{"class":157},[147,141005,141006,141008,141010,141012],{"class":149,"line":312},[147,141007,131195],{"class":448},[147,141009,51710],{"class":157},[147,141011,24009],{"class":448},[147,141013,1565],{"class":157},[147,141015,141016],{"class":149,"line":1454},[147,141017,1839],{"class":157},[19,141019,141020],{},"样式代码",[138,141022,141023],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,141024,141025,141031,141041],{"__ignoreMap":143},[147,141026,141027,141029],{"class":149,"line":150},[147,141028,130563],{"class":2237},[147,141030,15845],{"class":157},[147,141032,141033,141035,141037,141039],{"class":149,"line":312},[147,141034,131195],{"class":448},[147,141036,51710],{"class":157},[147,141038,24009],{"class":448},[147,141040,1565],{"class":157},[147,141042,141043],{"class":149,"line":1454},[147,141044,1839],{"class":157},[19,141046,141047,140959],{},[51,141048,141049],{},"box_bd",[19,141051,141052],{},"2 号盒子 box_bd，不要给高度",[29,141054],{"style":31,"src":141055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,141057,141058],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,141060,141061],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,141063,141064],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1406,141066,141067,141079,141095],{},[353,141068,141069,141071,141072,141075,141076,141078],{},[51,141070,141049],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[51,141073,141074],{},"tab_content","，在",[51,141077,141074],{}," 里面包裹tab选项卡对应的内容",[353,141080,141081,141082,141085,141086,141088,141089,141091,141092,141094],{},"内容被一个大盒子包裹（",[51,141083,141084],{},"tab_list_item","），里面是 ",[51,141087,1406],{}," 包裹 5个 ",[51,141090,353],{},"，每个",[51,141093,353],{},"设置对应的宽度，然后设置浮动",[353,141096,141097,141098,141100,141101,141103,141104],{},"而这5个",[51,141099,353],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[51,141102,353],{},"设置",[1406,141105,141106,141124,141127],{},[353,141107,141108,141109,141111,141112,141114,141115,141117,141118,141120,141121,141123],{},"第一个小 ",[51,141110,353],{}," 分为上下结构，上面是 ",[51,141113,1406],{}," 包裹 ",[51,141116,353],{}," ，",[51,141119,353],{},"里面包裹 ",[51,141122,637],{},"，下面插入一张图片",[353,141125,141126],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[353,141128,141129,141130,141132,141133,141135,141136,141138],{},"后面的小 ",[51,141131,353],{}," 里面先放一个",[51,141134,637],{},"标签，然后在",[51,141137,637],{},"标签里面插入图片即可",[19,141140,140993],{},[138,141142,141143],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,141144,141145],{"__ignoreMap":143},[147,141146,141147,141149,141151,141153,141155,141157,141159,141161,141163,141165,141167,141169],{"class":149,"line":150},[147,141148,1309],{"class":157},[147,141150,29],{"class":153},[147,141152,55512],{"class":2237},[147,141154,445],{"class":157},[147,141156,134232],{"class":504},[147,141158,55520],{"class":2237},[147,141160,445],{"class":157},[147,141162,134239],{"class":504},[147,141164,134242],{"class":2237},[147,141166,445],{"class":157},[147,141168,134247],{"class":504},[147,141170,51580],{"class":157},[19,141172,141020],{},[138,141174,141175],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,141176,141177],{"__ignoreMap":143},[147,141178,141179,141181,141183,141185,141187,141189,141191,141193,141195,141197,141199,141201],{"class":149,"line":150},[147,141180,1309],{"class":157},[147,141182,29],{"class":153},[147,141184,55512],{"class":2237},[147,141186,445],{"class":157},[147,141188,134232],{"class":504},[147,141190,55520],{"class":2237},[147,141192,445],{"class":157},[147,141194,134239],{"class":504},[147,141196,134242],{"class":2237},[147,141198,445],{"class":157},[147,141200,134247],{"class":504},[147,141202,51580],{"class":157},[19,141204,141205],{},"tab栏切换需求！！！！！！介绍：",[29,141207],{"style":31,"src":141208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1406,141210,141211,141219,141225,141228],{},[353,141212,141213,141216,141217],{},[51,141214,141215],{},"tab","栏的布局是 ",[51,141218,139226],{},[353,141220,141221,141222,141224],{},"有多少个",[51,141223,141215],{},"选项卡，那么对应就有多少个内容",[353,141226,141227],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[353,141229,141230,141231,141234,141235,141237,141238,141240],{},"等后面我们学习了",[51,141232,141233],{},"js","之后，我们就会配合",[51,141236,141233],{},"来实现，",[51,141239,141215],{},"栏的切换",[14,141242,141244],{"id":141243},"_162-列表制作","16.2 列表制作",[367,141246,141248],{"id":141247},"_1621-准备工作","16.2.1 准备工作",[1406,141250,141251,141254,141257,141260],{},[353,141252,141253],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[353,141255,141256],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[353,141258,141259],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[353,141261,141262],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[367,141264,141266,141267,101290,141269,141271],{"id":141265},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[51,141268,131720],{},[51,141270,53986],{}," 修改",[29,141273],{"style":31,"src":141274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1406,141276,141277],{},[353,141278,141279],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,141281,140085],{},[138,141283,141284],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,141285,141286,141290,141304,141308,141322,141326,141340,141344,141358,141362],{"__ignoreMap":143},[147,141287,141288],{"class":149,"line":150},[147,141289,132154],{"class":458},[147,141291,141292,141294,141296,141298,141300,141302],{"class":149,"line":312},[147,141293,132159],{"class":2237},[147,141295,80079],{"class":157},[147,141297,129075],{"class":448},[147,141299,51710],{"class":157},[147,141301,132168],{"class":448},[147,141303,129645],{"class":157},[147,141305,141306],{"class":149,"line":1454},[147,141307,132175],{"class":458},[147,141309,141310,141312,141314,141316,141318,141320],{"class":149,"line":1469},[147,141311,132180],{"class":2237},[147,141313,80079],{"class":157},[147,141315,129075],{"class":448},[147,141317,51710],{"class":157},[147,141319,55037],{"class":448},[147,141321,129645],{"class":157},[147,141323,141324],{"class":149,"line":1475},[147,141325,132195],{"class":458},[147,141327,141328,141330,141332,141334,141336,141338],{"class":149,"line":1489},[147,141329,132200],{"class":2237},[147,141331,80079],{"class":157},[147,141333,129075],{"class":448},[147,141335,51710],{"class":157},[147,141337,55104],{"class":448},[147,141339,129645],{"class":157},[147,141341,141342],{"class":149,"line":1495},[147,141343,132215],{"class":458},[147,141345,141346,141348,141350,141352,141354,141356],{"class":149,"line":1586},[147,141347,132220],{"class":2237},[147,141349,80079],{"class":157},[147,141351,129075],{"class":448},[147,141353,51710],{"class":157},[147,141355,86505],{"class":448},[147,141357,129645],{"class":157},[147,141359,141360],{"class":149,"line":1592},[147,141361,132235],{"class":458},[147,141363,141364,141366,141368,141370,141372,141374],{"class":149,"line":1604},[147,141365,132240],{"class":2237},[147,141367,80079],{"class":157},[147,141369,129075],{"class":448},[147,141371,51710],{"class":157},[147,141373,132249],{"class":448},[147,141375,129645],{"class":157},[19,141377,140174],{},[138,141379,141380],{"className":140,"code":132147,"language":142,"meta":143,"style":143},[51,141381,141382,141386,141400,141404,141418,141422,141436,141440,141454,141458],{"__ignoreMap":143},[147,141383,141384],{"class":149,"line":150},[147,141385,132154],{"class":458},[147,141387,141388,141390,141392,141394,141396,141398],{"class":149,"line":312},[147,141389,132159],{"class":2237},[147,141391,80079],{"class":157},[147,141393,129075],{"class":448},[147,141395,51710],{"class":157},[147,141397,132168],{"class":448},[147,141399,129645],{"class":157},[147,141401,141402],{"class":149,"line":1454},[147,141403,132175],{"class":458},[147,141405,141406,141408,141410,141412,141414,141416],{"class":149,"line":1469},[147,141407,132180],{"class":2237},[147,141409,80079],{"class":157},[147,141411,129075],{"class":448},[147,141413,51710],{"class":157},[147,141415,55037],{"class":448},[147,141417,129645],{"class":157},[147,141419,141420],{"class":149,"line":1475},[147,141421,132195],{"class":458},[147,141423,141424,141426,141428,141430,141432,141434],{"class":149,"line":1489},[147,141425,132200],{"class":2237},[147,141427,80079],{"class":157},[147,141429,129075],{"class":448},[147,141431,51710],{"class":157},[147,141433,55104],{"class":448},[147,141435,129645],{"class":157},[147,141437,141438],{"class":149,"line":1495},[147,141439,132215],{"class":458},[147,141441,141442,141444,141446,141448,141450,141452],{"class":149,"line":1586},[147,141443,132220],{"class":2237},[147,141445,80079],{"class":157},[147,141447,129075],{"class":448},[147,141449,51710],{"class":157},[147,141451,86505],{"class":448},[147,141453,129645],{"class":157},[147,141455,141456],{"class":149,"line":1592},[147,141457,132235],{"class":458},[147,141459,141460,141462,141464,141466,141468,141470],{"class":149,"line":1604},[147,141461,132240],{"class":2237},[147,141463,80079],{"class":157},[147,141465,129075],{"class":448},[147,141467,51710],{"class":157},[147,141469,132249],{"class":448},[147,141471,129645],{"class":157},[1406,141473,141474,141485],{},[353,141475,141476,141477,141480,141481,101290,141483],{},"1 号盒子左侧浮动 ",[51,141478,141479],{},"sk_list"," 里面包含 ",[51,141482,1406],{},[51,141484,353],{},[353,141486,141487,141488,141480,141491,101290,141493],{},"2 号盒子左侧浮动 ",[51,141489,141490],{},"sk_con",[51,141492,1406],{},[51,141494,353],{},[19,141496,140085],{},[138,141498,141499],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,141500,141501,141507,141517],{"__ignoreMap":143},[147,141502,141503,141505],{"class":149,"line":150},[147,141504,130563],{"class":2237},[147,141506,15845],{"class":157},[147,141508,141509,141511,141513,141515],{"class":149,"line":312},[147,141510,131195],{"class":448},[147,141512,51710],{"class":157},[147,141514,24009],{"class":448},[147,141516,1565],{"class":157},[147,141518,141519],{"class":149,"line":1454},[147,141520,1839],{"class":157},[19,141522,140174],{},[138,141524,141525],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,141526,141527,141533,141543],{"__ignoreMap":143},[147,141528,141529,141531],{"class":149,"line":150},[147,141530,130563],{"class":2237},[147,141532,15845],{"class":157},[147,141534,141535,141537,141539,141541],{"class":149,"line":312},[147,141536,131195],{"class":448},[147,141538,51710],{"class":157},[147,141540,24009],{"class":448},[147,141542,1565],{"class":157},[147,141544,141545],{"class":149,"line":1454},[147,141546,1839],{"class":157},[367,141548,141550,141551],{"id":141549},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[51,141552,141553],{},"sk_container",[29,141555],{"style":31,"src":141556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1406,141558,141559,141564],{},[353,141560,140739,141561,141563],{},[51,141562,141553],{}," 给宽度 1200，不要给高度",[353,141565,141566],{},"一定不要忘记清除浮动",[19,141568,140085],{},[138,141570,141571],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,141572,141573,141579,141589],{"__ignoreMap":143},[147,141574,141575,141577],{"class":149,"line":150},[147,141576,130563],{"class":2237},[147,141578,15845],{"class":157},[147,141580,141581,141583,141585,141587],{"class":149,"line":312},[147,141582,131195],{"class":448},[147,141584,51710],{"class":157},[147,141586,24009],{"class":448},[147,141588,1565],{"class":157},[147,141590,141591],{"class":149,"line":1454},[147,141592,1839],{"class":157},[350,141594,141595],{},[353,141596,141597],{},"sk_hd制作",[1406,141599,141600],{},[353,141601,140819,141602,141605],{},[51,141603,141604],{},"sk_hd"," ，插入图片即可",[19,141607,140085],{},[138,141609,141610],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,141611,141612],{"__ignoreMap":143},[147,141613,141614,141616,141618,141620,141622,141624,141626,141628,141630,141632,141634,141636],{"class":149,"line":150},[147,141615,1309],{"class":157},[147,141617,29],{"class":153},[147,141619,55512],{"class":2237},[147,141621,445],{"class":157},[147,141623,134232],{"class":504},[147,141625,55520],{"class":2237},[147,141627,445],{"class":157},[147,141629,134239],{"class":504},[147,141631,134242],{"class":2237},[147,141633,445],{"class":157},[147,141635,134247],{"class":504},[147,141637,51580],{"class":157},[350,141639,141640],{"start":312},[353,141641,141642],{},"sk_bd制作",[1406,141644,141645],{},[353,141646,141647,141648,141651,141652,101290,141654,141656],{},"3 号盒子 ",[51,141649,141650],{},"sk_bd"," ，里面包含很多的 ",[51,141653,1406],{},[51,141655,353],{},[1406,141657,141658,141667],{},[353,141659,141660,141661,141663,141664,141666],{},"当鼠标移入到 ",[51,141662,353],{}," 上面的时候显示红色的边框，在这里先给 ",[51,141665,353],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[353,141668,141669,141670,141672,141673,141675,141676,141679,141680,141682],{},"由于给每个 ",[51,141671,353],{}," 都设置了外边距，导致一行的最后一个 ",[51,141674,353],{}," 掉了下来，在这里我们利用 ",[51,141677,141678],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[51,141681,353],{},"，去掉外边距就好了",[19,141684,140085],{},[138,141686,141687],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,141688,141689,141695,141707],{"__ignoreMap":143},[147,141690,141691,141693],{"class":149,"line":150},[147,141692,51884],{"class":153},[147,141694,15845],{"class":157},[147,141696,141697,141699,141701,141703,141705],{"class":149,"line":312},[147,141698,70743],{"class":448},[147,141700,51710],{"class":157},[147,141702,590],{"class":448},[147,141704,51829],{"class":448},[147,141706,1565],{"class":157},[147,141708,141709],{"class":149,"line":1454},[147,141710,1839],{"class":157},[19,141712,140174],{},[138,141714,141715],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,141716,141717,141723,141735],{"__ignoreMap":143},[147,141718,141719,141721],{"class":149,"line":150},[147,141720,51884],{"class":153},[147,141722,15845],{"class":157},[147,141724,141725,141727,141729,141731,141733],{"class":149,"line":312},[147,141726,70743],{"class":448},[147,141728,51710],{"class":157},[147,141730,590],{"class":448},[147,141732,51829],{"class":448},[147,141734,1565],{"class":157},[147,141736,141737],{"class":149,"line":1454},[147,141738,1839],{"class":157},[14,141740,141742],{"id":141741},"_163-注册页面制作","16.3 注册页面制作",[29,141744],{"style":31,"src":141745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,141747,141748,141750],{},[234,141749,9299],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[29,141752],{"style":31,"src":141753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[367,141755,141757],{"id":141756},"_1631-准备工作","16.3.1 准备工作",[1406,141759,141760,141763],{},[353,141761,141762],{},"创建register.html，引入 base.css，引入favicon图标",[353,141764,141765],{},"创建register.css ，在html页面进行引入",[367,141767,141769,141770,141772],{"id":141768},"_1632-header-头部实现","16.3.2 ",[51,141771,131720],{}," 头部实现",[1406,141774,141775,141778],{},[353,141776,141777],{},"整个内容用 版心 进行包裹",[353,141779,141780],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,141782,140085],{},[138,141784,141785],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,141786,141787],{"__ignoreMap":143},[147,141788,141789,141791,141793,141795,141797,141799,141801,141803,141805,141807,141809,141811],{"class":149,"line":150},[147,141790,1309],{"class":157},[147,141792,29],{"class":153},[147,141794,55512],{"class":2237},[147,141796,445],{"class":157},[147,141798,134232],{"class":504},[147,141800,55520],{"class":2237},[147,141802,445],{"class":157},[147,141804,134239],{"class":504},[147,141806,134242],{"class":2237},[147,141808,445],{"class":157},[147,141810,134247],{"class":504},[147,141812,51580],{"class":157},[19,141814,140174],{},[138,141816,141817],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,141818,141819],{"__ignoreMap":143},[147,141820,141821,141823,141825,141827,141829,141831,141833,141835,141837,141839,141841,141843],{"class":149,"line":150},[147,141822,1309],{"class":157},[147,141824,29],{"class":153},[147,141826,55512],{"class":2237},[147,141828,445],{"class":157},[147,141830,134232],{"class":504},[147,141832,55520],{"class":2237},[147,141834,445],{"class":157},[147,141836,134239],{"class":504},[147,141838,134242],{"class":2237},[147,141840,445],{"class":157},[147,141842,134247],{"class":504},[147,141844,51580],{"class":157},[367,141846,141848,141849,141852],{"id":141847},"_1633-registerarea-主体模块实现","16.3.3 ",[51,141850,141851],{},"registerarea"," 主体模块实现",[29,141854],{"style":31,"src":141855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,141857,141858],{},"整个大盒子 高度为 522px，设置4个边框",[19,141860,140085],{},[138,141862,141863],{"className":140,"code":130872,"language":142,"meta":143,"style":143},[51,141864,141865,141871,141887],{"__ignoreMap":143},[147,141866,141867,141869],{"class":149,"line":150},[147,141868,51884],{"class":153},[147,141870,15845],{"class":157},[147,141872,141873,141875,141877,141879,141881,141883,141885],{"class":149,"line":312},[147,141874,71169],{"class":448},[147,141876,51710],{"class":157},[147,141878,616],{"class":448},[147,141880,51765],{"class":397},[147,141882,51794],{"class":448},[147,141884,130107],{"class":448},[147,141886,1565],{"class":157},[147,141888,141889],{"class":149,"line":1454},[147,141890,1839],{"class":157},[19,141892,140174],{},[138,141894,141895],{"className":140,"code":130872,"language":142,"meta":143,"style":143},[51,141896,141897,141903,141919],{"__ignoreMap":143},[147,141898,141899,141901],{"class":149,"line":150},[147,141900,51884],{"class":153},[147,141902,15845],{"class":157},[147,141904,141905,141907,141909,141911,141913,141915,141917],{"class":149,"line":312},[147,141906,71169],{"class":448},[147,141908,51710],{"class":157},[147,141910,616],{"class":448},[147,141912,51765],{"class":397},[147,141914,51794],{"class":448},[147,141916,130107],{"class":448},[147,141918,1565],{"class":157},[147,141920,141921],{"class":149,"line":1454},[147,141922,1839],{"class":157},[19,141924,141925],{},"1号盒子 是一个 h3 标签，放标题",[1406,141927,141928],{},[353,141929,141930],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,141932,140085],{},[138,141934,141935],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,141936,141937,141943,141953],{"__ignoreMap":143},[147,141938,141939,141941],{"class":149,"line":150},[147,141940,130563],{"class":2237},[147,141942,15845],{"class":157},[147,141944,141945,141947,141949,141951],{"class":149,"line":312},[147,141946,131195],{"class":448},[147,141948,51710],{"class":157},[147,141950,24009],{"class":448},[147,141952,1565],{"class":157},[147,141954,141955],{"class":149,"line":1454},[147,141956,1839],{"class":157},[19,141958,140174],{},[138,141960,141961],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,141962,141963,141969,141979],{"__ignoreMap":143},[147,141964,141965,141967],{"class":149,"line":150},[147,141966,130563],{"class":2237},[147,141968,15845],{"class":157},[147,141970,141971,141973,141975,141977],{"class":149,"line":312},[147,141972,131195],{"class":448},[147,141974,51710],{"class":157},[147,141976,24009],{"class":448},[147,141978,1565],{"class":157},[147,141980,141981],{"class":149,"line":1454},[147,141982,1839],{"class":157},[19,141984,141985],{},"2号盒子 里面放注册的内容",[1406,141987,141988,141991,142000,142014,142027,142030,142033,142051,142065],{},[353,141989,141990],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[353,141992,141993,141994,141996,141997,141999],{},"里面的内容利用 ",[51,141995,1406],{}," 包含 ",[51,141998,353],{}," 来实现的（不需要用表格）",[353,142001,139229,142002,142004,142005,142007,142008,142010,142011,142013],{},[51,142003,353],{}," 里面，左侧放 ",[51,142006,33882],{}," 标签， 中间放",[51,142009,54094],{}," 标签， 右侧放 ",[51,142012,147],{}," 提示信息",[353,142015,142016,142017,142019,142020,142022,142023,142026],{},"左侧 ",[51,142018,33882],{},"里面的文字都是右对齐，我们可以给",[51,142021,33882],{},"设置一个宽度（88px），然后利用",[51,142024,142025],{},"text-align"," 来设置右对齐",[353,142028,142029],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[353,142031,142032],{},"右侧 span修饰一下文字颜色",[353,142034,142035,142036],{},"提示信息的样式优化",[1406,142037,142038,142041,142044],{},[353,142039,142040],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[353,142042,142043],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[353,142045,142046,142047,142050],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[51,142048,142049],{},"vertical-algin"," 来设置 图片与文字对齐方式",[353,142052,142053,142054],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1406,142055,142056,142062],{},[353,142057,142058,142059,142061],{},"设置 ",[51,142060,23826],{}," 的 左右 12px 的内边距，设置一下文字颜色",[353,142063,142064],{},"分别设置 背景颜色",[353,142066,142067,142068,142070],{},"同意协议 和 完成注册 都是用 ",[51,142069,353],{}," 进行包裹",[19,142072,140085],{},[138,142074,142075],{"className":140,"code":140658,"language":142,"meta":143,"style":143},[51,142076,142077,142083,142093],{"__ignoreMap":143},[147,142078,142079,142081],{"class":149,"line":150},[147,142080,51884],{"class":153},[147,142082,15845],{"class":157},[147,142084,142085,142087,142089,142091],{"class":149,"line":312},[147,142086,71151],{"class":448},[147,142088,51710],{"class":157},[147,142090,140675],{"class":448},[147,142092,1565],{"class":157},[147,142094,142095],{"class":149,"line":1454},[147,142096,1839],{"class":157},[19,142098,140174],{},[138,142100,142101],{"className":140,"code":140658,"language":142,"meta":143,"style":143},[51,142102,142103,142109,142119],{"__ignoreMap":143},[147,142104,142105,142107],{"class":149,"line":150},[147,142106,51884],{"class":153},[147,142108,15845],{"class":157},[147,142110,142111,142113,142115,142117],{"class":149,"line":312},[147,142112,71151],{"class":448},[147,142114,51710],{"class":157},[147,142116,140675],{"class":448},[147,142118,1565],{"class":157},[147,142120,142121],{"class":149,"line":1454},[147,142122,1839],{"class":157},[367,142124,142126],{"id":142125},"_1634-底部实现","16.3.4 底部实现",[19,142128,140085],{},[138,142130,142131],{"className":140,"code":140658,"language":142,"meta":143,"style":143},[51,142132,142133,142139,142149],{"__ignoreMap":143},[147,142134,142135,142137],{"class":149,"line":150},[147,142136,51884],{"class":153},[147,142138,15845],{"class":157},[147,142140,142141,142143,142145,142147],{"class":149,"line":312},[147,142142,71151],{"class":448},[147,142144,51710],{"class":157},[147,142146,140675],{"class":448},[147,142148,1565],{"class":157},[147,142150,142151],{"class":149,"line":1454},[147,142152,1839],{"class":157},[19,142154,140174],{},[138,142156,142157],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,142158,142159,142163,142177,142181],{"__ignoreMap":143},[147,142160,142161],{"class":149,"line":150},[147,142162,130826],{"class":458},[147,142164,142165,142167,142169,142171,142173,142175],{"class":149,"line":312},[147,142166,1309],{"class":157},[147,142168,51884],{"class":153},[147,142170,53759],{"class":2237},[147,142172,445],{"class":157},[147,142174,130839],{"class":504},[147,142176,51580],{"class":157},[147,142178,142179],{"class":149,"line":1454},[147,142180,130846],{"class":157},[147,142182,142183,142185,142187],{"class":149,"line":1469},[147,142184,52058],{"class":157},[147,142186,51884],{"class":153},[147,142188,51580],{"class":157},[14,142190,142192],{"id":142191},"_164-项目总结","16.4 项目总结",[350,142194,142195,142198,142201,142204],{},[353,142196,142197],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[353,142199,142200],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[353,142202,142203],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[353,142205,142206],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[29,142208],{"style":31,"src":142209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[350,142211,142212],{"start":1475},[353,142213,142214],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[29,142216],{"style":31,"src":142217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[350,142219,142220],{"start":1489},[353,142221,142222],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[29,142224],{"style":31,"src":142225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[138,142227,142228],{"className":127462,"code":136872,"language":127464,"meta":143,"style":143},[51,142229,142230],{"__ignoreMap":143},[147,142231,142232,142234,142236,142238,142240,142242,142244,142246,142248,142250,142252,142254],{"class":149,"line":150},[147,142233,1309],{"class":157},[147,142235,54094],{"class":153},[147,142237,54097],{"class":2237},[147,142239,445],{"class":157},[147,142241,62972],{"class":504},[147,142243,15193],{"class":2237},[147,142245,445],{"class":157},[147,142247,136893],{"class":504},[147,142249,61293],{"class":2237},[147,142251,445],{"class":157},[147,142253,136900],{"class":504},[147,142255,51580],{"class":157},[350,142257,142258,142261],{"start":1495},[353,142259,142260],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[353,142262,142263],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[308,142265,142266],{},"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":143,"searchDepth":312,"depth":312,"links":142268},[142269,142274,142281,142289],{"id":139895,"depth":312,"text":139896,"children":142270},[142271,142272,142273],{"id":139899,"depth":1454,"text":139900},{"id":140630,"depth":1454,"text":140631},{"id":140943,"depth":1454,"text":140944},{"id":141243,"depth":312,"text":141244,"children":142275},[142276,142277,142279],{"id":141247,"depth":1454,"text":141248},{"id":141265,"depth":1454,"text":142278},"16.2.2 列表页 header 和 nav 修改",{"id":141549,"depth":1454,"text":142280},"16.2.3 列表页主体 sk_container",{"id":141741,"depth":312,"text":141742,"children":142282},[142283,142284,142286,142288],{"id":141756,"depth":1454,"text":141757},{"id":141768,"depth":1454,"text":142285},"16.3.2 header 头部实现",{"id":141847,"depth":1454,"text":142287},"16.3.3 registerarea 主体模块实现",{"id":142125,"depth":1454,"text":142126},{"id":142191,"depth":312,"text":142192},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139887,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142296,"title":142297,"body":142298,"description":321,"extension":322,"meta":142406,"navigation":324,"path":142407,"seo":142408,"stem":142409,"__hash__":142410},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142299,"toc":142401},[142300,142303,142307,142310,142313,142322,142331,142335,142340,142347,142365,142368,142371,142374,142377,142380,142383,142386,142389,142392,142395,142398],[10,142301,142297],{"id":142302},"_17-web服务器与网站发布",[14,142304,142306],{"id":142305},"_171-web服务器","17.1 Web服务器",[19,142308,142309],{},"把自己网站上传到服务器上，可以让其他人访问",[29,142311],{"style":31,"src":142312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,142314,142315,142318,142319],{},[234,142316,142317],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[234,142320,142321],{},"Web 服务器等",[19,142323,142324,142325,101290,142328,26014],{},"根据服务器在网络中所在的位置不同，又可分为 ",[234,142326,142327],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[234,142329,142330],{},"远程服务器",[367,142332,142334],{"id":142333},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,142336,142337],{},[234,142338,142339],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,142341,142342,142343],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[637,142344,142345],{"href":142345,"rel":142346},"http:\u002F\u002Ffree.3v.do\u002F",[24138],[1406,142348,142349,142352,142355,142362],{},[353,142350,142351],{},"去免费空间网站注册账号。",[353,142353,142354],{},"记录下主机名、用户名、密码、域名。",[353,142356,142357,142358,142361],{},"利用 ",[51,142359,142360],{},"utftp"," 软件 上传网站到远程服务器",[353,142363,142364],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,142366,142367],{},"使用软件上传，对上传软件文件进行解压",[29,142369],{"style":31,"src":142370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[29,142372],{"style":31,"src":142373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,142375,142376],{},"输入刚刚申请的服务器账号信息：",[29,142378],{"style":31,"src":142379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[29,142381],{"style":31,"src":142382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[29,142384],{"style":31,"src":142385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[29,142387],{"style":31,"src":142388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,142390,142391],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[29,142393],{"style":31,"src":142394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,142396,142397],{},"浏览器输入域名即可访问",[19,142399,142400],{},"首页一定必须是index",{"title":143,"searchDepth":312,"depth":312,"links":142402},[142403],{"id":142305,"depth":312,"text":142306,"children":142404},[142405],{"id":142333,"depth":1454,"text":142334},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142297,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142412,"title":142413,"body":142414,"description":321,"extension":322,"meta":143341,"navigation":324,"path":143342,"seo":143343,"stem":143344,"__hash__":143345},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142415,"toc":143324},[142416,142419,142423,142426,142429,142440,142443,142447,142451,142456,142459,142462,142465,142468,142472,142498,142502,142506,142509,142512,142516,142549,142553,142556,142559,142623,142627,142631,142634,142637,142640,142644,142689,142693,142696,142726,142730,142734,142737,142740,142744,142747,142816,142819,142927,142929,142935,142939,142942,142945,143041,143044,143048,143072,143076,143079,143083,143086,143090,143093,143096,143099,143102,143106,143109,143112,143116,143120,143123,143126,143129,143132,143136,143139,143143,143146,143149,143194,143198,143202,143205,143208,143211,143243,143247,143250,143284,143288,143291,143321],[10,142417,142413],{"id":142418},"_18-2d动画与3d转换",[14,142420,142422],{"id":142421},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,142424,142425],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,142427,142428],{},"转换（transform）你可以简单理解为变形",[1406,142430,142431,142434,142437],{},[353,142432,142433],{},"移动：translate",[353,142435,142436],{},"旋转：rotate",[353,142438,142439],{},"缩放：scale",[29,142441],{"style":31,"src":142442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[367,142444,142446],{"id":142445},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22271,142448,142450],{"id":142449},"_18111-translate介绍","18.1.1.1 translate介绍",[19,142452,142453,142454],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[234,142455,133374],{},[29,142457],{"style":31,"src":142458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,142460,142461],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,142463,142464],{},"对于行内元素无效",[19,142466,142467],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22271,142469,142471],{"id":142470},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[138,142473,142474],{"className":140,"code":138904,"language":142,"meta":143,"style":143},[51,142475,142476,142482,142494],{"__ignoreMap":143},[147,142477,142478,142480],{"class":149,"line":150},[147,142479,51884],{"class":153},[147,142481,15845],{"class":157},[147,142483,142484,142486,142488,142490,142492],{"class":149,"line":312},[147,142485,70743],{"class":448},[147,142487,51710],{"class":157},[147,142489,590],{"class":448},[147,142491,51829],{"class":448},[147,142493,1565],{"class":157},[147,142495,142496],{"class":149,"line":1454},[147,142497,1839],{"class":157},[367,142499,142501],{"id":142500},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22271,142503,142505],{"id":142504},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,142507,142508],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[29,142510],{"style":31,"src":142511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22271,142513,142515],{"id":142514},"_18122-旋转效果","18.1.2.2 旋转效果",[138,142517,142519],{"className":140,"code":142518,"language":142,"meta":143,"style":143},"div {\n  transform: rotate(45deg);\n}\n",[51,142520,142521,142527,142545],{"__ignoreMap":143},[147,142522,142523,142525],{"class":149,"line":150},[147,142524,51884],{"class":153},[147,142526,15845],{"class":157},[147,142528,142529,142531,142533,142536,142538,142540,142543],{"class":149,"line":312},[147,142530,136699],{"class":448},[147,142532,51710],{"class":157},[147,142534,142535],{"class":448},"rotate",[147,142537,401],{"class":157},[147,142539,928],{"class":448},[147,142541,142542],{"class":397},"deg",[147,142544,2993],{"class":157},[147,142546,142547],{"class":149,"line":1454},[147,142548,1839],{"class":157},[22271,142550,142552],{"id":142551},"_18123-三角做法","18.1.2.3 三角做法",[19,142554,142555],{},"该下标当经过最外层大盒子时会实现向上反转",[29,142557],{"style":31,"src":142558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[138,142560,142561],{"className":140,"code":135235,"language":142,"meta":143,"style":143},[51,142562,142563,142567,142573,142583,142593,142609,142619],{"__ignoreMap":143},[147,142564,142565],{"class":149,"line":150},[147,142566,135242],{"class":458},[147,142568,142569,142571],{"class":149,"line":312},[147,142570,135247],{"class":2237},[147,142572,15845],{"class":157},[147,142574,142575,142577,142579,142581],{"class":149,"line":1454},[147,142576,70841],{"class":448},[147,142578,51710],{"class":157},[147,142580,590],{"class":448},[147,142582,1565],{"class":157},[147,142584,142585,142587,142589,142591],{"class":149,"line":1469},[147,142586,71061],{"class":448},[147,142588,51710],{"class":157},[147,142590,590],{"class":448},[147,142592,1565],{"class":157},[147,142594,142595,142597,142599,142601,142603,142605,142607],{"class":149,"line":1475},[147,142596,71169],{"class":448},[147,142598,51710],{"class":157},[147,142600,845],{"class":448},[147,142602,51765],{"class":397},[147,142604,51794],{"class":448},[147,142606,64264],{"class":448},[147,142608,1565],{"class":157},[147,142610,142611,142613,142615,142617],{"class":149,"line":1489},[147,142612,135290],{"class":448},[147,142614,51710],{"class":157},[147,142616,62642],{"class":448},[147,142618,1565],{"class":157},[147,142620,142621],{"class":149,"line":1495},[147,142622,1839],{"class":157},[367,142624,142626],{"id":142625},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22271,142628,142630],{"id":142629},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,142632,142633],{},"设置中心点",[29,142635],{"style":31,"src":142636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,142638,142639],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22271,142641,142643],{"id":142642},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[138,142645,142647],{"className":140,"code":142646,"language":142,"meta":143,"style":143},"\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",[51,142648,142649,142654,142660,142675,142680,142685],{"__ignoreMap":143},[147,142650,142651],{"class":149,"line":150},[147,142652,142653],{"class":458},"\u002F* 转换中心点 *\u002F\n",[147,142655,142656,142658],{"class":149,"line":312},[147,142657,51884],{"class":153},[147,142659,15845],{"class":157},[147,142661,142662,142665,142667,142669,142671,142673],{"class":149,"line":1454},[147,142663,142664],{"class":448},"  transform-origin",[147,142666,51710],{"class":157},[147,142668,51865],{"class":448},[147,142670,17417],{"class":448},[147,142672,130578],{"class":157},[147,142674,135388],{"class":458},[147,142676,142677],{"class":149,"line":1469},[147,142678,142679],{"class":458},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[147,142681,142682],{"class":149,"line":1475},[147,142683,142684],{"class":458},"  \u002F* transform-origin: left top; *\u002F\n",[147,142686,142687],{"class":149,"line":1489},[147,142688,1839],{"class":157},[22271,142690,142692],{"id":142691},"_18133-旋转案例","18.1.3.3 旋转案例",[29,142694],{"style":31,"src":142695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[138,142697,142698],{"className":140,"code":142518,"language":142,"meta":143,"style":143},[51,142699,142700,142706,142722],{"__ignoreMap":143},[147,142701,142702,142704],{"class":149,"line":150},[147,142703,51884],{"class":153},[147,142705,15845],{"class":157},[147,142707,142708,142710,142712,142714,142716,142718,142720],{"class":149,"line":312},[147,142709,136699],{"class":448},[147,142711,51710],{"class":157},[147,142713,142535],{"class":448},[147,142715,401],{"class":157},[147,142717,928],{"class":448},[147,142719,142542],{"class":397},[147,142721,2993],{"class":157},[147,142723,142724],{"class":149,"line":1454},[147,142725,1839],{"class":157},[367,142727,142729],{"id":142728},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22271,142731,142733],{"id":142732},"_18141-scale介绍","18.1.4.1 scale介绍",[19,142735,142736],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[29,142738],{"style":31,"src":142739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22271,142741,142743],{"id":142742},"_18142-分页按钮","18.1.4.2 分页按钮",[29,142745],{"style":31,"src":142746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[138,142748,142750],{"className":140,"code":142749,"language":142,"meta":143,"style":143},"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",[51,142751,142752,142758,142774,142778,142782,142787,142793,142807,142812],{"__ignoreMap":143},[147,142753,142754,142756],{"class":149,"line":150},[147,142755,51884],{"class":153},[147,142757,15845],{"class":157},[147,142759,142760,142762,142764,142767,142769,142772],{"class":149,"line":312},[147,142761,136699],{"class":448},[147,142763,51710],{"class":157},[147,142765,142766],{"class":448},"scale",[147,142768,401],{"class":157},[147,142770,142771],{"class":448},"1.2",[147,142773,2993],{"class":157},[147,142775,142776],{"class":149,"line":1454},[147,142777,1839],{"class":157},[147,142779,142780],{"class":149,"line":1469},[147,142781,136176],{"class":157},[147,142783,142784],{"class":149,"line":1475},[147,142785,142786],{"class":458},"\u002F* 2D 缩放 *\u002F\n",[147,142788,142789,142791],{"class":149,"line":1489},[147,142790,51884],{"class":153},[147,142792,15845],{"class":157},[147,142794,142795,142797,142799,142801,142803,142805],{"class":149,"line":1495},[147,142796,136699],{"class":448},[147,142798,51710],{"class":157},[147,142800,142766],{"class":448},[147,142802,401],{"class":157},[147,142804,142771],{"class":448},[147,142806,2993],{"class":157},[147,142808,142809],{"class":149,"line":1586},[147,142810,142811],{"class":458},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[147,142813,142814],{"class":149,"line":1592},[147,142815,1839],{"class":157},[19,142817,142818],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[138,142820,142822],{"className":140,"code":142821,"language":142,"meta":143,"style":143},"\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",[51,142823,142824,142829,142839,142860,142881,142885,142890,142896,142923],{"__ignoreMap":143},[147,142825,142826],{"class":149,"line":150},[147,142827,142828],{"class":458},"\u002F* 定义动画 *\u002F\n",[147,142830,142831,142834,142837],{"class":149,"line":312},[147,142832,142833],{"class":397},"@keyframes",[147,142835,142836],{"class":5490}," move",[147,142838,15845],{"class":157},[147,142840,142841,142844,142846,142848,142850,142853,142855,142857],{"class":149,"line":1454},[147,142842,142843],{"class":2237},"  0%",[147,142845,80079],{"class":157},[147,142847,48408],{"class":448},[147,142849,51710],{"class":157},[147,142851,142852],{"class":448},"translateX",[147,142854,401],{"class":157},[147,142856,590],{"class":448},[147,142858,142859],{"class":157},"); }\n",[147,142861,142862,142865,142867,142869,142871,142873,142875,142877,142879],{"class":149,"line":1469},[147,142863,142864],{"class":2237},"  100%",[147,142866,80079],{"class":157},[147,142868,48408],{"class":448},[147,142870,51710],{"class":157},[147,142872,142852],{"class":448},[147,142874,401],{"class":157},[147,142876,710],{"class":448},[147,142878,51765],{"class":397},[147,142880,142859],{"class":157},[147,142882,142883],{"class":149,"line":1475},[147,142884,1839],{"class":157},[147,142886,142887],{"class":149,"line":1489},[147,142888,142889],{"class":458},"\u002F* 调用动画 *\u002F\n",[147,142891,142892,142894],{"class":149,"line":1495},[147,142893,51884],{"class":153},[147,142895,15845],{"class":157},[147,142897,142898,142901,142903,142905,142907,142909,142911,142913,142915,142918,142921],{"class":149,"line":1586},[147,142899,142900],{"class":448},"  animation",[147,142902,51710],{"class":157},[147,142904,135401],{"class":448},[147,142906,25392],{"class":448},[147,142908,1094],{"class":397},[147,142910,78952],{"class":448},[147,142912,4367],{"class":448},[147,142914,1094],{"class":397},[147,142916,142917],{"class":448}," infinite",[147,142919,142920],{"class":448}," alternate",[147,142922,1565],{"class":157},[147,142924,142925],{"class":149,"line":1592},[147,142926,1839],{"class":157},[19,142928,142818],{},[138,142930,142933],{"className":142931,"code":142932,"language":5461},[5459],"\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",[51,142934,142932],{"__ignoreMap":143},[22271,142936,142938],{"id":142937},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,142940,142941],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[29,142943],{"style":31,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[138,142946,142947],{"className":140,"code":142821,"language":142,"meta":143,"style":143},[51,142948,142949,142953,142961,142979,142999,143003,143007,143013,143037],{"__ignoreMap":143},[147,142950,142951],{"class":149,"line":150},[147,142952,142828],{"class":458},[147,142954,142955,142957,142959],{"class":149,"line":312},[147,142956,142833],{"class":397},[147,142958,142836],{"class":5490},[147,142960,15845],{"class":157},[147,142962,142963,142965,142967,142969,142971,142973,142975,142977],{"class":149,"line":1454},[147,142964,142843],{"class":2237},[147,142966,80079],{"class":157},[147,142968,48408],{"class":448},[147,142970,51710],{"class":157},[147,142972,142852],{"class":448},[147,142974,401],{"class":157},[147,142976,590],{"class":448},[147,142978,142859],{"class":157},[147,142980,142981,142983,142985,142987,142989,142991,142993,142995,142997],{"class":149,"line":1469},[147,142982,142864],{"class":2237},[147,142984,80079],{"class":157},[147,142986,48408],{"class":448},[147,142988,51710],{"class":157},[147,142990,142852],{"class":448},[147,142992,401],{"class":157},[147,142994,710],{"class":448},[147,142996,51765],{"class":397},[147,142998,142859],{"class":157},[147,143000,143001],{"class":149,"line":1475},[147,143002,1839],{"class":157},[147,143004,143005],{"class":149,"line":1489},[147,143006,142889],{"class":458},[147,143008,143009,143011],{"class":149,"line":1495},[147,143010,51884],{"class":153},[147,143012,15845],{"class":157},[147,143014,143015,143017,143019,143021,143023,143025,143027,143029,143031,143033,143035],{"class":149,"line":1586},[147,143016,142900],{"class":448},[147,143018,51710],{"class":157},[147,143020,135401],{"class":448},[147,143022,25392],{"class":448},[147,143024,1094],{"class":397},[147,143026,78952],{"class":448},[147,143028,4367],{"class":448},[147,143030,1094],{"class":397},[147,143032,142917],{"class":448},[147,143034,142920],{"class":448},[147,143036,1565],{"class":157},[147,143038,143039],{"class":149,"line":1592},[147,143040,1839],{"class":157},[19,143042,143043],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[367,143045,143047],{"id":143046},"_1823-知识点回顾","18.2.3 知识点回顾",[138,143049,143050],{"className":140,"code":128884,"language":142,"meta":143,"style":143},[51,143051,143052,143058,143068],{"__ignoreMap":143},[147,143053,143054,143056],{"class":149,"line":150},[147,143055,51884],{"class":153},[147,143057,15845],{"class":157},[147,143059,143060,143062,143064,143066],{"class":149,"line":312},[147,143061,128897],{"class":448},[147,143063,51710],{"class":157},[147,143065,62009],{"class":448},[147,143067,1565],{"class":157},[147,143069,143070],{"class":149,"line":1454},[147,143071,1839],{"class":157},[14,143073,143075],{"id":143074},"_183-3d-转换","18.3 3D 转换",[19,143077,143078],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[367,143080,143082],{"id":143081},"_1831-坐标轴认识","18.3.1 坐标轴认识",[29,143084],{"style":31,"src":143085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[367,143087,143089],{"id":143088},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[29,143091],{"style":31,"src":143092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,143094,143095],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,143097,143098],{},"translate3d的效果需要搭配透视perspective来使用",[29,143100],{"style":31,"src":143101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[367,143103,143105],{"id":143104},"_1833-透视-perspective","18.3.3 透视 perspective",[29,143107],{"style":31,"src":143108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,143110,143111],{},"透视写在父盒子上，单位为像素",[367,143113,143115],{"id":143114},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22271,143117,143119],{"id":143118},"_18341-分开解释","18.3.4.1 分开解释",[29,143121],{"style":31,"src":143122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[29,143124],{"style":31,"src":143125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[29,143127],{"style":31,"src":143128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,143130,143131],{},"总结来说就是左手原则",[22271,143133,143135],{"id":143134},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[29,143137],{"style":31,"src":143138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[367,143140,143142],{"id":143141},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[29,143144],{"style":31,"src":143145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[29,143147],{"style":31,"src":143148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[138,143150,143152],{"className":140,"code":143151,"language":142,"meta":143,"style":143},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[51,143153,143154,143160,143173,143190],{"__ignoreMap":143},[147,143155,143156,143158],{"class":149,"line":150},[147,143157,51884],{"class":153},[147,143159,15845],{"class":157},[147,143161,143162,143165,143167,143169,143171],{"class":149,"line":312},[147,143163,143164],{"class":448},"  perspective",[147,143166,51710],{"class":157},[147,143168,65347],{"class":448},[147,143170,51765],{"class":397},[147,143172,1565],{"class":157},[147,143174,143175,143177,143179,143182,143184,143186,143188],{"class":149,"line":1454},[147,143176,136699],{"class":448},[147,143178,51710],{"class":157},[147,143180,143181],{"class":448},"rotateX",[147,143183,401],{"class":157},[147,143185,928],{"class":448},[147,143187,142542],{"class":397},[147,143189,2993],{"class":157},[147,143191,143192],{"class":149,"line":1469},[147,143193,1839],{"class":157},[367,143195,143197],{"id":143196},"_1836-案例","18.3.6 案例",[22271,143199,143201],{"id":143200},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[29,143203],{"style":31,"src":143204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[29,143206],{"style":31,"src":143207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[29,143209],{"style":31,"src":143210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[138,143212,143214],{"className":140,"code":143213,"language":142,"meta":143,"style":143},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[51,143215,143216,143221,143227,143239],{"__ignoreMap":143},[147,143217,143218],{"class":149,"line":150},[147,143219,143220],{"class":458},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[147,143222,143223,143225],{"class":149,"line":312},[147,143224,133712],{"class":2237},[147,143226,15845],{"class":157},[147,143228,143229,143231,143233,143235,143237],{"class":149,"line":1454},[147,143230,143164],{"class":448},[147,143232,51710],{"class":157},[147,143234,65347],{"class":448},[147,143236,51765],{"class":397},[147,143238,1565],{"class":157},[147,143240,143241],{"class":149,"line":1469},[147,143242,1839],{"class":157},[22271,143244,143246],{"id":143245},"_18362-3d导航栏","18.3.6.2 3D导航栏",[29,143248],{"style":31,"src":143249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[138,143251,143252],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,143253,143254,143258,143272,143276],{"__ignoreMap":143},[147,143255,143256],{"class":149,"line":150},[147,143257,130826],{"class":458},[147,143259,143260,143262,143264,143266,143268,143270],{"class":149,"line":312},[147,143261,1309],{"class":157},[147,143263,51884],{"class":153},[147,143265,53759],{"class":2237},[147,143267,445],{"class":157},[147,143269,130839],{"class":504},[147,143271,51580],{"class":157},[147,143273,143274],{"class":149,"line":1454},[147,143275,130846],{"class":157},[147,143277,143278,143280,143282],{"class":149,"line":1469},[147,143279,52058],{"class":157},[147,143281,51884],{"class":153},[147,143283,51580],{"class":157},[22271,143285,143287],{"id":143286},"_18363-旋转木马","18.3.6.3 旋转木马",[29,143289],{"style":31,"src":143290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[138,143292,143293],{"className":140,"code":142518,"language":142,"meta":143,"style":143},[51,143294,143295,143301,143317],{"__ignoreMap":143},[147,143296,143297,143299],{"class":149,"line":150},[147,143298,51884],{"class":153},[147,143300,15845],{"class":157},[147,143302,143303,143305,143307,143309,143311,143313,143315],{"class":149,"line":312},[147,143304,136699],{"class":448},[147,143306,51710],{"class":157},[147,143308,142535],{"class":448},[147,143310,401],{"class":157},[147,143312,928],{"class":448},[147,143314,142542],{"class":397},[147,143316,2993],{"class":157},[147,143318,143319],{"class":149,"line":1454},[147,143320,1839],{"class":157},[308,143322,143323],{},"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":143,"searchDepth":312,"depth":312,"links":143325},[143326,143333],{"id":142421,"depth":312,"text":142422,"children":143327},[143328,143329,143330,143331,143332],{"id":142445,"depth":1454,"text":142446},{"id":142500,"depth":1454,"text":142501},{"id":142625,"depth":1454,"text":142626},{"id":142728,"depth":1454,"text":142729},{"id":143046,"depth":1454,"text":143047},{"id":143074,"depth":312,"text":143075,"children":143334},[143335,143336,143337,143338,143339,143340],{"id":143081,"depth":1454,"text":143082},{"id":143088,"depth":1454,"text":143089},{"id":143104,"depth":1454,"text":143105},{"id":143114,"depth":1454,"text":143115},{"id":143141,"depth":1454,"text":143142},{"id":143196,"depth":1454,"text":143197},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142413,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143347,"title":143348,"body":143349,"description":321,"extension":322,"meta":143552,"navigation":324,"path":143553,"seo":143554,"stem":143555,"__hash__":143556},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143350,"toc":143541},[143351,143354,143358,143361,143364,143368,143371,143374,143377,143381,143384,143388,143391,143395,143398,143402,143416,143420,143445,143448,143451,143468,143472,143476,143479,143482,143486,143489,143492,143510,143514,143517,143531,143535,143538],[10,143352,143348],{"id":143353},"_19-移动端基础-前缀现状与视口",[14,143355,143357],{"id":143356},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[29,143359],{"style":31,"src":143360},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,143362,143363],{},"意思就是加个前缀，增加兼容性",[14,143365,143367],{"id":143366},"_192-移动端现状认识","19.2 移动端现状认识",[29,143369],{"style":31,"src":143370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,143372,143373],{},"调试方法：",[29,143375],{"style":31,"src":143376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,143378,143380],{"id":143379},"_193-视口","19.3 视口",[19,143382,143383],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[367,143385,143387],{"id":143386},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[29,143389],{"style":31,"src":143390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[367,143392,143394],{"id":143393},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[29,143396],{"style":31,"src":143397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[367,143399,143401],{"id":143400},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1406,143403,143404,143407,143410,143413],{},[353,143405,143406],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[353,143408,143409],{},"理想视口，对设备来讲，是最理想的视口尺寸",[353,143411,143412],{},"需要手动添写meta视口标签通知浏览器操作",[353,143414,143415],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[367,143417,143419],{"id":143418},"_1934-meta视口标签","19.3.4 meta视口标签",[138,143421,143423],{"className":127462,"code":143422,"language":127464,"meta":143,"style":143},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[51,143424,143425],{"__ignoreMap":143},[147,143426,143427,143429,143431,143433,143435,143437,143439,143441,143443],{"class":149,"line":150},[147,143428,1309],{"class":157},[147,143430,51617],{"class":153},[147,143432,15193],{"class":2237},[147,143434,445],{"class":157},[147,143436,51664],{"class":504},[147,143438,51644],{"class":2237},[147,143440,445],{"class":157},[147,143442,51671],{"class":504},[147,143444,51580],{"class":157},[29,143446],{"style":31,"src":143447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,143449,143450],{},"标准视口设置：",[350,143452,143453,143456,143459,143462,143465],{},[353,143454,143455],{},"视口宽度和设备保持一致",[353,143457,143458],{},"视口的默认缩放比例1.0",[353,143460,143461],{},"不允许用户自行缩放",[353,143463,143464],{},"最大允许的缩放比例1.0",[353,143466,143467],{},"最小允许的缩放比例1.0",[367,143469,143471],{"id":143470},"_1935-二倍图","19.3.5 二倍图",[22271,143473,143475],{"id":143474},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[29,143477],{"style":31,"src":143478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[29,143480],{"style":31,"src":143481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22271,143483,143485],{"id":143484},"_19352-多倍图","19.3.5.2 多倍图",[29,143487],{"style":31,"src":143488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,143490,143491],{},"二倍图法，代码如下：",[138,143493,143495],{"className":140,"code":143494,"language":142,"meta":143,"style":143},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[51,143496,143497,143502],{"__ignoreMap":143},[147,143498,143499],{"class":149,"line":150},[147,143500,143501],{"class":458},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[147,143503,143504,143507],{"class":149,"line":312},[147,143505,143506],{"class":153},"background-size",[147,143508,143509],{"class":157},": 50% 50%;\n",[22271,143511,143513],{"id":143512},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[29,143515],{"style":31,"src":143516},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[350,143518,143519,143522,143525,143528],{},[353,143520,143521],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[353,143523,143524],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[353,143526,143527],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[353,143529,143530],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22271,143532,143534],{"id":143533},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[29,143536],{"style":31,"src":143537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[308,143539,143540],{},"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":143,"searchDepth":312,"depth":312,"links":143542},[143543,143544,143545],{"id":143356,"depth":312,"text":143357},{"id":143366,"depth":312,"text":143367},{"id":143379,"depth":312,"text":143380,"children":143546},[143547,143548,143549,143550,143551],{"id":143386,"depth":1454,"text":143387},{"id":143393,"depth":1454,"text":143394},{"id":143400,"depth":1454,"text":143401},{"id":143418,"depth":1454,"text":143419},{"id":143470,"depth":1454,"text":143471},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143348,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143558,"title":143559,"body":143560,"description":321,"extension":322,"meta":144437,"navigation":324,"path":144438,"seo":144439,"stem":144440,"__hash__":144441},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143561,"toc":144421},[143562,143565,143569,143576,143579,143586,143589,143594,143597,143601,143605,143612,143615,143618,143622,143625,143628,143631,143634,143637,143641,143644,143648,143650,143653,143656,143659,143662,143664,143667,143669,143699,143701,143731,143735,143738,143742,143745,143762,143765,143768,143844,143846,143849,143852,143855,143858,143860,143863,143866,143870,143892,143895,143898,143902,143905,143911,143914,143918,143921,143924,143928,143931,143934,143937,143941,143944,143947,143950,143953,143957,143960,143964,143971,143974,143977,143980,143983,143993,143996,143999,144006,144009,144013,144016,144019,144023,144026,144029,144032,144077,144080,144083,144086,144088,144217,144219,144257,144260,144263,144265,144383,144385,144419],[10,143563,143559],{"id":143564},"_20-移动端布局实战上篇",[14,143566,143568],{"id":143567},"_201-移动端主流方案","20.1 移动端主流方案",[350,143570,143571],{},[353,143572,143573],{},[234,143574,143575],{},"单独移动端页面（主流）",[29,143577],{"style":31,"src":143578},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[350,143580,143581],{"start":312},[353,143582,143583],{},[234,143584,143585],{},"响应式兼容PC移动端",[29,143587],{"style":31,"src":143588},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[350,143590,143591],{"start":1454},[353,143592,143593],{},"两种页面选型布局方式",[29,143595],{"style":31,"src":143596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,143598,143600],{"id":143599},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[367,143602,143604],{"id":143603},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,143606,143607,143608],{},"官网地址： ",[637,143609,143610],{"href":143610,"rel":143611},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[24138],[29,143613],{"style":31,"src":143614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[29,143616],{"style":31,"src":143617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[367,143619,143621],{"id":143620},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[29,143623],{"style":31,"src":143624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[29,143626],{"style":31,"src":143627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,143629,143630],{},"去除高亮：",[19,143632,143633],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,143635,143636],{},"-webkit- tap-highlight-color: transparent;",[14,143638,143640],{"id":143639},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[29,143642],{"style":31,"src":143643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,143645,143647],{"id":143646},"_204-流式布局案例","20.4 流式布局案例",[19,143649,248],{},[19,143651,143652],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,143654,143655],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,143657,143658],{},"图片格式：",[29,143660],{"style":31,"src":143661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,143663,135758],{},[29,143665],{"style":31,"src":143666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,143668,140085],{},[138,143670,143671],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,143672,143673],{"__ignoreMap":143},[147,143674,143675,143677,143679,143681,143683,143685,143687,143689,143691,143693,143695,143697],{"class":149,"line":150},[147,143676,1309],{"class":157},[147,143678,29],{"class":153},[147,143680,55512],{"class":2237},[147,143682,445],{"class":157},[147,143684,134232],{"class":504},[147,143686,55520],{"class":2237},[147,143688,445],{"class":157},[147,143690,134239],{"class":504},[147,143692,134242],{"class":2237},[147,143694,445],{"class":157},[147,143696,134247],{"class":504},[147,143698,51580],{"class":157},[19,143700,140174],{},[138,143702,143703],{"className":127462,"code":134217,"language":127464,"meta":143,"style":143},[51,143704,143705],{"__ignoreMap":143},[147,143706,143707,143709,143711,143713,143715,143717,143719,143721,143723,143725,143727,143729],{"class":149,"line":150},[147,143708,1309],{"class":157},[147,143710,29],{"class":153},[147,143712,55512],{"class":2237},[147,143714,445],{"class":157},[147,143716,134232],{"class":504},[147,143718,55520],{"class":2237},[147,143720,445],{"class":157},[147,143722,134239],{"class":504},[147,143724,134242],{"class":2237},[147,143726,445],{"class":157},[147,143728,134247],{"class":504},[147,143730,51580],{"class":157},[14,143732,143734],{"id":143733},"_205-flex布局","20.5 flex布局",[29,143736],{"style":31,"src":143737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[367,143739,143741],{"id":143740},"_2051-布局原理","20.5.1 布局原理",[19,143743,143744],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1406,143746,143747,143750,143753,143756,143759],{},[353,143748,143749],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[353,143751,143752],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[353,143754,143755],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[353,143757,143758],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[353,143760,143761],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,143763,143764],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,143766,143767],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[138,143769,143771],{"className":140,"code":143770,"language":142,"meta":143,"style":143},"\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",[51,143772,143773,143778,143785,143795,143807,143818,143829,143840],{"__ignoreMap":143},[147,143774,143775],{"class":149,"line":150},[147,143776,143777],{"class":458},"\u002F* Flex 弹性布局 *\u002F\n",[147,143779,143780,143783],{"class":149,"line":312},[147,143781,143782],{"class":2237},".container",[147,143784,15845],{"class":157},[147,143786,143787,143789,143791,143793],{"class":149,"line":1454},[147,143788,128331],{"class":448},[147,143790,51710],{"class":157},[147,143792,51750],{"class":448},[147,143794,1565],{"class":157},[147,143796,143797,143800,143802,143805],{"class":149,"line":1469},[147,143798,143799],{"class":448},"  flex-direction",[147,143801,51710],{"class":157},[147,143803,143804],{"class":448},"row",[147,143806,1565],{"class":157},[147,143808,143809,143812,143814,143816],{"class":149,"line":1475},[147,143810,143811],{"class":448},"  justify-content",[147,143813,51710],{"class":157},[147,143815,51941],{"class":448},[147,143817,1565],{"class":157},[147,143819,143820,143823,143825,143827],{"class":149,"line":1489},[147,143821,143822],{"class":448},"  align-items",[147,143824,51710],{"class":157},[147,143826,51865],{"class":448},[147,143828,1565],{"class":157},[147,143830,143831,143834,143836,143838],{"class":149,"line":1495},[147,143832,143833],{"class":448},"  flex-wrap",[147,143835,51710],{"class":157},[147,143837,78882],{"class":448},[147,143839,1565],{"class":157},[147,143841,143842],{"class":149,"line":1586},[147,143843,1839],{"class":157},[19,143845,70726],{},[19,143847,143848],{},".form-item .male-label {",[19,143850,143851],{},"   margin-right: 20px;",[19,143853,143854],{},"   display: inline-flex;",[19,143856,143857],{},"   align-items: center;",[19,143859,1345],{},[29,143861],{"style":31,"src":143862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[29,143864],{"style":31,"src":143865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[367,143867,143869],{"id":143868},"_2052-常见父项属性","20.5.2 常见父项属性",[350,143871,143872,143875,143878,143881,143884,143887,143890],{},[353,143873,143874],{},"flex-direction：设置主轴的方向",[353,143876,143877],{},"justify-content：设置主轴上的子元素排列方式",[353,143879,143880],{},"flex-wrap：设置子元素是否换行",[353,143882,143883],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[353,143885,143886],{},"align-items：设置侧轴上的子元素排列方式（单行）",[353,143888,143889],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[353,143891,143874],{},[29,143893],{"style":31,"src":143894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[29,143896],{"style":31,"src":143897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[350,143899,143900],{"start":312},[353,143901,143877],{},[29,143903],{"style":31,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,143906,143907,143910],{},[51,143908,143909],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,143912,143913],{},"跟着主轴走",[350,143915,143916],{"start":1454},[353,143917,143880],{},[29,143919],{"style":31,"src":143920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,143922,143923],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[350,143925,143926],{"start":1469},[353,143927,143883],{},[29,143929],{"style":31,"src":143930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,143932,143933],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,143935,143936],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[350,143938,143939],{"start":1475},[353,143940,143886],{},[29,143942],{"style":31,"src":143943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,143945,143946],{},"align-items与align-content之间的区别：",[19,143948,143949],{},"单找items，多找content",[29,143951],{"style":31,"src":143952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[350,143954,143955],{"start":1489},[353,143956,143889],{},[29,143958],{"style":31,"src":143959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[367,143961,143963],{"id":143962},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[350,143965,143966],{},[353,143967,143968],{},[234,143969,143970],{},"flex 属性",[19,143972,143973],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[29,143975],{"style":31,"src":143976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,143978,143979],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,143981,143982],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[350,143984,143985],{"start":312},[353,143986,143987,249,143990],{},[234,143988,143989],{},"align-self",[234,143991,143992],{},"控制子项自己在侧轴上的排列方式",[29,143994],{"style":31,"src":143995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,143997,143998],{},"单个子盒子在父盒子侧轴上的排列方式",[350,144000,144001],{"start":1454},[353,144002,144003,144005],{},[234,144004,95569],{}," 属性定义项目的排列顺序",[29,144007],{"style":31,"src":144008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[367,144010,144012],{"id":144011},"_2054-背景线性渐变","20.5.4 背景线性渐变",[29,144014],{"style":31,"src":144015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,144017,144018],{},"必须要添加浏览器的私有前缀",[367,144020,144022],{"id":144021},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,144024,144025],{},"学到最重要的知识：",[19,144027,144028],{},"flex处理这样的布局思路",[29,144030],{"style":31,"src":144031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[138,144033,144035],{"className":140,"code":144034,"language":142,"meta":143,"style":143},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[51,144036,144037,144043,144053,144063,144073],{"__ignoreMap":143},[147,144038,144039,144041],{"class":149,"line":150},[147,144040,143782],{"class":2237},[147,144042,15845],{"class":157},[147,144044,144045,144047,144049,144051],{"class":149,"line":312},[147,144046,128331],{"class":448},[147,144048,51710],{"class":157},[147,144050,51750],{"class":448},[147,144052,1565],{"class":157},[147,144054,144055,144057,144059,144061],{"class":149,"line":1454},[147,144056,143811],{"class":448},[147,144058,51710],{"class":157},[147,144060,51865],{"class":448},[147,144062,1565],{"class":157},[147,144064,144065,144067,144069,144071],{"class":149,"line":1469},[147,144066,143822],{"class":448},[147,144068,51710],{"class":157},[147,144070,51865],{"class":448},[147,144072,1565],{"class":157},[147,144074,144075],{"class":149,"line":1475},[147,144076,1839],{"class":157},[19,144078,144079],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,144081,144082],{},"使用属性选择器",[29,144084],{"style":31,"src":144085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,144087,69162],{},[138,144089,144091],{"className":127462,"code":144090,"language":127464,"meta":143,"style":143},"\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",[51,144092,144093,144098,144112,144117,144137,144142,144161,144166,144185,144190,144209],{"__ignoreMap":143},[147,144094,144095],{"class":149,"line":150},[147,144096,144097],{"class":458},"\u003C!-- 携程网移动端案例结构 -->\n",[147,144099,144100,144102,144104,144106,144108,144110],{"class":149,"line":312},[147,144101,1309],{"class":157},[147,144103,51884],{"class":153},[147,144105,53759],{"class":2237},[147,144107,445],{"class":157},[147,144109,92595],{"class":504},[147,144111,51580],{"class":157},[147,144113,144114],{"class":149,"line":1454},[147,144115,144116],{"class":458},"  \u003C!-- 搜索栏 -->\n",[147,144118,144119,144121,144123,144125,144127,144130,144133,144135],{"class":149,"line":1469},[147,144120,52417],{"class":157},[147,144122,51884],{"class":153},[147,144124,53759],{"class":2237},[147,144126,445],{"class":157},[147,144128,144129],{"class":504},"\"search-index\"",[147,144131,144132],{"class":157},">...\u003C\u002F",[147,144134,51884],{"class":153},[147,144136,51580],{"class":157},[147,144138,144139],{"class":149,"line":1475},[147,144140,144141],{"class":458},"  \u003C!-- 焦点图 -->\n",[147,144143,144144,144146,144148,144150,144152,144155,144157,144159],{"class":149,"line":1489},[147,144145,52417],{"class":157},[147,144147,51884],{"class":153},[147,144149,53759],{"class":2237},[147,144151,445],{"class":157},[147,144153,144154],{"class":504},"\"focus\"",[147,144156,144132],{"class":157},[147,144158,51884],{"class":153},[147,144160,51580],{"class":157},[147,144162,144163],{"class":149,"line":1495},[147,144164,144165],{"class":458},"  \u003C!-- 主导航 -->\n",[147,144167,144168,144170,144172,144174,144176,144179,144181,144183],{"class":149,"line":1586},[147,144169,52417],{"class":157},[147,144171,51884],{"class":153},[147,144173,53759],{"class":2237},[147,144175,445],{"class":157},[147,144177,144178],{"class":504},"\"local-nav\"",[147,144180,144132],{"class":157},[147,144182,51884],{"class":153},[147,144184,51580],{"class":157},[147,144186,144187],{"class":149,"line":1592},[147,144188,144189],{"class":458},"  \u003C!-- 子导航 -->\n",[147,144191,144192,144194,144196,144198,144200,144203,144205,144207],{"class":149,"line":1604},[147,144193,52417],{"class":157},[147,144195,51884],{"class":153},[147,144197,53759],{"class":2237},[147,144199,445],{"class":157},[147,144201,144202],{"class":504},"\"nav-common\"",[147,144204,144132],{"class":157},[147,144206,51884],{"class":153},[147,144208,51580],{"class":157},[147,144210,144211,144213,144215],{"class":149,"line":1886},[147,144212,52058],{"class":157},[147,144214,51884],{"class":153},[147,144216,51580],{"class":157},[19,144218,70726],{},[138,144220,144221],{"className":140,"code":137167,"language":142,"meta":143,"style":143},[51,144222,144223,144237,144253],{"__ignoreMap":143},[147,144224,144225,144227,144229,144231,144233,144235],{"class":149,"line":150},[147,144226,54094],{"class":153},[147,144228,1289],{"class":157},[147,144230,103377],{"class":2237},[147,144232,445],{"class":397},[147,144234,62972],{"class":504},[147,144236,137184],{"class":157},[147,144238,144239,144241,144243,144245,144247,144249,144251],{"class":149,"line":312},[147,144240,71169],{"class":448},[147,144242,51710],{"class":157},[147,144244,616],{"class":448},[147,144246,51765],{"class":397},[147,144248,51794],{"class":448},[147,144250,130295],{"class":448},[147,144252,1565],{"class":157},[147,144254,144255],{"class":149,"line":1454},[147,144256,1839],{"class":157},[19,144258,144259],{},"总代码和效果展示：",[29,144261],{"style":31,"src":144262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,144264,69162],{},[138,144266,144267],{"className":127462,"code":144090,"language":127464,"meta":143,"style":143},[51,144268,144269,144273,144287,144291,144309,144313,144331,144335,144353,144357,144375],{"__ignoreMap":143},[147,144270,144271],{"class":149,"line":150},[147,144272,144097],{"class":458},[147,144274,144275,144277,144279,144281,144283,144285],{"class":149,"line":312},[147,144276,1309],{"class":157},[147,144278,51884],{"class":153},[147,144280,53759],{"class":2237},[147,144282,445],{"class":157},[147,144284,92595],{"class":504},[147,144286,51580],{"class":157},[147,144288,144289],{"class":149,"line":1454},[147,144290,144116],{"class":458},[147,144292,144293,144295,144297,144299,144301,144303,144305,144307],{"class":149,"line":1469},[147,144294,52417],{"class":157},[147,144296,51884],{"class":153},[147,144298,53759],{"class":2237},[147,144300,445],{"class":157},[147,144302,144129],{"class":504},[147,144304,144132],{"class":157},[147,144306,51884],{"class":153},[147,144308,51580],{"class":157},[147,144310,144311],{"class":149,"line":1475},[147,144312,144141],{"class":458},[147,144314,144315,144317,144319,144321,144323,144325,144327,144329],{"class":149,"line":1489},[147,144316,52417],{"class":157},[147,144318,51884],{"class":153},[147,144320,53759],{"class":2237},[147,144322,445],{"class":157},[147,144324,144154],{"class":504},[147,144326,144132],{"class":157},[147,144328,51884],{"class":153},[147,144330,51580],{"class":157},[147,144332,144333],{"class":149,"line":1495},[147,144334,144165],{"class":458},[147,144336,144337,144339,144341,144343,144345,144347,144349,144351],{"class":149,"line":1586},[147,144338,52417],{"class":157},[147,144340,51884],{"class":153},[147,144342,53759],{"class":2237},[147,144344,445],{"class":157},[147,144346,144178],{"class":504},[147,144348,144132],{"class":157},[147,144350,51884],{"class":153},[147,144352,51580],{"class":157},[147,144354,144355],{"class":149,"line":1592},[147,144356,144189],{"class":458},[147,144358,144359,144361,144363,144365,144367,144369,144371,144373],{"class":149,"line":1604},[147,144360,52417],{"class":157},[147,144362,51884],{"class":153},[147,144364,53759],{"class":2237},[147,144366,445],{"class":157},[147,144368,144202],{"class":504},[147,144370,144132],{"class":157},[147,144372,51884],{"class":153},[147,144374,51580],{"class":157},[147,144376,144377,144379,144381],{"class":149,"line":1886},[147,144378,52058],{"class":157},[147,144380,51884],{"class":153},[147,144382,51580],{"class":157},[19,144384,70726],{},[138,144386,144387],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,144388,144389,144393,144407,144411],{"__ignoreMap":143},[147,144390,144391],{"class":149,"line":150},[147,144392,130826],{"class":458},[147,144394,144395,144397,144399,144401,144403,144405],{"class":149,"line":312},[147,144396,1309],{"class":157},[147,144398,51884],{"class":153},[147,144400,53759],{"class":2237},[147,144402,445],{"class":157},[147,144404,130839],{"class":504},[147,144406,51580],{"class":157},[147,144408,144409],{"class":149,"line":1454},[147,144410,130846],{"class":157},[147,144412,144413,144415,144417],{"class":149,"line":1469},[147,144414,52058],{"class":157},[147,144416,51884],{"class":153},[147,144418,51580],{"class":157},[308,144420,138116],{},{"title":143,"searchDepth":312,"depth":312,"links":144422},[144423,144424,144428,144429,144430],{"id":143567,"depth":312,"text":143568},{"id":143599,"depth":312,"text":143600,"children":144425},[144426,144427],{"id":143603,"depth":1454,"text":143604},{"id":143620,"depth":1454,"text":143621},{"id":143639,"depth":312,"text":143640},{"id":143646,"depth":312,"text":143647},{"id":143733,"depth":312,"text":143734,"children":144431},[144432,144433,144434,144435,144436],{"id":143740,"depth":1454,"text":143741},{"id":143868,"depth":1454,"text":143869},{"id":143962,"depth":1454,"text":143963},{"id":144011,"depth":1454,"text":144012},{"id":144021,"depth":1454,"text":144022},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143559,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144443,"title":144444,"body":144445,"description":321,"extension":322,"meta":145672,"navigation":324,"path":145673,"seo":145674,"stem":145675,"__hash__":145676},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144446,"toc":145650},[144447,144450,144454,144458,144461,144464,144468,144473,144476,144479,144482,144485,144488,144545,144548,144553,144556,144559,144563,144574,144578,144581,144584,144591,144596,144600,144603,144609,144612,144616,144619,144626,144629,144632,144639,144642,144649,144652,144655,144662,144665,144668,144670,144687,144691,144694,144697,144700,144704,144707,144710,144713,144716,144719,144722,144724,144727,144730,144792,144795,144905,144912,144918,144921,144924,144928,144931,144935,144940,144943,144950,144953,144959,144964,144967,144970,144973,144976,144979,144982,144985,144988,145044,145046,145072,145076,145079,145082,145085,145093,145096,145099,145103,145159,145162,145166,145172,145183,145186,145191,145194,145197,145203,145206,145209,145212,145215,145218,145221,145224,145227,145252,145258,145261,145264,145267,145270,145273,145276,145281,145284,145287,145290,145298,145301,145308,145311,145314,145316,145340,145342,145345,145348,145351,145354,145357,145360,145363,145397,145400,145403,145437,145444,145447,145450,145453,145456,145459,145462,145469,145472,145475,145478,145481,145488,145491,145494,145501,145504,145507,145511,145514,145517,145520,145523,145526,145529,145532,145535,145537,145561,145563,145587,145591,145602,145605,145608,145611,145614,145617,145620,145623,145626,145629,145632,145635,145638,145641,145644,145647],[10,144448,144444],{"id":144449},"_21-移动端布局实战下篇",[14,144451,144453],{"id":144452},"_211-rem适配布局","21.1 rem适配布局",[367,144455,144457],{"id":144456},"_2111-rem单位","21.1.1 rem单位",[29,144459],{"style":31,"src":144460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,144462,144463],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[367,144465,144467],{"id":144466},"_2112-媒体查询","21.1.2 媒体查询",[350,144469,144470],{},[353,144471,144472],{},"参数介绍",[29,144474],{"style":31,"src":144475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[29,144477],{"style":31,"src":144478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[29,144480],{"style":31,"src":144481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[29,144483],{"style":31,"src":144484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[29,144486],{"style":31,"src":144487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[138,144489,144491],{"className":140,"code":144490,"language":142,"meta":143,"style":143},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[51,144492,144493,144498,144517,144524,144537,144541],{"__ignoreMap":143},[147,144494,144495],{"class":149,"line":150},[147,144496,144497],{"class":458},"\u002F* 媒体查询 *\u002F\n",[147,144499,144500,144503,144505,144508,144510,144513,144515],{"class":149,"line":312},[147,144501,144502],{"class":397},"@media",[147,144504,1932],{"class":157},[147,144506,144507],{"class":448},"max-width",[147,144509,51710],{"class":157},[147,144511,144512],{"class":448},"768",[147,144514,51765],{"class":397},[147,144516,12716],{"class":157},[147,144518,144519,144522],{"class":149,"line":1454},[147,144520,144521],{"class":2237},"  .container",[147,144523,15845],{"class":157},[147,144525,144526,144529,144531,144533,144535],{"class":149,"line":1469},[147,144527,144528],{"class":448},"    width",[147,144530,51710],{"class":157},[147,144532,710],{"class":448},[147,144534,727],{"class":397},[147,144536,1565],{"class":157},[147,144538,144539],{"class":149,"line":1475},[147,144540,127511],{"class":157},[147,144542,144543],{"class":149,"line":1489},[147,144544,1839],{"class":157},[19,144546,144547],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[350,144549,144550],{"start":312},[353,144551,144552],{},"引入资源",[29,144554],{"style":31,"src":144555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,144557,144558],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[367,144560,144562],{"id":144561},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1406,144564,144565,144568,144571],{},[353,144566,144567],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[353,144569,144570],{},"媒体查询可以根据不同设备宽度来修改样式",[353,144572,144573],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,144575,144577],{"id":144576},"_212-less基础","21.2 Less基础",[19,144579,144580],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,144582,144583],{},"Less可以解决该问题，它是css的扩展语言",[19,144585,144586,144587],{},"Less中文网址： ",[637,144588,144589],{"href":144589,"rel":144590},"http:\u002F\u002Flesscss.cn\u002F",[24138],[19,144592,144593],{},[234,144594,144595],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[367,144597,144599],{"id":144598},"_2121-less安装","21.2.1 less安装",[19,144601,144602],{},"如果使用vscode，则无需进行下方安装步骤",[19,144604,144605],{},[637,144606,144607],{"href":144607,"rel":144608},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[24138],[29,144610],{"style":31,"src":144611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[367,144613,144615],{"id":144614},"_2122-less使用","21.2.2 less使用",[19,144617,144618],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[350,144620,144621],{},[353,144622,144623],{},[234,144624,144625],{},"Less 变量",[29,144627],{"style":31,"src":144628},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[29,144630],{"style":31,"src":144631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[350,144633,144634],{"start":312},[353,144635,144636],{},[234,144637,144638],{},"Less 编译",[29,144640],{"style":31,"src":144641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[350,144643,144644],{"start":1454},[353,144645,144646],{},[234,144647,144648],{},"Less 嵌套",[29,144650],{"style":31,"src":144651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[29,144653],{"style":31,"src":144654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[350,144656,144657],{"start":1469},[353,144658,144659],{},[234,144660,144661],{},"Less 运算",[29,144663],{"style":31,"src":144664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,144666,144667],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,144669,248],{},[1406,144671,144672,144675,144678,144681,144684],{},[353,144673,144674],{},"乘号（*）和除号（\u002F）的写法",[353,144676,144677],{},"运算符中间左右有个空格隔开 1px + 5",[353,144679,144680],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[353,144682,144683],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[353,144685,144686],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,144688,144690],{"id":144689},"_213-rem-适配方案","21.3 rem 适配方案",[19,144692,144693],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,144695,144696],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[29,144698],{"style":31,"src":144699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[367,144701,144703],{"id":144702},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,144705,144706],{},"rem + 媒体查询 + less 技术",[29,144708],{"style":31,"src":144709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,144711,144712],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,144714,144715],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[29,144717],{"style":31,"src":144718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,144720,144721],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,144723,14906],{},[29,144725],{"style":31,"src":144726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,144728,144729],{},"index.html:",[138,144731,144733],{"className":140,"code":144732,"language":142,"meta":143,"style":143},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[51,144734,144735,144740,144746,144762,144766,144772,144788],{"__ignoreMap":143},[147,144736,144737],{"class":149,"line":150},[147,144738,144739],{"class":458},"\u002F* rem 适配方案 *\u002F\n",[147,144741,144742,144744],{"class":149,"line":312},[147,144743,50909],{"class":153},[147,144745,15845],{"class":157},[147,144747,144748,144750,144752,144755,144757,144759],{"class":149,"line":1454},[147,144749,70899],{"class":448},[147,144751,51710],{"class":157},[147,144753,144754],{"class":448},"62.5",[147,144756,727],{"class":397},[147,144758,130578],{"class":157},[147,144760,144761],{"class":458},"\u002F* 1rem = 10px *\u002F\n",[147,144763,144764],{"class":149,"line":1469},[147,144765,1839],{"class":157},[147,144767,144768,144770],{"class":149,"line":1475},[147,144769,130563],{"class":2237},[147,144771,15845],{"class":157},[147,144773,144774,144776,144778,144780,144783,144785],{"class":149,"line":1489},[147,144775,70841],{"class":448},[147,144777,51710],{"class":157},[147,144779,845],{"class":448},[147,144781,144782],{"class":397},"rem",[147,144784,130578],{"class":157},[147,144786,144787],{"class":458},"\u002F* 100px *\u002F\n",[147,144789,144790],{"class":149,"line":1495},[147,144791,1839],{"class":157},[19,144793,144794],{},"common.less",[138,144796,144798],{"className":140,"code":144797,"language":142,"meta":143,"style":143},"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",[51,144799,144800,144806,144821,144825,144831,144845,144849,144853,144857,144863,144877,144881,144887,144901],{"__ignoreMap":143},[147,144801,144802,144804],{"class":149,"line":150},[147,144803,50909],{"class":153},[147,144805,15845],{"class":157},[147,144807,144808,144810,144812,144814,144816,144818],{"class":149,"line":312},[147,144809,70899],{"class":448},[147,144811,51710],{"class":157},[147,144813,144754],{"class":448},[147,144815,727],{"class":397},[147,144817,26341],{"class":157},[147,144819,144820],{"class":458},"\u002F* 10px *\u002F\n",[147,144822,144823],{"class":149,"line":1454},[147,144824,1839],{"class":157},[147,144826,144827,144829],{"class":149,"line":1469},[147,144828,51884],{"class":153},[147,144830,15845],{"class":157},[147,144832,144833,144835,144837,144839,144841,144843],{"class":149,"line":1475},[147,144834,70841],{"class":448},[147,144836,51710],{"class":157},[147,144838,845],{"class":448},[147,144840,144782],{"class":397},[147,144842,26341],{"class":157},[147,144844,144787],{"class":458},[147,144846,144847],{"class":149,"line":1489},[147,144848,1839],{"class":157},[147,144850,144851],{"class":149,"line":1495},[147,144852,136176],{"class":157},[147,144854,144855],{"class":149,"line":1586},[147,144856,144739],{"class":458},[147,144858,144859,144861],{"class":149,"line":1592},[147,144860,50909],{"class":153},[147,144862,15845],{"class":157},[147,144864,144865,144867,144869,144871,144873,144875],{"class":149,"line":1604},[147,144866,70899],{"class":448},[147,144868,51710],{"class":157},[147,144870,144754],{"class":448},[147,144872,727],{"class":397},[147,144874,130578],{"class":157},[147,144876,144761],{"class":458},[147,144878,144879],{"class":149,"line":1886},[147,144880,1839],{"class":157},[147,144882,144883,144885],{"class":149,"line":1891},[147,144884,130563],{"class":2237},[147,144886,15845],{"class":157},[147,144888,144889,144891,144893,144895,144897,144899],{"class":149,"line":1897},[147,144890,70841],{"class":448},[147,144892,51710],{"class":157},[147,144894,845],{"class":448},[147,144896,144782],{"class":397},[147,144898,130578],{"class":157},[147,144900,144787],{"class":458},[147,144902,144903],{"class":149,"line":1902},[147,144904,1839],{"class":157},[19,144906,144907,144908,144911],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23826,144909,144910],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[138,144913,144916],{"className":144914,"code":144915,"language":5461},[5459],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[51,144917,144915],{"__ignoreMap":143},[19,144919,144920],{},"less保存时会自动变成.css文件",[19,144922,144923],{},"好好搞懂上述代码写法",[367,144925,144927],{"id":144926},"_2132-样式导入样式","21.3.2 样式导入样式",[29,144929],{"style":31,"src":144930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[367,144932,144934],{"id":144933},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[350,144936,144937],{},[353,144938,144939],{},"准备工作",[29,144941],{"style":31,"src":144942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,144944,144945,144946],{},"github地址：",[637,144947,144948],{"href":144948,"rel":144949},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[24138],[19,144951,144952],{},"下载之后，将index.js文件拖到项目中就可以了",[19,144954,144955,144956],{},"js文件引入到index.html中使用的是",[51,144957,144958],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[350,144960,144961],{"start":312},[353,144962,144963],{},"vscode插件",[29,144965],{"style":31,"src":144966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,144968,144969],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,144971,144972],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[29,144974],{"style":31,"src":144975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,144977,144978],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[29,144980],{"style":31,"src":144981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,144983,144984],{},"修改成75就可以，alt+z为快捷键",[19,144986,144987],{},"index.css：",[138,144989,144990],{"className":140,"code":144732,"language":142,"meta":143,"style":143},[51,144991,144992,144996,145002,145016,145020,145026,145040],{"__ignoreMap":143},[147,144993,144994],{"class":149,"line":150},[147,144995,144739],{"class":458},[147,144997,144998,145000],{"class":149,"line":312},[147,144999,50909],{"class":153},[147,145001,15845],{"class":157},[147,145003,145004,145006,145008,145010,145012,145014],{"class":149,"line":1454},[147,145005,70899],{"class":448},[147,145007,51710],{"class":157},[147,145009,144754],{"class":448},[147,145011,727],{"class":397},[147,145013,130578],{"class":157},[147,145015,144761],{"class":458},[147,145017,145018],{"class":149,"line":1469},[147,145019,1839],{"class":157},[147,145021,145022,145024],{"class":149,"line":1475},[147,145023,130563],{"class":2237},[147,145025,15845],{"class":157},[147,145027,145028,145030,145032,145034,145036,145038],{"class":149,"line":1489},[147,145029,70841],{"class":448},[147,145031,51710],{"class":157},[147,145033,845],{"class":448},[147,145035,144782],{"class":397},[147,145037,130578],{"class":157},[147,145039,144787],{"class":458},[147,145041,145042],{"class":149,"line":1495},[147,145043,1839],{"class":157},[19,145045,144729],{},[138,145047,145048],{"className":140,"code":127119,"language":142,"meta":143,"style":143},[51,145049,145050,145056,145068],{"__ignoreMap":143},[147,145051,145052,145054],{"class":149,"line":150},[147,145053,52073],{"class":153},[147,145055,15845],{"class":157},[147,145057,145058,145060,145062,145064,145066],{"class":149,"line":312},[147,145059,70899],{"class":448},[147,145061,51710],{"class":157},[147,145063,1000],{"class":448},[147,145065,51765],{"class":397},[147,145067,1565],{"class":157},[147,145069,145070],{"class":149,"line":1454},[147,145071,1839],{"class":157},[14,145073,145075],{"id":145074},"_214-响应式开发","21.4 响应式开发",[19,145077,145078],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[29,145080],{"style":31,"src":145081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,145083,145084],{},"做法：",[1406,145086,145087,145090],{},[353,145088,145089],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[353,145091,145092],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[29,145094],{"style":31,"src":145095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,145097,145098],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[367,145100,145102],{"id":145101},"_2141-简单代码示范","21.4.1 简单代码示范",[138,145104,145105],{"className":140,"code":144732,"language":142,"meta":143,"style":143},[51,145106,145107,145111,145117,145131,145135,145141,145155],{"__ignoreMap":143},[147,145108,145109],{"class":149,"line":150},[147,145110,144739],{"class":458},[147,145112,145113,145115],{"class":149,"line":312},[147,145114,50909],{"class":153},[147,145116,15845],{"class":157},[147,145118,145119,145121,145123,145125,145127,145129],{"class":149,"line":1454},[147,145120,70899],{"class":448},[147,145122,51710],{"class":157},[147,145124,144754],{"class":448},[147,145126,727],{"class":397},[147,145128,130578],{"class":157},[147,145130,144761],{"class":458},[147,145132,145133],{"class":149,"line":1469},[147,145134,1839],{"class":157},[147,145136,145137,145139],{"class":149,"line":1475},[147,145138,130563],{"class":2237},[147,145140,15845],{"class":157},[147,145142,145143,145145,145147,145149,145151,145153],{"class":149,"line":1489},[147,145144,70841],{"class":448},[147,145146,51710],{"class":157},[147,145148,845],{"class":448},[147,145150,144782],{"class":397},[147,145152,130578],{"class":157},[147,145154,144787],{"class":458},[147,145156,145157],{"class":149,"line":1495},[147,145158,1839],{"class":157},[19,145160,145161],{},"父盒子一般命名为container",[367,145163,145165],{"id":145164},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,145167,145168,145169],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[234,145170,145171],{},"使得 Web 开发更加快捷",[1406,145173,145174],{},[353,145175,145176,145177],{},"官网：",[234,145178,145179],{},[637,145180,145181],{"href":145181,"rel":145182},"http:\u002F\u002Fgetbootstrap.com\u002F",[24138],[19,145184,145185],{},"可以直接去官网拿现成的东西",[350,145187,145188],{},[353,145189,145190],{},"Bootstrap的使用",[19,145192,145193],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,145195,145196],{},"Bootstrap 使用四步曲：",[19,145198,145199,145202],{},[234,145200,145201],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[29,145204],{"style":31,"src":145205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,145207,145208],{},"打开Bootstrap官网，然后下载",[29,145210],{"style":31,"src":145211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[29,145213],{"style":31,"src":145214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,145216,145217],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,145219,145220],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,145222,145223],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[29,145225],{"style":31,"src":145226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[138,145228,145230],{"className":140,"code":145229,"language":142,"meta":143,"style":143},".center {\n  color: red;\n}\n",[51,145231,145232,145238,145248],{"__ignoreMap":143},[147,145233,145234,145236],{"class":149,"line":150},[147,145235,127006],{"class":2237},[147,145237,15845],{"class":157},[147,145239,145240,145242,145244,145246],{"class":149,"line":312},[147,145241,71178],{"class":448},[147,145243,51710],{"class":157},[147,145245,57694],{"class":448},[147,145247,1565],{"class":157},[147,145249,145250],{"class":149,"line":1454},[147,145251,1839],{"class":157},[19,145253,145254,145257],{},[51,145255,145256],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[29,145259],{"style":31,"src":145260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[29,145262],{"style":31,"src":145263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[29,145265],{"style":31,"src":145266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,145268,145269],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[29,145271],{"style":31,"src":145272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,145274,145275],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[350,145277,145278],{"start":312},[353,145279,145280],{},"布局容器",[29,145282],{"style":31,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,145285,145286],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,145288,145289],{},"container-fluid用于移动式布局比较方便",[350,145291,145292],{"start":1454},[353,145293,145294,145295],{},"bootstrap ",[234,145296,145297],{},"栅格系统原理",[29,145299],{"style":31,"src":145300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[350,145302,145303],{"start":1469},[353,145304,145305],{},[234,145306,145307],{},"栅格选项参数",[29,145309],{"style":31,"src":145310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,145312,145313],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,145315,14906],{},[138,145317,145318],{"className":140,"code":145229,"language":142,"meta":143,"style":143},[51,145319,145320,145326,145336],{"__ignoreMap":143},[147,145321,145322,145324],{"class":149,"line":150},[147,145323,127006],{"class":2237},[147,145325,15845],{"class":157},[147,145327,145328,145330,145332,145334],{"class":149,"line":312},[147,145329,71178],{"class":448},[147,145331,51710],{"class":157},[147,145333,57694],{"class":448},[147,145335,1565],{"class":157},[147,145337,145338],{"class":149,"line":1454},[147,145339,1839],{"class":157},[19,145341,135758],{},[29,145343],{"style":31,"src":145344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,145346,145347],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,145349,145350],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,145352,145353],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,145355,145356],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,145358,145359],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,145361,145362],{},"汇总展示说明：",[138,145364,145365],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,145366,145367,145371,145385,145389],{"__ignoreMap":143},[147,145368,145369],{"class":149,"line":150},[147,145370,130826],{"class":458},[147,145372,145373,145375,145377,145379,145381,145383],{"class":149,"line":312},[147,145374,1309],{"class":157},[147,145376,51884],{"class":153},[147,145378,53759],{"class":2237},[147,145380,445],{"class":157},[147,145382,130839],{"class":504},[147,145384,51580],{"class":157},[147,145386,145387],{"class":149,"line":1454},[147,145388,130846],{"class":157},[147,145390,145391,145393,145395],{"class":149,"line":1469},[147,145392,52058],{"class":157},[147,145394,51884],{"class":153},[147,145396,51580],{"class":157},[29,145398],{"style":31,"src":145399},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,145401,145402],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[138,145404,145405],{"className":127462,"code":130819,"language":127464,"meta":143,"style":143},[51,145406,145407,145411,145425,145429],{"__ignoreMap":143},[147,145408,145409],{"class":149,"line":150},[147,145410,130826],{"class":458},[147,145412,145413,145415,145417,145419,145421,145423],{"class":149,"line":312},[147,145414,1309],{"class":157},[147,145416,51884],{"class":153},[147,145418,53759],{"class":2237},[147,145420,445],{"class":157},[147,145422,130839],{"class":504},[147,145424,51580],{"class":157},[147,145426,145427],{"class":149,"line":1454},[147,145428,130846],{"class":157},[147,145430,145431,145433,145435],{"class":149,"line":1469},[147,145432,52058],{"class":157},[147,145434,51884],{"class":153},[147,145436,51580],{"class":157},[350,145438,145439],{"start":1475},[353,145440,145441],{},[234,145442,145443],{},"列嵌套",[29,145445],{"style":31,"src":145446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,145448,145449],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,145451,145452],{},"没加row内部这样：",[29,145454],{"style":31,"src":145455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,145457,145458],{},"加上row之后内部为：",[29,145460],{"style":31,"src":145461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[350,145463,145464],{"start":1489},[353,145465,145466],{},[234,145467,145468],{},"列偏移",[29,145470],{"style":31,"src":145471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,145473,145474],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,145476,145477],{},"要加偏移量，即偏移份数",[19,145479,145480],{},"偏移的份数=12-两个盒子的份数",[350,145482,145483],{"start":1495},[353,145484,145485],{},[234,145486,145487],{},"列排序",[29,145489],{"style":31,"src":145490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,145492,145493],{},"pull拉左；push推右",[350,145495,145496],{"start":1586},[353,145497,145498],{},[234,145499,145500],{},"响应式工具",[29,145502],{"style":31,"src":145503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,145505,145506],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[367,145508,145510],{"id":145509},"_2143-响应式小项目","21.4.3 响应式小项目",[19,145512,145513],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,145515,145516],{},"ul {",[19,145518,145519],{},"list-style: none;",[19,145521,145522],{},"margin:0;",[19,145524,145525],{},"padding:0; }",[29,145527],{"style":31,"src":145528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[29,145530],{"style":31,"src":145531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,145533,145534],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,145536,69162],{},[138,145538,145539],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,145540,145541,145547,145557],{"__ignoreMap":143},[147,145542,145543,145545],{"class":149,"line":150},[147,145544,130563],{"class":2237},[147,145546,15845],{"class":157},[147,145548,145549,145551,145553,145555],{"class":149,"line":312},[147,145550,131195],{"class":448},[147,145552,51710],{"class":157},[147,145554,24009],{"class":448},[147,145556,1565],{"class":157},[147,145558,145559],{"class":149,"line":1454},[147,145560,1839],{"class":157},[19,145562,70726],{},[138,145564,145565],{"className":140,"code":139385,"language":142,"meta":143,"style":143},[51,145566,145567,145573,145583],{"__ignoreMap":143},[147,145568,145569,145571],{"class":149,"line":150},[147,145570,130563],{"class":2237},[147,145572,15845],{"class":157},[147,145574,145575,145577,145579,145581],{"class":149,"line":312},[147,145576,131195],{"class":448},[147,145578,51710],{"class":157},[147,145580,24009],{"class":448},[147,145582,1565],{"class":157},[147,145584,145585],{"class":149,"line":1454},[147,145586,1839],{"class":157},[14,145588,145590],{"id":145589},"_215-swiper-插件使用","21.5 swiper 插件使用",[1406,145592,145593,145596,145599],{},[353,145594,145595],{},"下载需要的css和js文件html页面中 引入相关文件",[353,145597,145598],{},"官网找到类似案例，复制html结构，css样式 js 语法",[353,145600,145601],{},"根据需求定制修改模块",[29,145603],{"style":31,"src":145604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,145606,145607],{},"解压后将这两部分放到项目中",[29,145609],{"style":31,"src":145610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,145612,145613],{},"这个插件可以帮助我们实现轮播图效果",[19,145615,145616],{},"用法：",[29,145618],{"style":31,"src":145619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,145621,145622],{},"找到自己喜欢的",[29,145624],{"style":31,"src":145625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,145627,145628],{},"右键，查看网页源代码",[29,145630],{"style":31,"src":145631},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,145633,145634],{},"复制人家的结构内容",[19,145636,145637],{},"然后去看API文档：",[29,145639],{"style":31,"src":145640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,145642,145643],{},"可以看看如何修改样式",[19,145645,145646],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[308,145648,145649],{},"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":143,"searchDepth":312,"depth":312,"links":145651},[145652,145657,145661,145666,145671],{"id":144452,"depth":312,"text":144453,"children":145653},[145654,145655,145656],{"id":144456,"depth":1454,"text":144457},{"id":144466,"depth":1454,"text":144467},{"id":144561,"depth":1454,"text":144562},{"id":144576,"depth":312,"text":144577,"children":145658},[145659,145660],{"id":144598,"depth":1454,"text":144599},{"id":144614,"depth":1454,"text":144615},{"id":144689,"depth":312,"text":144690,"children":145662},[145663,145664,145665],{"id":144702,"depth":1454,"text":144703},{"id":144926,"depth":1454,"text":144927},{"id":144933,"depth":1454,"text":144934},{"id":145074,"depth":312,"text":145075,"children":145667},[145668,145669,145670],{"id":145101,"depth":1454,"text":145102},{"id":145164,"depth":1454,"text":145165},{"id":145509,"depth":1454,"text":145510},{"id":145589,"depth":312,"text":145590},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144444,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145678,"title":145679,"body":145680,"description":321,"extension":322,"meta":145900,"navigation":324,"path":145901,"seo":145902,"stem":145903,"__hash__":145904},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145681,"toc":145896},[145682,145685,145689,145692,145707,145712,145715,145720,145755,145760,145772,145777,145790,145795,145812,145817,145837,145842,145860,145863,145866,145869,145872,145876,145879,145882,145885,145888,145891,145894],[10,145683,145679],{"id":145684},"_22-代码提交与新型相对单位",[14,145686,145688],{"id":145687},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,145690,145691],{},"法1：",[350,145693,145694,145701,145704],{},[353,145695,145696,145697],{},"登录网站注册：",[637,145698,145699],{"href":145699,"rel":145700},"https:\u002F\u002Fgitee.com\u002F",[24138],[353,145702,145703],{},"码云创建新的仓库",[353,145705,145706],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1406,145708,145709],{},[353,145710,145711],{},"在网站根目录右键-- Git Bash Here",[29,145713],{"style":31,"src":145714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1406,145716,145717],{},[353,145718,145719],{},"如果是第一次利用git提交，请配置好全局选项",[138,145721,145723],{"className":117566,"code":145722,"language":117568,"meta":143,"style":143},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[51,145724,145725,145741],{"__ignoreMap":143},[147,145726,145727,145730,145732,145735,145738],{"class":149,"line":150},[147,145728,145729],{"class":2237},"git",[147,145731,119989],{"class":504},[147,145733,145734],{"class":448}," --global",[147,145736,145737],{"class":504}," user.name",[147,145739,145740],{"class":504}," \"你的名字\"\n",[147,145742,145743,145745,145747,145749,145752],{"class":149,"line":312},[147,145744,145729],{"class":2237},[147,145746,119989],{"class":504},[147,145748,145734],{"class":448},[147,145750,145751],{"class":504}," user.email",[147,145753,145754],{"class":504}," \"你的邮箱\"\n",[1406,145756,145757],{},[353,145758,145759],{},"初始化仓库",[138,145761,145763],{"className":117566,"code":145762,"language":117568,"meta":143,"style":143},"git init\n",[51,145764,145765],{"__ignoreMap":143},[147,145766,145767,145769],{"class":149,"line":150},[147,145768,145729],{"class":2237},[147,145770,145771],{"class":504}," init\n",[1406,145773,145774],{},[353,145775,145776],{},"把本地文件放到暂存区",[138,145778,145780],{"className":117566,"code":145779,"language":117568,"meta":143,"style":143},"git add .\n",[51,145781,145782],{"__ignoreMap":143},[147,145783,145784,145786,145788],{"class":149,"line":150},[147,145785,145729],{"class":2237},[147,145787,5483],{"class":504},[147,145789,29015],{"class":504},[1406,145791,145792],{},[353,145793,145794],{},"把本地文件放到本地仓库里面",[138,145796,145798],{"className":117566,"code":145797,"language":117568,"meta":143,"style":143},"git commit -m \"first commit\"\n",[51,145799,145800],{"__ignoreMap":143},[147,145801,145802,145804,145807,145809],{"class":149,"line":150},[147,145803,145729],{"class":2237},[147,145805,145806],{"class":504}," commit",[147,145808,101154],{"class":448},[147,145810,145811],{"class":504}," \"first commit\"\n",[1406,145813,145814],{},[353,145815,145816],{},"链接远程仓库",[138,145818,145820],{"className":117566,"code":145819,"language":117568,"meta":143,"style":143},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[51,145821,145822],{"__ignoreMap":143},[147,145823,145824,145826,145829,145831,145834],{"class":149,"line":150},[147,145825,145729],{"class":2237},[147,145827,145828],{"class":504}," remote",[147,145830,5483],{"class":504},[147,145832,145833],{"class":504}," origin",[147,145835,145836],{"class":504}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1406,145838,145839],{},[353,145840,145841],{},"把本地仓库的文件推送到远程仓库 push",[138,145843,145845],{"className":117566,"code":145844,"language":117568,"meta":143,"style":143},"git push -u origin master\n",[51,145846,145847],{"__ignoreMap":143},[147,145848,145849,145851,145853,145855,145857],{"class":149,"line":150},[147,145850,145729],{"class":2237},[147,145852,29290],{"class":504},[147,145854,28564],{"class":448},[147,145856,145833],{"class":504},[147,145858,145859],{"class":504}," master\n",[29,145861],{"style":31,"src":145862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,145864,145865],{},"上方方法暂未实现，后边学完git后在整",[19,145867,145868],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[29,145870],{"style":31,"src":145871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,145873,145875],{"id":145874},"_222-新型相对单位","22.2 新型相对单位",[29,145877],{"style":31,"src":145878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[29,145880],{"style":31,"src":145881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,145883,145884],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,145886,145887],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[29,145889],{"style":31,"src":145890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,145892,145893],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[308,145895,24231],{},{"title":143,"searchDepth":312,"depth":312,"links":145897},[145898,145899],{"id":145687,"depth":312,"text":145688},{"id":145874,"depth":312,"text":145875},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145679,"description":321},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145906,"title":145907,"body":145908,"description":145912,"extension":322,"meta":145913,"navigation":324,"path":145914,"seo":145915,"stem":145916,"__hash__":145917},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145909,"toc":145910},[],{"title":143,"searchDepth":312,"depth":312,"links":145911},[],"自己正经开始学编程的第一门语言！",{"category":93111},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145907,"description":145912},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145919,"title":145920,"body":145921,"description":321,"extension":322,"meta":147068,"navigation":324,"path":147069,"seo":147070,"stem":147071,"__hash__":147072},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145922,"toc":147044},[145923,145926,145930,145933,145936,145961,145964,145970,145974,145977,146004,146007,146047,146050,146062,146065,146071,146075,146079,146106,146123,146130,146134,146137,146163,146166,146170,146173,146213,146216,146233,146239,146243,146248,146292,146295,146313,146316,146384,146388,146395,146398,146413,146416,146425,146428,146439,146442,146451,146454,146471,146474,146489,146493,146497,146500,146502,146522,146526,146529,146532,146543,146546,146552,146556,146562,146589,146592,146604,146607,146618,146621,146627,146631,146637,146687,146690,146732,146735,146768,146771,146805,146809,146812,146832,146835,146871,146874,146887,146891,146895,146901,146904,146917,146921,146924,146930,146933,146937,146940,146943,146992,146996,147012,147018,147025,147031,147041],[10,145924,145920],{"id":145925},"_1-python环境与第一个程序",[14,145927,145929],{"id":145928},"_11-什么是python","1.1 什么是Python",[19,145931,145932],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,145934,145935],{},"理解 Python 时抓住三个关键词：",[350,145937,145938,145941,145944],{},[353,145939,145940],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[353,145942,145943],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[353,145945,145946,145947,611,145950,611,145953,611,145956,611,145958,28659],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[51,145948,145949],{},"os",[51,145951,145952],{},"sys",[51,145954,145955],{},"json",[51,145957,58133],{},[51,145959,145960],{},"datetime",[19,145962,145963],{},"Python 程序的运行链路：",[138,145965,145968],{"className":145966,"code":145967,"language":5461,"meta":143},[5459],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[51,145969,145967],{"__ignoreMap":143},[14,145971,145973],{"id":145972},"_12-python解释器","1.2 Python解释器",[19,145975,145976],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[138,145978,145980],{"className":24095,"code":145979,"language":24097,"meta":143,"style":143},"python --version\npython3 --version\npython\npython3\n",[51,145981,145982,145988,145994,145999],{"__ignoreMap":143},[147,145983,145984,145986],{"class":149,"line":150},[147,145985,30654],{"class":2237},[147,145987,26567],{"class":448},[147,145989,145990,145992],{"class":149,"line":312},[147,145991,101151],{"class":2237},[147,145993,26567],{"class":448},[147,145995,145996],{"class":149,"line":1454},[147,145997,145998],{"class":2237},"python\n",[147,146000,146001],{"class":149,"line":1469},[147,146002,146003],{"class":2237},"python3\n",[19,146005,146006],{},"进入交互模式后，可以直接输入表达式：",[138,146008,146010],{"className":30652,"code":146009,"language":30654,"meta":143,"style":143},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[51,146011,146012,146023,146028,146042],{"__ignoreMap":143},[147,146013,146014,146017,146019,146021],{"class":149,"line":150},[147,146015,146016],{"class":397},">>>",[147,146018,25392],{"class":448},[147,146020,45840],{"class":397},[147,146022,47997],{"class":448},[147,146024,146025],{"class":149,"line":312},[147,146026,146027],{"class":448},"3\n",[147,146029,146030,146032,146035,146037,146040],{"class":149,"line":1454},[147,146031,146016],{"class":397},[147,146033,146034],{"class":448}," print",[147,146036,401],{"class":157},[147,146038,146039],{"class":504},"\"hello python\"",[147,146041,407],{"class":157},[147,146043,146044],{"class":149,"line":1469},[147,146045,146046],{"class":157},"hello python\n",[19,146048,146049],{},"退出交互模式：",[138,146051,146053],{"className":30652,"code":146052,"language":30654,"meta":143,"style":143},"exit()\n",[51,146054,146055],{"__ignoreMap":143},[147,146056,146057,146060],{"class":149,"line":150},[147,146058,146059],{"class":448},"exit",[147,146061,2250],{"class":157},[19,146063,146064],{},"或使用快捷键：",[138,146066,146069],{"className":146067,"code":146068,"language":5461,"meta":143},[5459],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[51,146070,146068],{"__ignoreMap":143},[14,146072,146074],{"id":146073},"_13-安装python","1.3 安装Python",[367,146076,146078],{"id":146077},"_131-windows安装","1.3.1 Windows安装",[350,146080,146081,146088,146091,146097,146103],{},[353,146082,146083,146084],{},"打开 Python 官网：",[637,146085,146086],{"href":146086,"rel":146087},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[24138],[353,146089,146090],{},"下载 Windows Installer。",[353,146092,146093,146094,28659],{},"安装时勾选 ",[51,146095,146096],{},"Add Python to PATH",[353,146098,146099,146100,28659],{},"点击 ",[51,146101,146102],{},"Install Now",[353,146104,146105],{},"安装完成后打开命令提示符验证：",[138,146107,146109],{"className":24095,"code":146108,"language":24097,"meta":143,"style":143},"python --version\npip --version\n",[51,146110,146111,146117],{"__ignoreMap":143},[147,146112,146113,146115],{"class":149,"line":150},[147,146114,30654],{"class":2237},[147,146116,26567],{"class":448},[147,146118,146119,146121],{"class":149,"line":312},[147,146120,24104],{"class":2237},[147,146122,26567],{"class":448},[19,146124,146125,146126,146129],{},"如果提示 ",[51,146127,146128],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[367,146131,146133],{"id":146132},"_132-macos安装","1.3.2 macOS安装",[19,146135,146136],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[138,146138,146140],{"className":24095,"code":146139,"language":24097,"meta":143,"style":143},"brew install python\npython3 --version\npip3 --version\n",[51,146141,146142,146151,146157],{"__ignoreMap":143},[147,146143,146144,146147,146149],{"class":149,"line":150},[147,146145,146146],{"class":2237},"brew",[147,146148,24107],{"class":504},[147,146150,124588],{"class":504},[147,146152,146153,146155],{"class":149,"line":312},[147,146154,101151],{"class":2237},[147,146156,26567],{"class":448},[147,146158,146159,146161],{"class":149,"line":1454},[147,146160,119970],{"class":2237},[147,146162,26567],{"class":448},[19,146164,146165],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[367,146167,146169],{"id":146168},"_133-linux安装","1.3.3 Linux安装",[19,146171,146172],{},"Ubuntu\u002FDebian：",[138,146174,146176],{"className":24095,"code":146175,"language":24097,"meta":143,"style":143},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[51,146177,146178,146186,146201,146207],{"__ignoreMap":143},[147,146179,146180,146182,146184],{"class":149,"line":150},[147,146181,24850],{"class":2237},[147,146183,117587],{"class":504},[147,146185,26516],{"class":504},[147,146187,146188,146190,146192,146194,146196,146198],{"class":149,"line":312},[147,146189,24850],{"class":2237},[147,146191,117587],{"class":504},[147,146193,24107],{"class":504},[147,146195,104673],{"class":504},[147,146197,101070],{"class":504},[147,146199,146200],{"class":504}," python3-venv\n",[147,146202,146203,146205],{"class":149,"line":1454},[147,146204,101151],{"class":2237},[147,146206,26567],{"class":448},[147,146208,146209,146211],{"class":149,"line":1469},[147,146210,119970],{"class":2237},[147,146212,26567],{"class":448},[19,146214,146215],{},"Fedora：",[138,146217,146219],{"className":24095,"code":146218,"language":24097,"meta":143,"style":143},"sudo dnf install python3 python3-pip\n",[51,146220,146221],{"__ignoreMap":143},[147,146222,146223,146225,146227,146229,146231],{"class":149,"line":150},[147,146224,24850],{"class":2237},[147,146226,26589],{"class":504},[147,146228,24107],{"class":504},[147,146230,104673],{"class":504},[147,146232,120035],{"class":504},[19,146234,146235,146236,146238],{},"Linux 上通常使用 ",[51,146237,101151],{}," 命令，避免和系统旧版本 Python 冲突。",[14,146240,146242],{"id":146241},"_14-pip包管理器","1.4 pip包管理器",[19,146244,146245,146247],{},[51,146246,24104],{}," 用来安装第三方库。",[138,146249,146251],{"className":24095,"code":146250,"language":24097,"meta":143,"style":143},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[51,146252,146253,146262,146271,146279,146285],{"__ignoreMap":143},[147,146254,146255,146257,146259],{"class":149,"line":150},[147,146256,24104],{"class":2237},[147,146258,24107],{"class":504},[147,146260,146261],{"class":504}," requests\n",[147,146263,146264,146266,146269],{"class":149,"line":312},[147,146265,24104],{"class":2237},[147,146267,146268],{"class":504}," uninstall",[147,146270,146261],{"class":504},[147,146272,146273,146275,146277],{"class":149,"line":1454},[147,146274,24104],{"class":2237},[147,146276,117844],{"class":504},[147,146278,146261],{"class":504},[147,146280,146281,146283],{"class":149,"line":1469},[147,146282,24104],{"class":2237},[147,146284,119225],{"class":504},[147,146286,146287,146289],{"class":149,"line":1475},[147,146288,24104],{"class":2237},[147,146290,146291],{"class":504}," freeze\n",[19,146293,146294],{},"国内网络较慢时可以临时使用镜像：",[138,146296,146298],{"className":24095,"code":146297,"language":24097,"meta":143,"style":143},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[51,146299,146300],{"__ignoreMap":143},[147,146301,146302,146304,146306,146309,146311],{"class":149,"line":150},[147,146303,24104],{"class":2237},[147,146305,24107],{"class":504},[147,146307,146308],{"class":504}," requests",[147,146310,26704],{"class":448},[147,146312,119998],{"class":504},[19,146314,146315],{},"常见第三方库：",[537,146317,146318,146327],{},[540,146319,146320],{},[543,146321,146322,146325],{},[546,146323,146324],{},"库",[546,146326,102967],{},[583,146328,146329,146337,146344,146352,146360,146368,146376],{},[543,146330,146331,146334],{},[588,146332,146333],{},"requests",[588,146335,146336],{},"网络请求",[543,146338,146339,146341],{},[588,146340,100898],{},[588,146342,146343],{},"数值计算",[543,146345,146346,146349],{},[588,146347,146348],{},"pandas",[588,146350,146351],{},"表格数据处理",[543,146353,146354,146357],{},[588,146355,146356],{},"matplotlib",[588,146358,146359],{},"绘图",[543,146361,146362,146365],{},[588,146363,146364],{},"pyecharts",[588,146366,146367],{},"ECharts 图表",[543,146369,146370,146373],{},[588,146371,146372],{},"flask",[588,146374,146375],{},"Web 后端",[543,146377,146378,146381],{},[588,146379,146380],{},"pytest",[588,146382,146383],{},"自动化测试",[14,146385,146387],{"id":146386},"_15-虚拟环境","1.5 虚拟环境",[19,146389,146390,146391,146394],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[51,146392,146393],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,146396,146397],{},"创建虚拟环境：",[138,146399,146401],{"className":24095,"code":146400,"language":24097,"meta":143,"style":143},"python -m venv .venv\n",[51,146402,146403],{"__ignoreMap":143},[147,146404,146405,146407,146409,146411],{"class":149,"line":150},[147,146406,30654],{"class":2237},[147,146408,101154],{"class":448},[147,146410,101157],{"class":504},[147,146412,101160],{"class":504},[19,146414,146415],{},"Windows 激活：",[138,146417,146419],{"className":24095,"code":146418,"language":24097,"meta":143,"style":143},".venv\\Scripts\\activate\n",[51,146420,146421],{"__ignoreMap":143},[147,146422,146423],{"class":149,"line":150},[147,146424,146418],{"class":2237},[19,146426,146427],{},"macOS\u002FLinux 激活：",[138,146429,146431],{"className":24095,"code":146430,"language":24097,"meta":143,"style":143},"source .venv\u002Fbin\u002Factivate\n",[51,146432,146433],{"__ignoreMap":143},[147,146434,146435,146437],{"class":149,"line":150},[147,146436,101165],{"class":448},[147,146438,101168],{"class":504},[19,146440,146441],{},"退出虚拟环境：",[138,146443,146445],{"className":24095,"code":146444,"language":24097,"meta":143,"style":143},"deactivate\n",[51,146446,146447],{"__ignoreMap":143},[147,146448,146449],{"class":149,"line":150},[147,146450,146444],{"class":2237},[19,146452,146453],{},"保存依赖：",[138,146455,146457],{"className":24095,"code":146456,"language":24097,"meta":143,"style":143},"pip freeze > requirements.txt\n",[51,146458,146459],{"__ignoreMap":143},[147,146460,146461,146463,146466,146468],{"class":149,"line":150},[147,146462,24104],{"class":2237},[147,146464,146465],{"class":504}," freeze",[147,146467,26496],{"class":397},[147,146469,146470],{"class":504}," requirements.txt\n",[19,146472,146473],{},"安装依赖：",[138,146475,146477],{"className":24095,"code":146476,"language":24097,"meta":143,"style":143},"pip install -r requirements.txt\n",[51,146478,146479],{"__ignoreMap":143},[147,146480,146481,146483,146485,146487],{"class":149,"line":150},[147,146482,24104],{"class":2237},[147,146484,24107],{"class":504},[147,146486,119909],{"class":448},[147,146488,146470],{"class":504},[14,146490,146492],{"id":146491},"_16-开发工具","1.6 开发工具",[367,146494,146496],{"id":146495},"_161-pycharm","1.6.1 PyCharm",[19,146498,146499],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,146501,122332],{},[350,146503,146504,146507,146510,146516,146519],{},[353,146505,146506],{},"New Project：创建项目。",[353,146508,146509],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[353,146511,146512,146513,126253],{},"New Python File：创建 ",[51,146514,146515],{},".py",[353,146517,146518],{},"Run：运行当前文件。",[353,146520,146521],{},"Debug：断点调试。",[367,146523,146525],{"id":146524},"_162-vs-code","1.6.2 VS Code",[19,146527,146528],{},"VS Code 轻量，适合后续多语言开发。",[19,146530,146531],{},"建议安装插件：",[350,146533,146534,146537,146540],{},[353,146535,146536],{},"Python。",[353,146538,146539],{},"Pylance。",[353,146541,146542],{},"Jupyter。",[19,146544,146545],{},"选择解释器：",[138,146547,146550],{"className":146548,"code":146549,"language":5461,"meta":143},[5459],"Ctrl + Shift + P -> Python: Select Interpreter\n",[51,146551,146549],{"__ignoreMap":143},[14,146553,146555],{"id":146554},"_17-第一个python程序","1.7 第一个Python程序",[19,146557,146558,146559,24892],{},"创建文件 ",[51,146560,146561],{},"hello.py",[138,146563,146565],{"className":30652,"code":146564,"language":30654,"meta":143,"style":143},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[51,146566,146567,146578],{"__ignoreMap":143},[147,146568,146569,146571,146573,146576],{"class":149,"line":150},[147,146570,30689],{"class":448},[147,146572,401],{"class":157},[147,146574,146575],{"class":504},"\"Hello World\"",[147,146577,407],{"class":157},[147,146579,146580,146582,146584,146587],{"class":149,"line":312},[147,146581,30689],{"class":448},[147,146583,401],{"class":157},[147,146585,146586],{"class":504},"\"你好，Python\"",[147,146588,407],{"class":157},[19,146590,146591],{},"在终端运行：",[138,146593,146595],{"className":24095,"code":146594,"language":24097,"meta":143,"style":143},"python hello.py\n",[51,146596,146597],{"__ignoreMap":143},[147,146598,146599,146601],{"class":149,"line":150},[147,146600,30654],{"class":2237},[147,146602,146603],{"class":504}," hello.py\n",[19,146605,146606],{},"或：",[138,146608,146610],{"className":24095,"code":146609,"language":24097,"meta":143,"style":143},"python3 hello.py\n",[51,146611,146612],{"__ignoreMap":143},[147,146613,146614,146616],{"class":149,"line":150},[147,146615,101151],{"class":2237},[147,146617,146603],{"class":504},[19,146619,146620],{},"输出：",[138,146622,146625],{"className":146623,"code":146624,"language":5461,"meta":143},[5459],"Hello World\n你好，Python\n",[51,146626,146624],{"__ignoreMap":143},[14,146628,146630],{"id":146629},"_18-print函数","1.8 print函数",[19,146632,146633,146636],{},[51,146634,146635],{},"print()"," 用来输出内容。",[138,146638,146640],{"className":30652,"code":146639,"language":30654,"meta":143,"style":143},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[51,146641,146642,146652,146662,146672],{"__ignoreMap":143},[147,146643,146644,146646,146648,146650],{"class":149,"line":150},[147,146645,30689],{"class":448},[147,146647,401],{"class":157},[147,146649,6118],{"class":504},[147,146651,407],{"class":157},[147,146653,146654,146656,146658,146660],{"class":149,"line":312},[147,146655,30689],{"class":448},[147,146657,401],{"class":157},[147,146659,710],{"class":448},[147,146661,407],{"class":157},[147,146663,146664,146666,146668,146670],{"class":149,"line":1454},[147,146665,30689],{"class":448},[147,146667,401],{"class":157},[147,146669,449],{"class":448},[147,146671,407],{"class":157},[147,146673,146674,146676,146678,146681,146683,146685],{"class":149,"line":1469},[147,146675,30689],{"class":448},[147,146677,401],{"class":157},[147,146679,146680],{"class":504},"\"年龄:\"",[147,146682,12709],{"class":157},[147,146684,1049],{"class":448},[147,146686,407],{"class":157},[19,146688,146689],{},"多个内容用逗号隔开，默认中间加空格：",[138,146691,146693],{"className":30652,"code":146692,"language":30654,"meta":143,"style":143},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[51,146694,146695,146705,146715],{"__ignoreMap":143},[147,146696,146697,146700,146702],{"class":149,"line":150},[147,146698,146699],{"class":157},"name ",[147,146701,445],{"class":397},[147,146703,146704],{"class":504}," \"张三\"\n",[147,146706,146707,146710,146712],{"class":149,"line":312},[147,146708,146709],{"class":157},"age ",[147,146711,445],{"class":397},[147,146713,146714],{"class":448}," 18\n",[147,146716,146717,146719,146721,146724,146727,146729],{"class":149,"line":1454},[147,146718,30689],{"class":448},[147,146720,401],{"class":157},[147,146722,146723],{"class":504},"\"姓名:\"",[147,146725,146726],{"class":157},", name, ",[147,146728,146680],{"class":504},[147,146730,146731],{"class":157},", age)\n",[19,146733,146734],{},"修改分隔符：",[138,146736,146738],{"className":30652,"code":146737,"language":30654,"meta":143,"style":143},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[51,146739,146740],{"__ignoreMap":143},[147,146741,146742,146744,146746,146749,146751,146753,146755,146757,146759,146762,146764,146766],{"class":149,"line":150},[147,146743,30689],{"class":448},[147,146745,401],{"class":157},[147,146747,146748],{"class":504},"\"2024\"",[147,146750,12709],{"class":157},[147,146752,54589],{"class":504},[147,146754,12709],{"class":157},[147,146756,54589],{"class":504},[147,146758,12709],{"class":157},[147,146760,146761],{"class":5490},"sep",[147,146763,445],{"class":397},[147,146765,32757],{"class":504},[147,146767,407],{"class":157},[19,146769,146770],{},"修改结尾符：",[138,146772,146774],{"className":30652,"code":146773,"language":30654,"meta":143,"style":143},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[51,146775,146776,146794],{"__ignoreMap":143},[147,146777,146778,146780,146782,146784,146786,146788,146790,146792],{"class":149,"line":150},[147,146779,30689],{"class":448},[147,146781,401],{"class":157},[147,146783,6118],{"class":504},[147,146785,12709],{"class":157},[147,146787,46075],{"class":5490},[147,146789,445],{"class":397},[147,146791,4633],{"class":504},[147,146793,407],{"class":157},[147,146795,146796,146798,146800,146803],{"class":149,"line":312},[147,146797,30689],{"class":448},[147,146799,401],{"class":157},[147,146801,146802],{"class":504},"\"python\"",[147,146804,407],{"class":157},[14,146806,146808],{"id":146807},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,146810,146811],{},"交互运行适合临时验证：",[138,146813,146815],{"className":30652,"code":146814,"language":30654,"meta":143,"style":143},">>> 10 * 3\n30\n",[51,146816,146817,146827],{"__ignoreMap":143},[147,146818,146819,146821,146823,146825],{"class":149,"line":150},[147,146820,146016],{"class":397},[147,146822,2312],{"class":448},[147,146824,6792],{"class":397},[147,146826,120306],{"class":448},[147,146828,146829],{"class":149,"line":312},[147,146830,146831],{"class":448},"30\n",[19,146833,146834],{},"脚本运行适合保存程序：",[138,146836,146838],{"className":30652,"code":146837,"language":30654,"meta":143,"style":143},"price = 8\ncount = 5\nprint(price * count)\n",[51,146839,146840,146850,146859],{"__ignoreMap":143},[147,146841,146842,146845,146847],{"class":149,"line":150},[147,146843,146844],{"class":157},"price ",[147,146846,445],{"class":397},[147,146848,146849],{"class":448}," 8\n",[147,146851,146852,146855,146857],{"class":149,"line":312},[147,146853,146854],{"class":157},"count ",[147,146856,445],{"class":397},[147,146858,54700],{"class":448},[147,146860,146861,146863,146866,146868],{"class":149,"line":1454},[147,146862,30689],{"class":448},[147,146864,146865],{"class":157},"(price ",[147,146867,854],{"class":397},[147,146869,146870],{"class":157}," count)\n",[19,146872,146873],{},"实际学习中推荐：",[350,146875,146876,146879,146884],{},[353,146877,146878],{},"临时试一个语法，用交互模式。",[353,146880,146881,146882,126253],{},"写完整练习，用 ",[51,146883,146515],{},[353,146885,146886],{},"写项目，用独立目录和虚拟环境。",[14,146888,146890],{"id":146889},"_110-常见错误","1.10 常见错误",[367,146892,146894],{"id":146893},"_1101-命令找不到","1.10.1 命令找不到",[138,146896,146899],{"className":146897,"code":146898,"language":5461,"meta":143},[5459],"python: command not found\n",[51,146900,146898],{"__ignoreMap":143},[19,146902,146903],{},"原因：",[350,146905,146906,146909,146912],{},[353,146907,146908],{},"没安装 Python。",[353,146910,146911],{},"PATH 没配置。",[353,146913,146914,146915,28659],{},"Linux\u002FmacOS 应该使用 ",[51,146916,101151],{},[367,146918,146920],{"id":146919},"_1102-文件名冲突","1.10.2 文件名冲突",[19,146922,146923],{},"不要把文件命名为：",[138,146925,146928],{"className":146926,"code":146927,"language":5461,"meta":143},[5459],"random.py\njson.py\ntime.py\nrequests.py\n",[51,146929,146927],{"__ignoreMap":143},[19,146931,146932],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[367,146934,146936],{"id":146935},"_1103-中文乱码","1.10.3 中文乱码",[19,146938,146939],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,146941,146942],{},"如果读写文件出现乱码，要明确指定编码：",[138,146944,146946],{"className":30652,"code":146945,"language":30654,"meta":143,"style":143},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[51,146947,146948,146982],{"__ignoreMap":143},[147,146949,146950,146952,146955,146957,146960,146962,146965,146967,146970,146972,146975,146977,146979],{"class":149,"line":150},[147,146951,108103],{"class":397},[147,146953,146954],{"class":448}," open",[147,146956,401],{"class":157},[147,146958,146959],{"class":504},"\"data.txt\"",[147,146961,12709],{"class":157},[147,146963,146964],{"class":504},"\"r\"",[147,146966,12709],{"class":157},[147,146968,146969],{"class":5490},"encoding",[147,146971,445],{"class":397},[147,146973,146974],{"class":504},"\"utf-8\"",[147,146976,13988],{"class":157},[147,146978,31657],{"class":397},[147,146980,146981],{"class":157}," f:\n",[147,146983,146984,146987,146989],{"class":149,"line":312},[147,146985,146986],{"class":157},"    content ",[147,146988,445],{"class":397},[147,146990,146991],{"class":157}," f.read()\n",[14,146993,146995],{"id":146994},"_111-本章练习","1.11 本章练习",[350,146997,146998,147001,147007],{},[353,146999,147000],{},"安装 Python，并在终端输出版本号。",[353,147002,147003,147004,147006],{},"新建 ",[51,147005,146561],{},"，输出自己的姓名、年龄、学习目标。",[353,147008,104636,147009,147011],{},[51,147010,146635],{}," 输出下面格式：",[138,147013,147016],{"className":147014,"code":147015,"language":5461,"meta":143},[5459],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[51,147017,147015],{"__ignoreMap":143},[350,147019,147020],{"start":1469},[353,147021,104636,147022,147024],{},[51,147023,146761],{}," 输出日期：",[138,147026,147029],{"className":147027,"code":147028,"language":5461,"meta":143},[5459],"2024-10-10\n",[51,147030,147028],{"__ignoreMap":143},[350,147032,147033],{"start":1475},[353,147034,104636,147035,147037,147038,147040],{},[51,147036,46075],{}," 让两次 ",[51,147039,146635],{}," 输出在同一行。",[308,147042,147043],{},"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":143,"searchDepth":312,"depth":312,"links":147045},[147046,147047,147048,147053,147054,147055,147059,147060,147061,147062,147067],{"id":145928,"depth":312,"text":145929},{"id":145972,"depth":312,"text":145973},{"id":146073,"depth":312,"text":146074,"children":147049},[147050,147051,147052],{"id":146077,"depth":1454,"text":146078},{"id":146132,"depth":1454,"text":146133},{"id":146168,"depth":1454,"text":146169},{"id":146241,"depth":312,"text":146242},{"id":146386,"depth":312,"text":146387},{"id":146491,"depth":312,"text":146492,"children":147056},[147057,147058],{"id":146495,"depth":1454,"text":146496},{"id":146524,"depth":1454,"text":146525},{"id":146554,"depth":312,"text":146555},{"id":146629,"depth":312,"text":146630},{"id":146807,"depth":312,"text":146808},{"id":146889,"depth":312,"text":146890,"children":147063},[147064,147065,147066],{"id":146893,"depth":1454,"text":146894},{"id":146919,"depth":1454,"text":146920},{"id":146935,"depth":1454,"text":146936},{"id":146994,"depth":312,"text":146995},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145920,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":147074,"title":147075,"body":147076,"description":321,"extension":322,"meta":149480,"navigation":324,"path":149481,"seo":149482,"stem":149483,"__hash__":149484},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":147077,"toc":149465},[147078,147081,147085,147088,147091,147108,147111,147153,147156,147160,147163,147166,147203,147206,147240,147243,147335,147339,147353,147356,147383,147386,147390,147493,147500,147503,147520,147524,147531,147720,147723,147796,147800,147803,147887,147890,147922,147926,148130,148133,148137,148143,148245,148248,148504,148508,148511,148514,148528,148530,148716,148720,149082,149088,149092,149095,149219,149222,149401,149404,149408,149441,149445,149462],[10,147079,147075],{"id":147080},"_10-json与pyecharts折线图",[14,147082,147084],{"id":147083},"_101-数据可视化","10.1 数据可视化",[19,147086,147087],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,147089,147090],{},"常见图表：",[350,147092,147093,147096,147099,147102,147105],{},[353,147094,147095],{},"折线图：看趋势。",[353,147097,147098],{},"柱状图：看分类对比。",[353,147100,147101],{},"饼图：看占比。",[353,147103,147104],{},"地图：看地域分布。",[353,147106,147107],{},"散点图：看两个变量之间的关系。",[19,147109,147110],{},"Python 可视化常用库：",[537,147112,147113,147121],{},[540,147114,147115],{},[543,147116,147117,147119],{},[546,147118,146324],{},[546,147120,24013],{},[583,147122,147123,147130,147138,147145],{},[543,147124,147125,147127],{},[588,147126,146356],{},[588,147128,147129],{},"基础、经典、可定制",[543,147131,147132,147135],{},[588,147133,147134],{},"seaborn",[588,147136,147137],{},"统计图表更美观",[543,147139,147140,147142],{},[588,147141,146364],{},[588,147143,147144],{},"生成交互式网页图表",[543,147146,147147,147150],{},[588,147148,147149],{},"plotly",[588,147151,147152],{},"交互图表能力强",[19,147154,147155],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,147157,147159],{"id":147158},"_102-json回顾","10.2 JSON回顾",[19,147161,147162],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,147164,147165],{},"Python 字典：",[138,147167,147169],{"className":30652,"code":147168,"language":30654,"meta":143,"style":143},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[51,147170,147171,147179,147190,147199],{"__ignoreMap":143},[147,147172,147173,147175,147177],{"class":149,"line":150},[147,147174,101930],{"class":157},[147,147176,445],{"class":397},[147,147178,15845],{"class":157},[147,147180,147181,147184,147186,147188],{"class":149,"line":312},[147,147182,147183],{"class":504},"    \"name\"",[147,147185,51710],{"class":157},[147,147187,69542],{"class":504},[147,147189,31740],{"class":157},[147,147191,147192,147195,147197],{"class":149,"line":1454},[147,147193,147194],{"class":504},"    \"value\"",[147,147196,51710],{"class":157},[147,147198,97730],{"class":448},[147,147200,147201],{"class":149,"line":1469},[147,147202,1839],{"class":157},[19,147204,147205],{},"JSON 字符串：",[138,147207,147210],{"className":147208,"code":147209,"language":145955,"meta":143,"style":143},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[51,147211,147212,147216,147227,147236],{"__ignoreMap":143},[147,147213,147214],{"class":149,"line":150},[147,147215,1820],{"class":157},[147,147217,147218,147221,147223,147225],{"class":149,"line":312},[147,147219,147220],{"class":448},"  \"name\"",[147,147222,51710],{"class":157},[147,147224,69542],{"class":504},[147,147226,31740],{"class":157},[147,147228,147229,147232,147234],{"class":149,"line":1454},[147,147230,147231],{"class":448},"  \"value\"",[147,147233,51710],{"class":157},[147,147235,97730],{"class":448},[147,147237,147238],{"class":149,"line":1469},[147,147239,1839],{"class":157},[19,147241,147242],{},"Python 与 JSON 的转换：",[138,147244,147246],{"className":30652,"code":147245,"language":30654,"meta":143,"style":143},"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",[51,147247,147248,147255,147259,147284,147288,147307,147314,147318,147328],{"__ignoreMap":143},[147,147249,147250,147252],{"class":149,"line":150},[147,147251,30666],{"class":397},[147,147253,147254],{"class":157}," json\n",[147,147256,147257],{"class":149,"line":312},[147,147258,2674],{"emptyLinePlaceholder":324},[147,147260,147261,147263,147265,147267,147269,147271,147273,147275,147278,147280,147282],{"class":149,"line":1454},[147,147262,101930],{"class":157},[147,147264,445],{"class":397},[147,147266,4722],{"class":157},[147,147268,62952],{"class":504},[147,147270,51710],{"class":157},[147,147272,69542],{"class":504},[147,147274,12709],{"class":157},[147,147276,147277],{"class":504},"\"value\"",[147,147279,51710],{"class":157},[147,147281,710],{"class":448},[147,147283,1839],{"class":157},[147,147285,147286],{"class":149,"line":1469},[147,147287,2674],{"emptyLinePlaceholder":324},[147,147289,147290,147293,147295,147298,147301,147303,147305],{"class":149,"line":1475},[147,147291,147292],{"class":157},"json_text ",[147,147294,445],{"class":397},[147,147296,147297],{"class":157}," json.dumps(data, ",[147,147299,147300],{"class":5490},"ensure_ascii",[147,147302,445],{"class":397},[147,147304,34261],{"class":448},[147,147306,407],{"class":157},[147,147308,147309,147311],{"class":149,"line":1489},[147,147310,30689],{"class":448},[147,147312,147313],{"class":157},"(json_text)\n",[147,147315,147316],{"class":149,"line":1495},[147,147317,2674],{"emptyLinePlaceholder":324},[147,147319,147320,147323,147325],{"class":149,"line":1586},[147,147321,147322],{"class":157},"new_data ",[147,147324,445],{"class":397},[147,147326,147327],{"class":157}," json.loads(json_text)\n",[147,147329,147330,147332],{"class":149,"line":1592},[147,147331,30689],{"class":448},[147,147333,147334],{"class":157},"(new_data)\n",[14,147336,147338],{"id":147337},"_103-安装pyecharts","10.3 安装pyecharts",[138,147340,147342],{"className":24095,"code":147341,"language":24097,"meta":143,"style":143},"pip install pyecharts\n",[51,147343,147344],{"__ignoreMap":143},[147,147345,147346,147348,147350],{"class":149,"line":150},[147,147347,24104],{"class":2237},[147,147349,24107],{"class":504},[147,147351,147352],{"class":504}," pyecharts\n",[19,147354,147355],{},"验证：",[138,147357,147359],{"className":30652,"code":147358,"language":30654,"meta":143,"style":143},"import pyecharts\n\nprint(pyecharts.__version__)\n",[51,147360,147361,147367,147371],{"__ignoreMap":143},[147,147362,147363,147365],{"class":149,"line":150},[147,147364,30666],{"class":397},[147,147366,147352],{"class":157},[147,147368,147369],{"class":149,"line":312},[147,147370,2674],{"emptyLinePlaceholder":324},[147,147372,147373,147375,147378,147381],{"class":149,"line":1454},[147,147374,30689],{"class":448},[147,147376,147377],{"class":157},"(pyecharts.",[147,147379,147380],{"class":448},"__version__",[147,147382,407],{"class":157},[19,147384,147385],{},"如果使用虚拟环境，要先激活环境再安装。",[14,147387,147389],{"id":147388},"_104-第一个折线图","10.4 第一个折线图",[138,147391,147393],{"className":30652,"code":147392,"language":30654,"meta":143,"style":143},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[51,147394,147395,147407,147411,147421,147451,147483],{"__ignoreMap":143},[147,147396,147397,147399,147402,147404],{"class":149,"line":150},[147,147398,31011],{"class":397},[147,147400,147401],{"class":157}," pyecharts.charts ",[147,147403,30666],{"class":397},[147,147405,147406],{"class":157}," Line\n",[147,147408,147409],{"class":149,"line":312},[147,147410,2674],{"emptyLinePlaceholder":324},[147,147412,147413,147416,147418],{"class":149,"line":1454},[147,147414,147415],{"class":157},"line ",[147,147417,445],{"class":397},[147,147419,147420],{"class":157}," Line()\n",[147,147422,147423,147426,147429,147431,147434,147436,147439,147441,147444,147446,147449],{"class":149,"line":1469},[147,147424,147425],{"class":157},"line.add_xaxis([",[147,147427,147428],{"class":504},"\"周一\"",[147,147430,12709],{"class":157},[147,147432,147433],{"class":504},"\"周二\"",[147,147435,12709],{"class":157},[147,147437,147438],{"class":504},"\"周三\"",[147,147440,12709],{"class":157},[147,147442,147443],{"class":504},"\"周四\"",[147,147445,12709],{"class":157},[147,147447,147448],{"class":504},"\"周五\"",[147,147450,4931],{"class":157},[147,147452,147453,147456,147459,147461,147463,147465,147467,147469,147471,147473,147476,147478,147481],{"class":149,"line":1475},[147,147454,147455],{"class":157},"line.add_yaxis(",[147,147457,147458],{"class":504},"\"销售额\"",[147,147460,77790],{"class":157},[147,147462,710],{"class":448},[147,147464,12709],{"class":157},[147,147466,1216],{"class":448},[147,147468,12709],{"class":157},[147,147470,1261],{"class":448},[147,147472,12709],{"class":157},[147,147474,147475],{"class":448},"150",[147,147477,12709],{"class":157},[147,147479,147480],{"class":448},"180",[147,147482,4931],{"class":157},[147,147484,147485,147488,147491],{"class":149,"line":1489},[147,147486,147487],{"class":157},"line.render(",[147,147489,147490],{"class":504},"\"line.html\"",[147,147492,407],{"class":157},[19,147494,147495,147496,147499],{},"运行后会生成 ",[51,147497,147498],{},"line.html","，用浏览器打开即可看到图表。",[19,147501,147502],{},"核心步骤：",[350,147504,147505,147508,147511,147514,147517],{},[353,147506,147507],{},"导入图表类。",[353,147509,147510],{},"创建图表对象。",[353,147512,147513],{},"添加 x 轴数据。",[353,147515,147516],{},"添加 y 轴数据。",[353,147518,147519],{},"渲染为 HTML。",[14,147521,147523],{"id":147522},"_105-全局配置","10.5 全局配置",[19,147525,147526,147527,147530],{},"常用配置在 ",[51,147528,147529],{},"pyecharts.options"," 中。",[138,147532,147534],{"className":30652,"code":147533,"language":30654,"meta":143,"style":143},"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",[51,147535,147536,147553,147563,147567,147575,147599,147627,147632,147651,147670,147688,147708,147712],{"__ignoreMap":143},[147,147537,147538,147540,147543,147545,147548,147550],{"class":149,"line":150},[147,147539,31011],{"class":397},[147,147541,147542],{"class":157}," pyecharts ",[147,147544,30666],{"class":397},[147,147546,147547],{"class":157}," options ",[147,147549,31657],{"class":397},[147,147551,147552],{"class":157}," opts\n",[147,147554,147555,147557,147559,147561],{"class":149,"line":312},[147,147556,31011],{"class":397},[147,147558,147401],{"class":157},[147,147560,30666],{"class":397},[147,147562,147406],{"class":157},[147,147564,147565],{"class":149,"line":1454},[147,147566,2674],{"emptyLinePlaceholder":324},[147,147568,147569,147571,147573],{"class":149,"line":1469},[147,147570,147415],{"class":157},[147,147572,445],{"class":397},[147,147574,147420],{"class":157},[147,147576,147577,147579,147581,147583,147585,147587,147589,147591,147593,147595,147597],{"class":149,"line":1475},[147,147578,147425],{"class":157},[147,147580,147428],{"class":504},[147,147582,12709],{"class":157},[147,147584,147433],{"class":504},[147,147586,12709],{"class":157},[147,147588,147438],{"class":504},[147,147590,12709],{"class":157},[147,147592,147443],{"class":504},[147,147594,12709],{"class":157},[147,147596,147448],{"class":504},[147,147598,4931],{"class":157},[147,147600,147601,147603,147605,147607,147609,147611,147613,147615,147617,147619,147621,147623,147625],{"class":149,"line":1489},[147,147602,147455],{"class":157},[147,147604,147458],{"class":504},[147,147606,77790],{"class":157},[147,147608,710],{"class":448},[147,147610,12709],{"class":157},[147,147612,1216],{"class":448},[147,147614,12709],{"class":157},[147,147616,1261],{"class":448},[147,147618,12709],{"class":157},[147,147620,147475],{"class":448},[147,147622,12709],{"class":157},[147,147624,147480],{"class":448},[147,147626,4931],{"class":157},[147,147628,147629],{"class":149,"line":1495},[147,147630,147631],{"class":157},"line.set_global_opts(\n",[147,147633,147634,147637,147639,147642,147644,147646,147649],{"class":149,"line":1586},[147,147635,147636],{"class":5490},"    title_opts",[147,147638,445],{"class":397},[147,147640,147641],{"class":157},"opts.TitleOpts(",[147,147643,51680],{"class":5490},[147,147645,445],{"class":397},[147,147647,147648],{"class":504},"\"一周销售额\"",[147,147650,38321],{"class":157},[147,147652,147653,147656,147658,147661,147663,147665,147668],{"class":149,"line":1592},[147,147654,147655],{"class":5490},"    xaxis_opts",[147,147657,445],{"class":397},[147,147659,147660],{"class":157},"opts.AxisOpts(",[147,147662,80082],{"class":5490},[147,147664,445],{"class":397},[147,147666,147667],{"class":504},"\"日期\"",[147,147669,38321],{"class":157},[147,147671,147672,147675,147677,147679,147681,147683,147686],{"class":149,"line":1604},[147,147673,147674],{"class":5490},"    yaxis_opts",[147,147676,445],{"class":397},[147,147678,147660],{"class":157},[147,147680,80082],{"class":5490},[147,147682,445],{"class":397},[147,147684,147685],{"class":504},"\"金额\"",[147,147687,38321],{"class":157},[147,147689,147690,147693,147695,147698,147701,147703,147706],{"class":149,"line":1886},[147,147691,147692],{"class":5490},"    tooltip_opts",[147,147694,445],{"class":397},[147,147696,147697],{"class":157},"opts.TooltipOpts(",[147,147699,147700],{"class":5490},"trigger",[147,147702,445],{"class":397},[147,147704,147705],{"class":504},"\"axis\"",[147,147707,38321],{"class":157},[147,147709,147710],{"class":149,"line":1891},[147,147711,407],{"class":157},[147,147713,147714,147716,147718],{"class":149,"line":1897},[147,147715,147487],{"class":157},[147,147717,147490],{"class":504},[147,147719,407],{"class":157},[19,147721,147722],{},"常见全局配置：",[537,147724,147725,147734],{},[540,147726,147727],{},[543,147728,147729,147732],{},[546,147730,147731],{},"配置",[546,147733,102967],{},[583,147735,147736,147746,147756,147766,147776,147786],{},[543,147737,147738,147743],{},[588,147739,147740],{},[51,147741,147742],{},"TitleOpts",[588,147744,147745],{},"标题",[543,147747,147748,147753],{},[588,147749,147750],{},[51,147751,147752],{},"LegendOpts",[588,147754,147755],{},"图例",[543,147757,147758,147763],{},[588,147759,147760],{},[51,147761,147762],{},"TooltipOpts",[588,147764,147765],{},"提示框",[543,147767,147768,147773],{},[588,147769,147770],{},[51,147771,147772],{},"AxisOpts",[588,147774,147775],{},"坐标轴",[543,147777,147778,147783],{},[588,147779,147780],{},[51,147781,147782],{},"VisualMapOpts",[588,147784,147785],{},"视觉映射",[543,147787,147788,147793],{},[588,147789,147790],{},[51,147791,147792],{},"DataZoomOpts",[588,147794,147795],{},"区域缩放",[14,147797,147799],{"id":147798},"_106-系列配置","10.6 系列配置",[19,147801,147802],{},"系列配置作用于某一组数据。",[138,147804,147806],{"className":30652,"code":147805,"language":30654,"meta":143,"style":143},"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",[51,147807,147808,147813,147824,147853,147864,147883],{"__ignoreMap":143},[147,147809,147810],{"class":149,"line":150},[147,147811,147812],{"class":157},"line.add_yaxis(\n",[147,147814,147815,147818,147820,147822],{"class":149,"line":312},[147,147816,147817],{"class":5490},"    series_name",[147,147819,445],{"class":397},[147,147821,147458],{"class":504},[147,147823,31740],{"class":157},[147,147825,147826,147829,147831,147833,147835,147837,147839,147841,147843,147845,147847,147849,147851],{"class":149,"line":1454},[147,147827,147828],{"class":5490},"    y_axis",[147,147830,445],{"class":397},[147,147832,1289],{"class":157},[147,147834,710],{"class":448},[147,147836,12709],{"class":157},[147,147838,1216],{"class":448},[147,147840,12709],{"class":157},[147,147842,1261],{"class":448},[147,147844,12709],{"class":157},[147,147846,147475],{"class":448},[147,147848,12709],{"class":157},[147,147850,147480],{"class":448},[147,147852,88108],{"class":157},[147,147854,147855,147858,147860,147862],{"class":149,"line":1469},[147,147856,147857],{"class":5490},"    is_smooth",[147,147859,445],{"class":397},[147,147861,31750],{"class":448},[147,147863,31740],{"class":157},[147,147865,147866,147869,147871,147874,147877,147879,147881],{"class":149,"line":1475},[147,147867,147868],{"class":5490},"    label_opts",[147,147870,445],{"class":397},[147,147872,147873],{"class":157},"opts.LabelOpts(",[147,147875,147876],{"class":5490},"is_show",[147,147878,445],{"class":397},[147,147880,31750],{"class":448},[147,147882,38321],{"class":157},[147,147884,147885],{"class":149,"line":1489},[147,147886,407],{"class":157},[19,147888,147889],{},"常用参数：",[350,147891,147892,147898,147904,147910,147916],{},[353,147893,147894,147897],{},[51,147895,147896],{},"series_name","：系列名称。",[353,147899,147900,147903],{},[51,147901,147902],{},"y_axis","：y 轴数据。",[353,147905,147906,147909],{},[51,147907,147908],{},"is_smooth","：是否平滑曲线。",[353,147911,147912,147915],{},[51,147913,147914],{},"label_opts","：标签配置。",[353,147917,147918,147921],{},[51,147919,147920],{},"symbol_size","：标记点大小。",[14,147923,147925],{"id":147924},"_107-多条折线","10.7 多条折线",[138,147927,147929],{"className":30652,"code":147928,"language":30654,"meta":143,"style":143},"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",[51,147930,147931,147945,147955,147959,147988,147992,148000,148005,148043,148080,148084,148101,148117,148121],{"__ignoreMap":143},[147,147932,147933,147935,147937,147939,147941,147943],{"class":149,"line":150},[147,147934,31011],{"class":397},[147,147936,147542],{"class":157},[147,147938,30666],{"class":397},[147,147940,147547],{"class":157},[147,147942,31657],{"class":397},[147,147944,147552],{"class":157},[147,147946,147947,147949,147951,147953],{"class":149,"line":312},[147,147948,31011],{"class":397},[147,147950,147401],{"class":157},[147,147952,30666],{"class":397},[147,147954,147406],{"class":157},[147,147956,147957],{"class":149,"line":1454},[147,147958,2674],{"emptyLinePlaceholder":324},[147,147960,147961,147964,147966,147968,147970,147972,147974,147976,147978,147980,147982,147984,147986],{"class":149,"line":1469},[147,147962,147963],{"class":157},"dates ",[147,147965,445],{"class":397},[147,147967,52499],{"class":157},[147,147969,147428],{"class":504},[147,147971,12709],{"class":157},[147,147973,147433],{"class":504},[147,147975,12709],{"class":157},[147,147977,147438],{"class":504},[147,147979,12709],{"class":157},[147,147981,147443],{"class":504},[147,147983,12709],{"class":157},[147,147985,147448],{"class":504},[147,147987,33520],{"class":157},[147,147989,147990],{"class":149,"line":1475},[147,147991,2674],{"emptyLinePlaceholder":324},[147,147993,147994,147996,147998],{"class":149,"line":1489},[147,147995,147415],{"class":157},[147,147997,445],{"class":397},[147,147999,147420],{"class":157},[147,148001,148002],{"class":149,"line":1495},[147,148003,148004],{"class":157},"line.add_xaxis(dates)\n",[147,148006,148007,148009,148012,148014,148016,148018,148021,148023,148025,148027,148029,148031,148033,148035,148037,148039,148041],{"class":149,"line":1586},[147,148008,147455],{"class":157},[147,148010,148011],{"class":504},"\"线上销售\"",[147,148013,77790],{"class":157},[147,148015,710],{"class":448},[147,148017,12709],{"class":157},[147,148019,148020],{"class":448},"130",[147,148022,12709],{"class":157},[147,148024,1216],{"class":448},[147,148026,12709],{"class":157},[147,148028,21321],{"class":448},[147,148030,12709],{"class":157},[147,148032,1996],{"class":448},[147,148034,112472],{"class":157},[147,148036,147908],{"class":5490},[147,148038,445],{"class":397},[147,148040,31750],{"class":448},[147,148042,407],{"class":157},[147,148044,148045,148047,148050,148052,148054,148056,148058,148060,148062,148064,148066,148068,148070,148072,148074,148076,148078],{"class":149,"line":1592},[147,148046,147455],{"class":157},[147,148048,148049],{"class":504},"\"线下销售\"",[147,148051,77790],{"class":157},[147,148053,1011],{"class":448},[147,148055,12709],{"class":157},[147,148057,1261],{"class":448},[147,148059,12709],{"class":157},[147,148061,710],{"class":448},[147,148063,12709],{"class":157},[147,148065,1216],{"class":448},[147,148067,12709],{"class":157},[147,148069,147475],{"class":448},[147,148071,112472],{"class":157},[147,148073,147908],{"class":5490},[147,148075,445],{"class":397},[147,148077,31750],{"class":448},[147,148079,407],{"class":157},[147,148081,148082],{"class":149,"line":1604},[147,148083,147631],{"class":157},[147,148085,148086,148088,148090,148092,148094,148096,148099],{"class":149,"line":1886},[147,148087,147636],{"class":5490},[147,148089,445],{"class":397},[147,148091,147641],{"class":157},[147,148093,51680],{"class":5490},[147,148095,445],{"class":397},[147,148097,148098],{"class":504},"\"线上线下销售趋势\"",[147,148100,38321],{"class":157},[147,148102,148103,148105,148107,148109,148111,148113,148115],{"class":149,"line":1891},[147,148104,147692],{"class":5490},[147,148106,445],{"class":397},[147,148108,147697],{"class":157},[147,148110,147700],{"class":5490},[147,148112,445],{"class":397},[147,148114,147705],{"class":504},[147,148116,38321],{"class":157},[147,148118,148119],{"class":149,"line":1897},[147,148120,407],{"class":157},[147,148122,148123,148125,148128],{"class":149,"line":1902},[147,148124,147487],{"class":157},[147,148126,148127],{"class":504},"\"sales.html\"",[147,148129,407],{"class":157},[19,148131,148132],{},"多条折线适合比较不同指标或不同地区。",[14,148134,148136],{"id":148135},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,148138,148139,148140,24892],{},"假设 ",[51,148141,148142],{},"sales.json",[138,148144,148146],{"className":147208,"code":148145,"language":145955,"meta":143,"style":143},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[51,148147,148148,148153,148185,148213,148241],{"__ignoreMap":143},[147,148149,148150],{"class":149,"line":150},[147,148151,148152],{"class":157},"[\n",[147,148154,148155,148158,148161,148163,148165,148167,148170,148172,148174,148176,148179,148181,148183],{"class":149,"line":312},[147,148156,148157],{"class":157},"  {",[147,148159,148160],{"class":448},"\"date\"",[147,148162,51710],{"class":157},[147,148164,147428],{"class":504},[147,148166,12709],{"class":157},[147,148168,148169],{"class":448},"\"online\"",[147,148171,51710],{"class":157},[147,148173,710],{"class":448},[147,148175,12709],{"class":157},[147,148177,148178],{"class":448},"\"offline\"",[147,148180,51710],{"class":157},[147,148182,1011],{"class":448},[147,148184,5204],{"class":157},[147,148186,148187,148189,148191,148193,148195,148197,148199,148201,148203,148205,148207,148209,148211],{"class":149,"line":1454},[147,148188,148157],{"class":157},[147,148190,148160],{"class":448},[147,148192,51710],{"class":157},[147,148194,147433],{"class":504},[147,148196,12709],{"class":157},[147,148198,148169],{"class":448},[147,148200,51710],{"class":157},[147,148202,148020],{"class":448},[147,148204,12709],{"class":157},[147,148206,148178],{"class":448},[147,148208,51710],{"class":157},[147,148210,1261],{"class":448},[147,148212,5204],{"class":157},[147,148214,148215,148217,148219,148221,148223,148225,148227,148229,148231,148233,148235,148237,148239],{"class":149,"line":1469},[147,148216,148157],{"class":157},[147,148218,148160],{"class":448},[147,148220,51710],{"class":157},[147,148222,147438],{"class":504},[147,148224,12709],{"class":157},[147,148226,148169],{"class":448},[147,148228,51710],{"class":157},[147,148230,1216],{"class":448},[147,148232,12709],{"class":157},[147,148234,148178],{"class":448},[147,148236,51710],{"class":157},[147,148238,710],{"class":448},[147,148240,1839],{"class":157},[147,148242,148243],{"class":149,"line":1475},[147,148244,33520],{"class":157},[19,148246,148247],{},"读取并绘图：",[138,148249,148251],{"className":30652,"code":148250,"language":30654,"meta":143,"style":143},"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",[51,148252,148253,148259,148273,148283,148287,148319,148332,148336,148344,148353,148362,148366,148378,148387,148396,148405,148409,148417,148421,148438,148455,148459,148476,148492,148496],{"__ignoreMap":143},[147,148254,148255,148257],{"class":149,"line":150},[147,148256,30666],{"class":397},[147,148258,147254],{"class":157},[147,148260,148261,148263,148265,148267,148269,148271],{"class":149,"line":312},[147,148262,31011],{"class":397},[147,148264,147542],{"class":157},[147,148266,30666],{"class":397},[147,148268,147547],{"class":157},[147,148270,31657],{"class":397},[147,148272,147552],{"class":157},[147,148274,148275,148277,148279,148281],{"class":149,"line":1454},[147,148276,31011],{"class":397},[147,148278,147401],{"class":157},[147,148280,30666],{"class":397},[147,148282,147406],{"class":157},[147,148284,148285],{"class":149,"line":1469},[147,148286,2674],{"emptyLinePlaceholder":324},[147,148288,148289,148291,148293,148295,148298,148300,148302,148304,148306,148308,148310,148312,148314,148317],{"class":149,"line":1475},[147,148290,108103],{"class":397},[147,148292,146954],{"class":448},[147,148294,401],{"class":157},[147,148296,148297],{"class":504},"\"sales.json\"",[147,148299,12709],{"class":157},[147,148301,146964],{"class":504},[147,148303,12709],{"class":157},[147,148305,146969],{"class":5490},[147,148307,445],{"class":397},[147,148309,146974],{"class":504},[147,148311,13988],{"class":157},[147,148313,31657],{"class":397},[147,148315,148316],{"class":5490}," file",[147,148318,4013],{"class":157},[147,148320,148321,148323,148325,148328,148330],{"class":149,"line":1489},[147,148322,101693],{"class":157},[147,148324,445],{"class":397},[147,148326,148327],{"class":157}," json.load(",[147,148329,45628],{"class":5490},[147,148331,407],{"class":157},[147,148333,148334],{"class":149,"line":1495},[147,148335,2674],{"emptyLinePlaceholder":324},[147,148337,148338,148340,148342],{"class":149,"line":1586},[147,148339,147963],{"class":157},[147,148341,445],{"class":397},[147,148343,52111],{"class":157},[147,148345,148346,148349,148351],{"class":149,"line":1592},[147,148347,148348],{"class":157},"online_sales ",[147,148350,445],{"class":397},[147,148352,52111],{"class":157},[147,148354,148355,148358,148360],{"class":149,"line":1604},[147,148356,148357],{"class":157},"offline_sales ",[147,148359,445],{"class":397},[147,148361,52111],{"class":157},[147,148363,148364],{"class":149,"line":1886},[147,148365,2674],{"emptyLinePlaceholder":324},[147,148367,148368,148370,148373,148375],{"class":149,"line":1891},[147,148369,3299],{"class":397},[147,148371,148372],{"class":157}," item ",[147,148374,26317],{"class":397},[147,148376,148377],{"class":157}," data:\n",[147,148379,148380,148383,148385],{"class":149,"line":1897},[147,148381,148382],{"class":157},"    dates.append(item[",[147,148384,148160],{"class":504},[147,148386,4931],{"class":157},[147,148388,148389,148392,148394],{"class":149,"line":1902},[147,148390,148391],{"class":157},"    online_sales.append(item[",[147,148393,148169],{"class":504},[147,148395,4931],{"class":157},[147,148397,148398,148401,148403],{"class":149,"line":1916},[147,148399,148400],{"class":157},"    offline_sales.append(item[",[147,148402,148178],{"class":504},[147,148404,4931],{"class":157},[147,148406,148407],{"class":149,"line":1921},[147,148408,2674],{"emptyLinePlaceholder":324},[147,148410,148411,148413,148415],{"class":149,"line":1927},[147,148412,147415],{"class":157},[147,148414,445],{"class":397},[147,148416,147420],{"class":157},[147,148418,148419],{"class":149,"line":1948},[147,148420,148004],{"class":157},[147,148422,148423,148425,148427,148430,148432,148434,148436],{"class":149,"line":1953},[147,148424,147455],{"class":157},[147,148426,148011],{"class":504},[147,148428,148429],{"class":157},", online_sales, ",[147,148431,147908],{"class":5490},[147,148433,445],{"class":397},[147,148435,31750],{"class":448},[147,148437,407],{"class":157},[147,148439,148440,148442,148444,148447,148449,148451,148453],{"class":149,"line":1967},[147,148441,147455],{"class":157},[147,148443,148049],{"class":504},[147,148445,148446],{"class":157},", offline_sales, ",[147,148448,147908],{"class":5490},[147,148450,445],{"class":397},[147,148452,31750],{"class":448},[147,148454,407],{"class":157},[147,148456,148457],{"class":149,"line":1972},[147,148458,147631],{"class":157},[147,148460,148461,148463,148465,148467,148469,148471,148474],{"class":149,"line":2001},[147,148462,147636],{"class":5490},[147,148464,445],{"class":397},[147,148466,147641],{"class":157},[147,148468,51680],{"class":5490},[147,148470,445],{"class":397},[147,148472,148473],{"class":504},"\"销售趋势\"",[147,148475,38321],{"class":157},[147,148477,148478,148480,148482,148484,148486,148488,148490],{"class":149,"line":2006},[147,148479,147692],{"class":5490},[147,148481,445],{"class":397},[147,148483,147697],{"class":157},[147,148485,147700],{"class":5490},[147,148487,445],{"class":397},[147,148489,147705],{"class":504},[147,148491,38321],{"class":157},[147,148493,148494],{"class":149,"line":2023},[147,148495,407],{"class":157},[147,148497,148498,148500,148502],{"class":149,"line":2028},[147,148499,147487],{"class":157},[147,148501,148127],{"class":504},[147,148503,407],{"class":157},[14,148505,148507],{"id":148506},"_109-数据清洗","10.9 数据清洗",[19,148509,148510],{},"真实数据经常不整齐，需要清洗。",[19,148512,148513],{},"常见问题：",[350,148515,148516,148519,148522,148525],{},[353,148517,148518],{},"数字是字符串。",[353,148520,148521],{},"字段缺失。",[353,148523,148524],{},"空值。",[353,148526,148527],{},"日期格式不统一。",[19,148529,15408],{},[138,148531,148533],{"className":30652,"code":148532,"language":30654,"meta":143,"style":143},"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",[51,148534,148535,148544,148567,148587,148608,148612,148616,148624,148633,148637,148648,148662,148671,148676,148680,148688,148698,148702,148709],{"__ignoreMap":143},[147,148536,148537,148540,148542],{"class":149,"line":150},[147,148538,148539],{"class":157},"raw_data ",[147,148541,445],{"class":397},[147,148543,55720],{"class":157},[147,148545,148546,148549,148551,148553,148555,148557,148560,148562,148565],{"class":149,"line":312},[147,148547,148548],{"class":157},"    {",[147,148550,148160],{"class":504},[147,148552,51710],{"class":157},[147,148554,147428],{"class":504},[147,148556,12709],{"class":157},[147,148558,148559],{"class":504},"\"sales\"",[147,148561,51710],{"class":157},[147,148563,148564],{"class":504},"\"100\"",[147,148566,5204],{"class":157},[147,148568,148569,148571,148573,148575,148577,148579,148581,148583,148585],{"class":149,"line":1454},[147,148570,148548],{"class":157},[147,148572,148160],{"class":504},[147,148574,51710],{"class":157},[147,148576,147433],{"class":504},[147,148578,12709],{"class":157},[147,148580,148559],{"class":504},[147,148582,51710],{"class":157},[147,148584,7926],{"class":504},[147,148586,5204],{"class":157},[147,148588,148589,148591,148593,148595,148597,148599,148601,148603,148606],{"class":149,"line":1469},[147,148590,148548],{"class":157},[147,148592,148160],{"class":504},[147,148594,51710],{"class":157},[147,148596,147438],{"class":504},[147,148598,12709],{"class":157},[147,148600,148559],{"class":504},[147,148602,51710],{"class":157},[147,148604,148605],{"class":504},"\"120\"",[147,148607,5204],{"class":157},[147,148609,148610],{"class":149,"line":1475},[147,148611,33520],{"class":157},[147,148613,148614],{"class":149,"line":1489},[147,148615,2674],{"emptyLinePlaceholder":324},[147,148617,148618,148620,148622],{"class":149,"line":1495},[147,148619,147963],{"class":157},[147,148621,445],{"class":397},[147,148623,52111],{"class":157},[147,148625,148626,148629,148631],{"class":149,"line":1586},[147,148627,148628],{"class":157},"sales ",[147,148630,445],{"class":397},[147,148632,52111],{"class":157},[147,148634,148635],{"class":149,"line":1592},[147,148636,2674],{"emptyLinePlaceholder":324},[147,148638,148639,148641,148643,148645],{"class":149,"line":1604},[147,148640,3299],{"class":397},[147,148642,148372],{"class":157},[147,148644,26317],{"class":397},[147,148646,148647],{"class":157}," raw_data:\n",[147,148649,148650,148653,148655,148658,148660],{"class":149,"line":1886},[147,148651,148652],{"class":157},"    value ",[147,148654,445],{"class":397},[147,148656,148657],{"class":157}," item.get(",[147,148659,148559],{"class":504},[147,148661,407],{"class":157},[147,148663,148664,148666,148668],{"class":149,"line":1891},[147,148665,3375],{"class":397},[147,148667,39204],{"class":397},[147,148669,148670],{"class":157}," value:\n",[147,148672,148673],{"class":149,"line":1897},[147,148674,148675],{"class":397},"        continue\n",[147,148677,148678],{"class":149,"line":1902},[147,148679,2674],{"emptyLinePlaceholder":324},[147,148681,148682,148684,148686],{"class":149,"line":1916},[147,148683,148382],{"class":157},[147,148685,148160],{"class":504},[147,148687,4931],{"class":157},[147,148689,148690,148693,148695],{"class":149,"line":1921},[147,148691,148692],{"class":157},"    sales.append(",[147,148694,404],{"class":448},[147,148696,148697],{"class":157},"(value))\n",[147,148699,148700],{"class":149,"line":1927},[147,148701,2674],{"emptyLinePlaceholder":324},[147,148703,148704,148706],{"class":149,"line":1948},[147,148705,30689],{"class":448},[147,148707,148708],{"class":157},"(dates)\n",[147,148710,148711,148713],{"class":149,"line":1953},[147,148712,30689],{"class":448},[147,148714,148715],{"class":157},"(sales)\n",[14,148717,148719],{"id":148718},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[138,148721,148723],{"className":30652,"code":148722,"language":30654,"meta":143,"style":143},"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",[51,148724,148725,148739,148749,148753,148761,148782,148804,148826,148848,148870,148874,148878,148900,148921,148925,148933,148937,148941,148951,148960,148970,148986,148990,148994,149011,149027,149043,149059,149069,149073],{"__ignoreMap":143},[147,148726,148727,148729,148731,148733,148735,148737],{"class":149,"line":150},[147,148728,31011],{"class":397},[147,148730,147542],{"class":157},[147,148732,30666],{"class":397},[147,148734,147547],{"class":157},[147,148736,31657],{"class":397},[147,148738,147552],{"class":157},[147,148740,148741,148743,148745,148747],{"class":149,"line":312},[147,148742,31011],{"class":397},[147,148744,147401],{"class":157},[147,148746,30666],{"class":397},[147,148748,147406],{"class":157},[147,148750,148751],{"class":149,"line":1454},[147,148752,2674],{"emptyLinePlaceholder":324},[147,148754,148755,148757,148759],{"class":149,"line":1469},[147,148756,148628],{"class":157},[147,148758,445],{"class":397},[147,148760,55720],{"class":157},[147,148762,148763,148765,148767,148769,148772,148774,148776,148778,148780],{"class":149,"line":1475},[147,148764,148548],{"class":157},[147,148766,148160],{"class":504},[147,148768,51710],{"class":157},[147,148770,148771],{"class":504},"\"2024-10-01\"",[147,148773,12709],{"class":157},[147,148775,84356],{"class":504},[147,148777,51710],{"class":157},[147,148779,92295],{"class":448},[147,148781,5204],{"class":157},[147,148783,148784,148786,148788,148790,148793,148795,148797,148799,148802],{"class":149,"line":1489},[147,148785,148548],{"class":157},[147,148787,148160],{"class":504},[147,148789,51710],{"class":157},[147,148791,148792],{"class":504},"\"2024-10-02\"",[147,148794,12709],{"class":157},[147,148796,84356],{"class":504},[147,148798,51710],{"class":157},[147,148800,148801],{"class":448},"1800",[147,148803,5204],{"class":157},[147,148805,148806,148808,148810,148812,148815,148817,148819,148821,148824],{"class":149,"line":1495},[147,148807,148548],{"class":157},[147,148809,148160],{"class":504},[147,148811,51710],{"class":157},[147,148813,148814],{"class":504},"\"2024-10-03\"",[147,148816,12709],{"class":157},[147,148818,84356],{"class":504},[147,148820,51710],{"class":157},[147,148822,148823],{"class":448},"1500",[147,148825,5204],{"class":157},[147,148827,148828,148830,148832,148834,148837,148839,148841,148843,148846],{"class":149,"line":1586},[147,148829,148548],{"class":157},[147,148831,148160],{"class":504},[147,148833,51710],{"class":157},[147,148835,148836],{"class":504},"\"2024-10-04\"",[147,148838,12709],{"class":157},[147,148840,84356],{"class":504},[147,148842,51710],{"class":157},[147,148844,148845],{"class":448},"2100",[147,148847,5204],{"class":157},[147,148849,148850,148852,148854,148856,148859,148861,148863,148865,148868],{"class":149,"line":1592},[147,148851,148548],{"class":157},[147,148853,148160],{"class":504},[147,148855,51710],{"class":157},[147,148857,148858],{"class":504},"\"2024-10-05\"",[147,148860,12709],{"class":157},[147,148862,84356],{"class":504},[147,148864,51710],{"class":157},[147,148866,148867],{"class":448},"2600",[147,148869,5204],{"class":157},[147,148871,148872],{"class":149,"line":1604},[147,148873,33520],{"class":157},[147,148875,148876],{"class":149,"line":1886},[147,148877,2674],{"emptyLinePlaceholder":324},[147,148879,148880,148882,148884,148887,148889,148891,148893,148895,148897],{"class":149,"line":1891},[147,148881,147963],{"class":157},[147,148883,445],{"class":397},[147,148885,148886],{"class":157}," [item[",[147,148888,148160],{"class":504},[147,148890,4717],{"class":157},[147,148892,3299],{"class":397},[147,148894,148372],{"class":157},[147,148896,26317],{"class":397},[147,148898,148899],{"class":157}," sales]\n",[147,148901,148902,148905,148907,148909,148911,148913,148915,148917,148919],{"class":149,"line":1897},[147,148903,148904],{"class":157},"amounts ",[147,148906,445],{"class":397},[147,148908,148886],{"class":157},[147,148910,84356],{"class":504},[147,148912,4717],{"class":157},[147,148914,3299],{"class":397},[147,148916,148372],{"class":157},[147,148918,26317],{"class":397},[147,148920,148899],{"class":157},[147,148922,148923],{"class":149,"line":1902},[147,148924,2674],{"emptyLinePlaceholder":324},[147,148926,148927,148929,148931],{"class":149,"line":1916},[147,148928,147415],{"class":157},[147,148930,445],{"class":397},[147,148932,147420],{"class":157},[147,148934,148935],{"class":149,"line":1921},[147,148936,148004],{"class":157},[147,148938,148939],{"class":149,"line":1927},[147,148940,147812],{"class":157},[147,148942,148943,148945,148947,148949],{"class":149,"line":1948},[147,148944,147817],{"class":5490},[147,148946,445],{"class":397},[147,148948,147458],{"class":504},[147,148950,31740],{"class":157},[147,148952,148953,148955,148957],{"class":149,"line":1953},[147,148954,147828],{"class":5490},[147,148956,445],{"class":397},[147,148958,148959],{"class":157},"amounts,\n",[147,148961,148962,148964,148966,148968],{"class":149,"line":1967},[147,148963,147857],{"class":5490},[147,148965,445],{"class":397},[147,148967,31750],{"class":448},[147,148969,31740],{"class":157},[147,148971,148972,148974,148976,148978,148980,148982,148984],{"class":149,"line":1972},[147,148973,147868],{"class":5490},[147,148975,445],{"class":397},[147,148977,147873],{"class":157},[147,148979,147876],{"class":5490},[147,148981,445],{"class":397},[147,148983,31750],{"class":448},[147,148985,38321],{"class":157},[147,148987,148988],{"class":149,"line":2001},[147,148989,407],{"class":157},[147,148991,148992],{"class":149,"line":2006},[147,148993,147631],{"class":157},[147,148995,148996,148998,149000,149002,149004,149006,149009],{"class":149,"line":2023},[147,148997,147636],{"class":5490},[147,148999,445],{"class":397},[147,149001,147641],{"class":157},[147,149003,51680],{"class":5490},[147,149005,445],{"class":397},[147,149007,149008],{"class":504},"\"每日销售额\"",[147,149010,38321],{"class":157},[147,149012,149013,149015,149017,149019,149021,149023,149025],{"class":149,"line":2028},[147,149014,147655],{"class":5490},[147,149016,445],{"class":397},[147,149018,147660],{"class":157},[147,149020,80082],{"class":5490},[147,149022,445],{"class":397},[147,149024,147667],{"class":504},[147,149026,38321],{"class":157},[147,149028,149029,149031,149033,149035,149037,149039,149041],{"class":149,"line":2033},[147,149030,147674],{"class":5490},[147,149032,445],{"class":397},[147,149034,147660],{"class":157},[147,149036,80082],{"class":5490},[147,149038,445],{"class":397},[147,149040,147685],{"class":504},[147,149042,38321],{"class":157},[147,149044,149045,149047,149049,149051,149053,149055,149057],{"class":149,"line":2038},[147,149046,147692],{"class":5490},[147,149048,445],{"class":397},[147,149050,147697],{"class":157},[147,149052,147700],{"class":5490},[147,149054,445],{"class":397},[147,149056,147705],{"class":504},[147,149058,38321],{"class":157},[147,149060,149061,149064,149066],{"class":149,"line":2052},[147,149062,149063],{"class":5490},"    datazoom_opts",[147,149065,445],{"class":397},[147,149067,149068],{"class":157},"[opts.DataZoomOpts()],\n",[147,149070,149071],{"class":149,"line":2057},[147,149072,407],{"class":157},[147,149074,149075,149077,149080],{"class":149,"line":2851},[147,149076,147487],{"class":157},[147,149078,149079],{"class":504},"\"daily_sales.html\"",[147,149081,407],{"class":157},[19,149083,149084,149087],{},[51,149085,149086],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,149089,149091],{"id":149090},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,149093,149094],{},"如果数据结构如下：",[138,149096,149098],{"className":30652,"code":149097,"language":30654,"meta":143,"style":143},"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",[51,149099,149100,149108,149116,149138,149159,149164,149171,149191,149211,149215],{"__ignoreMap":143},[147,149101,149102,149104,149106],{"class":149,"line":150},[147,149103,101930],{"class":157},[147,149105,445],{"class":397},[147,149107,15845],{"class":157},[147,149109,149110,149113],{"class":149,"line":312},[147,149111,149112],{"class":504},"    \"北京\"",[147,149114,149115],{"class":157},": [\n",[147,149117,149118,149120,149122,149124,149127,149129,149132,149134,149136],{"class":149,"line":1454},[147,149119,5191],{"class":157},[147,149121,148160],{"class":504},[147,149123,51710],{"class":157},[147,149125,149126],{"class":504},"\"2024-01-01\"",[147,149128,12709],{"class":157},[147,149130,149131],{"class":504},"\"confirm\"",[147,149133,51710],{"class":157},[147,149135,845],{"class":448},[147,149137,5204],{"class":157},[147,149139,149140,149142,149144,149146,149149,149151,149153,149155,149157],{"class":149,"line":1469},[147,149141,5191],{"class":157},[147,149143,148160],{"class":504},[147,149145,51710],{"class":157},[147,149147,149148],{"class":504},"\"2024-01-02\"",[147,149150,12709],{"class":157},[147,149152,149131],{"class":504},[147,149154,51710],{"class":157},[147,149156,897],{"class":448},[147,149158,5204],{"class":157},[147,149160,149161],{"class":149,"line":1475},[147,149162,149163],{"class":157},"    ],\n",[147,149165,149166,149169],{"class":149,"line":1489},[147,149167,149168],{"class":504},"    \"上海\"",[147,149170,149115],{"class":157},[147,149172,149173,149175,149177,149179,149181,149183,149185,149187,149189],{"class":149,"line":1495},[147,149174,5191],{"class":157},[147,149176,148160],{"class":504},[147,149178,51710],{"class":157},[147,149180,149126],{"class":504},[147,149182,12709],{"class":157},[147,149184,149131],{"class":504},[147,149186,51710],{"class":157},[147,149188,794],{"class":448},[147,149190,5204],{"class":157},[147,149192,149193,149195,149197,149199,149201,149203,149205,149207,149209],{"class":149,"line":1586},[147,149194,5191],{"class":157},[147,149196,148160],{"class":504},[147,149198,51710],{"class":157},[147,149200,149148],{"class":504},[147,149202,12709],{"class":157},[147,149204,149131],{"class":504},[147,149206,51710],{"class":157},[147,149208,922],{"class":448},[147,149210,5204],{"class":157},[147,149212,149213],{"class":149,"line":1592},[147,149214,149163],{"class":157},[147,149216,149217],{"class":149,"line":1604},[147,149218,1839],{"class":157},[19,149220,149221],{},"绘制多地区趋势：",[138,149223,149225],{"className":30652,"code":149224,"language":30654,"meta":143,"style":143},"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",[51,149226,149227,149241,149251,149255,149280,149284,149292,149296,149300,149312,149334,149347,149351,149355,149372,149388,149392],{"__ignoreMap":143},[147,149228,149229,149231,149233,149235,149237,149239],{"class":149,"line":150},[147,149230,31011],{"class":397},[147,149232,147542],{"class":157},[147,149234,30666],{"class":397},[147,149236,147547],{"class":157},[147,149238,31657],{"class":397},[147,149240,147552],{"class":157},[147,149242,149243,149245,149247,149249],{"class":149,"line":312},[147,149244,31011],{"class":397},[147,149246,147401],{"class":157},[147,149248,30666],{"class":397},[147,149250,147406],{"class":157},[147,149252,149253],{"class":149,"line":1454},[147,149254,2674],{"emptyLinePlaceholder":324},[147,149256,149257,149259,149261,149263,149265,149267,149269,149271,149273,149276,149278],{"class":149,"line":1469},[147,149258,147963],{"class":157},[147,149260,445],{"class":397},[147,149262,148886],{"class":157},[147,149264,148160],{"class":504},[147,149266,4717],{"class":157},[147,149268,3299],{"class":397},[147,149270,148372],{"class":157},[147,149272,26317],{"class":397},[147,149274,149275],{"class":157}," data[",[147,149277,69542],{"class":504},[147,149279,77799],{"class":157},[147,149281,149282],{"class":149,"line":1475},[147,149283,2674],{"emptyLinePlaceholder":324},[147,149285,149286,149288,149290],{"class":149,"line":1489},[147,149287,147415],{"class":157},[147,149289,445],{"class":397},[147,149291,147420],{"class":157},[147,149293,149294],{"class":149,"line":1495},[147,149295,148004],{"class":157},[147,149297,149298],{"class":149,"line":1586},[147,149299,2674],{"emptyLinePlaceholder":324},[147,149301,149302,149304,149307,149309],{"class":149,"line":1592},[147,149303,3299],{"class":397},[147,149305,149306],{"class":157}," city, records ",[147,149308,26317],{"class":397},[147,149310,149311],{"class":157}," data.items():\n",[147,149313,149314,149317,149319,149321,149323,149325,149327,149329,149331],{"class":149,"line":1604},[147,149315,149316],{"class":157},"    values ",[147,149318,445],{"class":397},[147,149320,148886],{"class":157},[147,149322,149131],{"class":504},[147,149324,4717],{"class":157},[147,149326,3299],{"class":397},[147,149328,148372],{"class":157},[147,149330,26317],{"class":397},[147,149332,149333],{"class":157}," records]\n",[147,149335,149336,149339,149341,149343,149345],{"class":149,"line":1886},[147,149337,149338],{"class":157},"    line.add_yaxis(city, values, ",[147,149340,147908],{"class":5490},[147,149342,445],{"class":397},[147,149344,31750],{"class":448},[147,149346,407],{"class":157},[147,149348,149349],{"class":149,"line":1891},[147,149350,2674],{"emptyLinePlaceholder":324},[147,149352,149353],{"class":149,"line":1897},[147,149354,147631],{"class":157},[147,149356,149357,149359,149361,149363,149365,149367,149370],{"class":149,"line":1902},[147,149358,147636],{"class":5490},[147,149360,445],{"class":397},[147,149362,147641],{"class":157},[147,149364,51680],{"class":5490},[147,149366,445],{"class":397},[147,149368,149369],{"class":504},"\"多地区趋势图\"",[147,149371,38321],{"class":157},[147,149373,149374,149376,149378,149380,149382,149384,149386],{"class":149,"line":1916},[147,149375,147692],{"class":5490},[147,149377,445],{"class":397},[147,149379,147697],{"class":157},[147,149381,147700],{"class":5490},[147,149383,445],{"class":397},[147,149385,147705],{"class":504},[147,149387,38321],{"class":157},[147,149389,149390],{"class":149,"line":1921},[147,149391,407],{"class":157},[147,149393,149394,149396,149399],{"class":149,"line":1927},[147,149395,147487],{"class":157},[147,149397,149398],{"class":504},"\"trend.html\"",[147,149400,407],{"class":157},[19,149402,149403],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,149405,149407],{"id":149406},"_1012-易错点","10.12 易错点",[350,149409,149410,149416,149422,149432,149438],{},[353,149411,149412,149415],{},[51,149413,149414],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[353,149417,149418,149421],{},[51,149419,149420],{},"render()"," 生成的是 HTML，不是图片。",[353,149423,149424,149425,149428,149429,28659],{},"JSON 字符串用 ",[51,149426,149427],{},"json.loads()","，JSON 文件用 ",[51,149430,149431],{},"json.load()",[353,149433,149434,149435,28659],{},"中文 JSON 保存时加 ",[51,149436,149437],{},"ensure_ascii=False",[353,149439,149440],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,149442,149444],{"id":149443},"_1013-本章练习","10.13 本章练习",[350,149446,149447,149450,149453,149456,149459],{},[353,149448,149449],{},"安装 pyecharts 并生成第一个折线图。",[353,149451,149452],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[353,149454,149455],{},"绘制两条折线，对比线上和线下销售额。",[353,149457,149458],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[353,149460,149461],{},"对含有空值的销售数据进行清洗后再绘图。",[308,149463,149464],{},"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":143,"searchDepth":312,"depth":312,"links":149466},[149467,149468,149469,149470,149471,149472,149473,149474,149475,149476,149477,149478,149479],{"id":147083,"depth":312,"text":147084},{"id":147158,"depth":312,"text":147159},{"id":147337,"depth":312,"text":147338},{"id":147388,"depth":312,"text":147389},{"id":147522,"depth":312,"text":147523},{"id":147798,"depth":312,"text":147799},{"id":147924,"depth":312,"text":147925},{"id":148135,"depth":312,"text":148136},{"id":148506,"depth":312,"text":148507},{"id":148718,"depth":312,"text":148719},{"id":149090,"depth":312,"text":149091},{"id":149406,"depth":312,"text":149407},{"id":149443,"depth":312,"text":149444},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":147075,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149486,"title":149487,"body":149488,"description":321,"extension":322,"meta":151848,"navigation":324,"path":151849,"seo":151850,"stem":151851,"__hash__":151852},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149489,"toc":151825},[149490,149493,149497,149500,149503,149579,149582,149673,149676,149680,149683,149727,149740,149744,149747,149814,149817,149821,149824,149908,149916,149920,149925,150066,150069,150080,150086,150092,150206,150210,150213,150216,150469,150472,150476,150479,150583,150586,150590,150741,150745,150752,150865,150869,150872,150978,150981,150985,150988,151019,151022,151127,151130,151134,151138,151148,151216,151220,151227,151291,151294,151298,151304,151400,151409,151413,151737,151746,151750,151778,151782,151822],[10,149491,149487],{"id":149492},"_11-面向对象基础",[14,149494,149496],{"id":149495},"_111-什么是面向对象","11.1 什么是面向对象",[19,149498,149499],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,149501,149502],{},"面向过程：",[138,149504,149506],{"className":30652,"code":149505,"language":30654,"meta":143,"style":143},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[51,149507,149508,149517,149525,149529,149539,149570,149574],{"__ignoreMap":143},[147,149509,149510,149512,149514],{"class":149,"line":150},[147,149511,146699],{"class":157},[147,149513,445],{"class":397},[147,149515,149516],{"class":504}," \"小明\"\n",[147,149518,149519,149521,149523],{"class":149,"line":312},[147,149520,146709],{"class":157},[147,149522,445],{"class":397},[147,149524,146714],{"class":448},[147,149526,149527],{"class":149,"line":1454},[147,149528,2674],{"emptyLinePlaceholder":324},[147,149530,149531,149533,149536],{"class":149,"line":1469},[147,149532,32221],{"class":397},[147,149534,149535],{"class":2237}," introduce",[147,149537,149538],{"class":157},"(name, age):\n",[147,149540,149541,149543,149545,149547,149550,149552,149554,149556,149559,149561,149563,149565,149568],{"class":149,"line":1475},[147,149542,31573],{"class":448},[147,149544,401],{"class":157},[147,149546,452],{"class":397},[147,149548,149549],{"class":504},"\"我叫",[147,149551,1295],{"class":448},[147,149553,80082],{"class":157},[147,149555,1345],{"class":448},[147,149557,149558],{"class":504},"，今年",[147,149560,1295],{"class":448},[147,149562,70494],{"class":157},[147,149564,1345],{"class":448},[147,149566,149567],{"class":504},"岁\"",[147,149569,407],{"class":157},[147,149571,149572],{"class":149,"line":1489},[147,149573,2674],{"emptyLinePlaceholder":324},[147,149575,149576],{"class":149,"line":1495},[147,149577,149578],{"class":157},"introduce(name, age)\n",[19,149580,149581],{},"面向对象：",[138,149583,149585],{"className":30652,"code":149584,"language":30654,"meta":143,"style":143},"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",[51,149586,149587,149595,149603,149632,149636,149640,149650,149659,149668],{"__ignoreMap":143},[147,149588,149589,149591,149593],{"class":149,"line":150},[147,149590,14967],{"class":397},[147,149592,8172],{"class":2237},[147,149594,4013],{"class":157},[147,149596,149597,149599,149601],{"class":149,"line":312},[147,149598,31075],{"class":397},[147,149600,149535],{"class":2237},[147,149602,31081],{"class":157},[147,149604,149605,149607,149609,149611,149613,149616,149618,149620,149622,149624,149626,149628,149630],{"class":149,"line":1454},[147,149606,32725],{"class":448},[147,149608,401],{"class":157},[147,149610,452],{"class":397},[147,149612,149549],{"class":504},[147,149614,149615],{"class":448},"{self",[147,149617,80573],{"class":157},[147,149619,1345],{"class":448},[147,149621,149558],{"class":504},[147,149623,149615],{"class":448},[147,149625,80585],{"class":157},[147,149627,1345],{"class":448},[147,149629,149567],{"class":504},[147,149631,407],{"class":157},[147,149633,149634],{"class":149,"line":1469},[147,149635,2674],{"emptyLinePlaceholder":324},[147,149637,149638],{"class":149,"line":1475},[147,149639,2674],{"emptyLinePlaceholder":324},[147,149641,149642,149645,149647],{"class":149,"line":1489},[147,149643,149644],{"class":157},"student ",[147,149646,445],{"class":397},[147,149648,149649],{"class":157}," Student()\n",[147,149651,149652,149655,149657],{"class":149,"line":1495},[147,149653,149654],{"class":157},"student.name ",[147,149656,445],{"class":397},[147,149658,149516],{"class":504},[147,149660,149661,149664,149666],{"class":149,"line":1586},[147,149662,149663],{"class":157},"student.age ",[147,149665,445],{"class":397},[147,149667,146714],{"class":448},[147,149669,149670],{"class":149,"line":1592},[147,149671,149672],{"class":157},"student.introduce()\n",[19,149674,149675],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,149677,149679],{"id":149678},"_112-类和对象","11.2 类和对象",[19,149681,149682],{},"类是模板，对象是根据模板创建出来的具体实例。",[138,149684,149686],{"className":30652,"code":149685,"language":30654,"meta":143,"style":143},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[51,149687,149688,149696,149701,149705,149709,149718],{"__ignoreMap":143},[147,149689,149690,149692,149694],{"class":149,"line":150},[147,149691,14967],{"class":397},[147,149693,8172],{"class":2237},[147,149695,4013],{"class":157},[147,149697,149698],{"class":149,"line":312},[147,149699,149700],{"class":397},"    pass\n",[147,149702,149703],{"class":149,"line":1454},[147,149704,2674],{"emptyLinePlaceholder":324},[147,149706,149707],{"class":149,"line":1469},[147,149708,2674],{"emptyLinePlaceholder":324},[147,149710,149711,149714,149716],{"class":149,"line":1475},[147,149712,149713],{"class":157},"student1 ",[147,149715,445],{"class":397},[147,149717,149649],{"class":157},[147,149719,149720,149723,149725],{"class":149,"line":1489},[147,149721,149722],{"class":157},"student2 ",[147,149724,445],{"class":397},[147,149726,149649],{"class":157},[19,149728,149729,149732,149733,101290,149736,149739],{},[51,149730,149731],{},"Student"," 是类，",[51,149734,149735],{},"student1",[51,149737,149738],{},"student2"," 是对象。",[14,149741,149743],{"id":149742},"_113-属性","11.3 属性",[19,149745,149746],{},"属性是对象保存的数据。",[138,149748,149750],{"className":30652,"code":149749,"language":30654,"meta":143,"style":143},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[51,149751,149752,149760,149764,149768,149772,149780,149788,149796,149800,149807],{"__ignoreMap":143},[147,149753,149754,149756,149758],{"class":149,"line":150},[147,149755,14967],{"class":397},[147,149757,8172],{"class":2237},[147,149759,4013],{"class":157},[147,149761,149762],{"class":149,"line":312},[147,149763,149700],{"class":397},[147,149765,149766],{"class":149,"line":1454},[147,149767,2674],{"emptyLinePlaceholder":324},[147,149769,149770],{"class":149,"line":1469},[147,149771,2674],{"emptyLinePlaceholder":324},[147,149773,149774,149776,149778],{"class":149,"line":1475},[147,149775,149644],{"class":157},[147,149777,445],{"class":397},[147,149779,149649],{"class":157},[147,149781,149782,149784,149786],{"class":149,"line":1489},[147,149783,149654],{"class":157},[147,149785,445],{"class":397},[147,149787,149516],{"class":504},[147,149789,149790,149792,149794],{"class":149,"line":1495},[147,149791,149663],{"class":157},[147,149793,445],{"class":397},[147,149795,146714],{"class":448},[147,149797,149798],{"class":149,"line":1586},[147,149799,2674],{"emptyLinePlaceholder":324},[147,149801,149802,149804],{"class":149,"line":1592},[147,149803,30689],{"class":448},[147,149805,149806],{"class":157},"(student.name)\n",[147,149808,149809,149811],{"class":149,"line":1604},[147,149810,30689],{"class":448},[147,149812,149813],{"class":157},"(student.age)\n",[19,149815,149816],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,149818,149820],{"id":149819},"_114-方法","11.4 方法",[19,149822,149823],{},"类中的函数叫方法。",[138,149825,149826],{"className":30652,"code":149584,"language":30654,"meta":143,"style":143},[51,149827,149828,149836,149844,149872,149876,149880,149888,149896,149904],{"__ignoreMap":143},[147,149829,149830,149832,149834],{"class":149,"line":150},[147,149831,14967],{"class":397},[147,149833,8172],{"class":2237},[147,149835,4013],{"class":157},[147,149837,149838,149840,149842],{"class":149,"line":312},[147,149839,31075],{"class":397},[147,149841,149535],{"class":2237},[147,149843,31081],{"class":157},[147,149845,149846,149848,149850,149852,149854,149856,149858,149860,149862,149864,149866,149868,149870],{"class":149,"line":1454},[147,149847,32725],{"class":448},[147,149849,401],{"class":157},[147,149851,452],{"class":397},[147,149853,149549],{"class":504},[147,149855,149615],{"class":448},[147,149857,80573],{"class":157},[147,149859,1345],{"class":448},[147,149861,149558],{"class":504},[147,149863,149615],{"class":448},[147,149865,80585],{"class":157},[147,149867,1345],{"class":448},[147,149869,149567],{"class":504},[147,149871,407],{"class":157},[147,149873,149874],{"class":149,"line":1469},[147,149875,2674],{"emptyLinePlaceholder":324},[147,149877,149878],{"class":149,"line":1475},[147,149879,2674],{"emptyLinePlaceholder":324},[147,149881,149882,149884,149886],{"class":149,"line":1489},[147,149883,149644],{"class":157},[147,149885,445],{"class":397},[147,149887,149649],{"class":157},[147,149889,149890,149892,149894],{"class":149,"line":1495},[147,149891,149654],{"class":157},[147,149893,445],{"class":397},[147,149895,149516],{"class":504},[147,149897,149898,149900,149902],{"class":149,"line":1586},[147,149899,149663],{"class":157},[147,149901,445],{"class":397},[147,149903,146714],{"class":448},[147,149905,149906],{"class":149,"line":1592},[147,149907,149672],{"class":157},[19,149909,149910,149912,149913,149915],{},[51,149911,31097],{}," 表示当前对象。调用方法时不需要手动传入 ",[51,149914,31097],{},"，Python 会自动传。",[14,149917,149919],{"id":149918},"_115-构造方法__init__","11.5 构造方法__init__",[19,149921,149922,149924],{},[51,149923,31103],{}," 在对象创建时自动执行，用于初始化属性。",[138,149926,149928],{"className":30652,"code":149927,"language":30654,"meta":143,"style":143},"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",[51,149929,149930,149938,149947,149959,149971,149982,149986,149994,150032,150036,150040,150062],{"__ignoreMap":143},[147,149931,149932,149934,149936],{"class":149,"line":150},[147,149933,14967],{"class":397},[147,149935,8172],{"class":2237},[147,149937,4013],{"class":157},[147,149939,149940,149942,149944],{"class":149,"line":312},[147,149941,31075],{"class":397},[147,149943,31078],{"class":448},[147,149945,149946],{"class":157},"(self, name, age, score):\n",[147,149948,149949,149951,149954,149956],{"class":149,"line":1454},[147,149950,31119],{"class":448},[147,149952,149953],{"class":157},".name ",[147,149955,445],{"class":397},[147,149957,149958],{"class":157}," name\n",[147,149960,149961,149963,149966,149968],{"class":149,"line":1469},[147,149962,31119],{"class":448},[147,149964,149965],{"class":157},".age ",[147,149967,445],{"class":397},[147,149969,149970],{"class":157}," age\n",[147,149972,149973,149975,149978,149980],{"class":149,"line":1475},[147,149974,31119],{"class":448},[147,149976,149977],{"class":157},".score ",[147,149979,445],{"class":397},[147,149981,1853],{"class":157},[147,149983,149984],{"class":149,"line":1489},[147,149985,2674],{"emptyLinePlaceholder":324},[147,149987,149988,149990,149992],{"class":149,"line":1495},[147,149989,31075],{"class":397},[147,149991,149535],{"class":2237},[147,149993,31081],{"class":157},[147,149995,149996,149998,150000,150002,150004,150006,150008,150010,150012,150014,150016,150018,150021,150023,150026,150028,150030],{"class":149,"line":1586},[147,149997,32725],{"class":448},[147,149999,401],{"class":157},[147,150001,452],{"class":397},[147,150003,149549],{"class":504},[147,150005,149615],{"class":448},[147,150007,80573],{"class":157},[147,150009,1345],{"class":448},[147,150011,149558],{"class":504},[147,150013,149615],{"class":448},[147,150015,80585],{"class":157},[147,150017,1345],{"class":448},[147,150019,150020],{"class":504},"岁，成绩",[147,150022,149615],{"class":448},[147,150024,150025],{"class":157},".score",[147,150027,1345],{"class":448},[147,150029,650],{"class":504},[147,150031,407],{"class":157},[147,150033,150034],{"class":149,"line":1592},[147,150035,2674],{"emptyLinePlaceholder":324},[147,150037,150038],{"class":149,"line":1604},[147,150039,2674],{"emptyLinePlaceholder":324},[147,150041,150042,150044,150046,150049,150052,150054,150056,150058,150060],{"class":149,"line":1886},[147,150043,149644],{"class":157},[147,150045,445],{"class":397},[147,150047,150048],{"class":157}," Student(",[147,150050,150051],{"class":504},"\"小明\"",[147,150053,12709],{"class":157},[147,150055,1049],{"class":448},[147,150057,12709],{"class":157},[147,150059,1388],{"class":448},[147,150061,407],{"class":157},[147,150063,150064],{"class":149,"line":1891},[147,150065,149672],{"class":157},[19,150067,150068],{},"构造方法的好处：",[350,150070,150071,150074,150077],{},[353,150072,150073],{},"创建对象时必须提供必要数据。",[353,150075,150076],{},"属性初始化集中，不容易漏。",[353,150078,150079],{},"对象状态更完整。",[14,150081,150083,150084],{"id":150082},"_116-str","11.6 ",[234,150085,1574],{},[19,150087,150088,150089,28659],{},"直接打印对象时，默认输出不直观。可以定义 ",[51,150090,150091],{},"__str__",[138,150093,150095],{"className":30652,"code":150094,"language":30654,"meta":143,"style":143},"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",[51,150096,150097,150105,150114,150124,150134,150138,150147,150175,150179,150183,150199],{"__ignoreMap":143},[147,150098,150099,150101,150103],{"class":149,"line":150},[147,150100,14967],{"class":397},[147,150102,8172],{"class":2237},[147,150104,4013],{"class":157},[147,150106,150107,150109,150111],{"class":149,"line":312},[147,150108,31075],{"class":397},[147,150110,31078],{"class":448},[147,150112,150113],{"class":157},"(self, name, age):\n",[147,150115,150116,150118,150120,150122],{"class":149,"line":1454},[147,150117,31119],{"class":448},[147,150119,149953],{"class":157},[147,150121,445],{"class":397},[147,150123,149958],{"class":157},[147,150125,150126,150128,150130,150132],{"class":149,"line":1469},[147,150127,31119],{"class":448},[147,150129,149965],{"class":157},[147,150131,445],{"class":397},[147,150133,149970],{"class":157},[147,150135,150136],{"class":149,"line":1475},[147,150137,2674],{"emptyLinePlaceholder":324},[147,150139,150140,150142,150145],{"class":149,"line":1489},[147,150141,31075],{"class":397},[147,150143,150144],{"class":448}," __str__",[147,150146,31081],{"class":157},[147,150148,150149,150151,150154,150157,150159,150161,150163,150166,150168,150170,150172],{"class":149,"line":1495},[147,150150,15025],{"class":397},[147,150152,150153],{"class":397}," f",[147,150155,150156],{"class":504},"\"Student(name=",[147,150158,149615],{"class":448},[147,150160,80573],{"class":157},[147,150162,1345],{"class":448},[147,150164,150165],{"class":504},", age=",[147,150167,149615],{"class":448},[147,150169,80585],{"class":157},[147,150171,1345],{"class":448},[147,150173,150174],{"class":504},")\"\n",[147,150176,150177],{"class":149,"line":1586},[147,150178,2674],{"emptyLinePlaceholder":324},[147,150180,150181],{"class":149,"line":1592},[147,150182,2674],{"emptyLinePlaceholder":324},[147,150184,150185,150187,150189,150191,150193,150195,150197],{"class":149,"line":1604},[147,150186,149644],{"class":157},[147,150188,445],{"class":397},[147,150190,150048],{"class":157},[147,150192,150051],{"class":504},[147,150194,12709],{"class":157},[147,150196,1049],{"class":448},[147,150198,407],{"class":157},[147,150200,150201,150203],{"class":149,"line":1886},[147,150202,30689],{"class":448},[147,150204,150205],{"class":157},"(student)\n",[14,150207,150209],{"id":150208},"_117-封装","11.7 封装",[19,150211,150212],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,150214,150215],{},"Python 中以双下划线开头的属性通常视为私有属性。",[138,150217,150219],{"className":30652,"code":150218,"language":30654,"meta":143,"style":143},"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",[51,150220,150221,150230,150239,150251,150263,150267,150276,150285,150289,150299,150312,150323,150328,150339,150343,150352,150364,150375,150379,150392,150403,150407,150418,150422,150426,150444,150453,150462],{"__ignoreMap":143},[147,150222,150223,150225,150228],{"class":149,"line":150},[147,150224,14967],{"class":397},[147,150226,150227],{"class":2237}," Account",[147,150229,4013],{"class":157},[147,150231,150232,150234,150236],{"class":149,"line":312},[147,150233,31075],{"class":397},[147,150235,31078],{"class":448},[147,150237,150238],{"class":157},"(self, owner, balance):\n",[147,150240,150241,150243,150246,150248],{"class":149,"line":1454},[147,150242,31119],{"class":448},[147,150244,150245],{"class":157},".owner ",[147,150247,445],{"class":397},[147,150249,150250],{"class":157}," owner\n",[147,150252,150253,150255,150258,150260],{"class":149,"line":1469},[147,150254,31119],{"class":448},[147,150256,150257],{"class":157},".__balance ",[147,150259,445],{"class":397},[147,150261,150262],{"class":157}," balance\n",[147,150264,150265],{"class":149,"line":1475},[147,150266,2674],{"emptyLinePlaceholder":324},[147,150268,150269,150271,150274],{"class":149,"line":1489},[147,150270,31075],{"class":397},[147,150272,150273],{"class":2237}," get_balance",[147,150275,31081],{"class":157},[147,150277,150278,150280,150282],{"class":149,"line":1495},[147,150279,15025],{"class":397},[147,150281,39147],{"class":448},[147,150283,150284],{"class":157},".__balance\n",[147,150286,150287],{"class":149,"line":1586},[147,150288,2674],{"emptyLinePlaceholder":324},[147,150290,150291,150293,150296],{"class":149,"line":1592},[147,150292,31075],{"class":397},[147,150294,150295],{"class":2237}," deposit",[147,150297,150298],{"class":157},"(self, money):\n",[147,150300,150301,150303,150306,150308,150310],{"class":149,"line":1604},[147,150302,2771],{"class":397},[147,150304,150305],{"class":157}," money ",[147,150307,1862],{"class":397},[147,150309,4367],{"class":448},[147,150311,4013],{"class":157},[147,150313,150314,150316,150318,150321],{"class":149,"line":1886},[147,150315,34924],{"class":448},[147,150317,401],{"class":157},[147,150319,150320],{"class":504},"\"存款金额必须大于0\"",[147,150322,407],{"class":157},[147,150324,150325],{"class":149,"line":1891},[147,150326,150327],{"class":397},"            return\n",[147,150329,150330,150332,150334,150336],{"class":149,"line":1897},[147,150331,31119],{"class":448},[147,150333,150257],{"class":157},[147,150335,9751],{"class":397},[147,150337,150338],{"class":157}," money\n",[147,150340,150341],{"class":149,"line":1902},[147,150342,2674],{"emptyLinePlaceholder":324},[147,150344,150345,150347,150350],{"class":149,"line":1916},[147,150346,31075],{"class":397},[147,150348,150349],{"class":2237}," withdraw",[147,150351,150298],{"class":157},[147,150353,150354,150356,150358,150360,150362],{"class":149,"line":1921},[147,150355,2771],{"class":397},[147,150357,150305],{"class":157},[147,150359,1862],{"class":397},[147,150361,4367],{"class":448},[147,150363,4013],{"class":157},[147,150365,150366,150368,150370,150373],{"class":149,"line":1927},[147,150367,34924],{"class":448},[147,150369,401],{"class":157},[147,150371,150372],{"class":504},"\"取款金额必须大于0\"",[147,150374,407],{"class":157},[147,150376,150377],{"class":149,"line":1948},[147,150378,150327],{"class":397},[147,150380,150381,150383,150385,150387,150389],{"class":149,"line":1953},[147,150382,2771],{"class":397},[147,150384,150305],{"class":157},[147,150386,1359],{"class":397},[147,150388,39147],{"class":448},[147,150390,150391],{"class":157},".__balance:\n",[147,150393,150394,150396,150398,150401],{"class":149,"line":1967},[147,150395,34924],{"class":448},[147,150397,401],{"class":157},[147,150399,150400],{"class":504},"\"余额不足\"",[147,150402,407],{"class":157},[147,150404,150405],{"class":149,"line":1972},[147,150406,150327],{"class":397},[147,150408,150409,150411,150413,150416],{"class":149,"line":2001},[147,150410,31119],{"class":448},[147,150412,150257],{"class":157},[147,150414,150415],{"class":397},"-=",[147,150417,150338],{"class":157},[147,150419,150420],{"class":149,"line":2006},[147,150421,2674],{"emptyLinePlaceholder":324},[147,150423,150424],{"class":149,"line":2023},[147,150425,2674],{"emptyLinePlaceholder":324},[147,150427,150428,150431,150433,150436,150438,150440,150442],{"class":149,"line":2028},[147,150429,150430],{"class":157},"account ",[147,150432,445],{"class":397},[147,150434,150435],{"class":157}," Account(",[147,150437,150051],{"class":504},[147,150439,12709],{"class":157},[147,150441,6684],{"class":448},[147,150443,407],{"class":157},[147,150445,150446,150449,150451],{"class":149,"line":2033},[147,150447,150448],{"class":157},"account.deposit(",[147,150450,1996],{"class":448},[147,150452,407],{"class":157},[147,150454,150455,150458,150460],{"class":149,"line":2038},[147,150456,150457],{"class":157},"account.withdraw(",[147,150459,710],{"class":448},[147,150461,407],{"class":157},[147,150463,150464,150466],{"class":149,"line":2052},[147,150465,30689],{"class":448},[147,150467,150468],{"class":157},"(account.get_balance())\n",[19,150470,150471],{},"封装的意义是避免外部随意修改内部状态。",[14,150473,150475],{"id":150474},"_118-继承","11.8 继承",[19,150477,150478],{},"继承可以让子类复用父类的属性和方法。",[138,150480,150482],{"className":30652,"code":150481,"language":30654,"meta":143,"style":143},"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",[51,150483,150484,150493,150502,150513,150517,150521,150535,150544,150555,150559,150563,150573,150578],{"__ignoreMap":143},[147,150485,150486,150488,150491],{"class":149,"line":150},[147,150487,14967],{"class":397},[147,150489,150490],{"class":2237}," Animal",[147,150492,4013],{"class":157},[147,150494,150495,150497,150500],{"class":149,"line":312},[147,150496,31075],{"class":397},[147,150498,150499],{"class":2237}," eat",[147,150501,31081],{"class":157},[147,150503,150504,150506,150508,150511],{"class":149,"line":1454},[147,150505,32725],{"class":448},[147,150507,401],{"class":157},[147,150509,150510],{"class":504},"\"吃东西\"",[147,150512,407],{"class":157},[147,150514,150515],{"class":149,"line":1469},[147,150516,2674],{"emptyLinePlaceholder":324},[147,150518,150519],{"class":149,"line":1475},[147,150520,2674],{"emptyLinePlaceholder":324},[147,150522,150523,150525,150528,150530,150533],{"class":149,"line":1489},[147,150524,14967],{"class":397},[147,150526,150527],{"class":2237}," Dog",[147,150529,401],{"class":157},[147,150531,150532],{"class":2237},"Animal",[147,150534,31060],{"class":157},[147,150536,150537,150539,150542],{"class":149,"line":1495},[147,150538,31075],{"class":397},[147,150540,150541],{"class":2237}," bark",[147,150543,31081],{"class":157},[147,150545,150546,150548,150550,150553],{"class":149,"line":1586},[147,150547,32725],{"class":448},[147,150549,401],{"class":157},[147,150551,150552],{"class":504},"\"汪汪\"",[147,150554,407],{"class":157},[147,150556,150557],{"class":149,"line":1592},[147,150558,2674],{"emptyLinePlaceholder":324},[147,150560,150561],{"class":149,"line":1604},[147,150562,2674],{"emptyLinePlaceholder":324},[147,150564,150565,150568,150570],{"class":149,"line":1886},[147,150566,150567],{"class":157},"dog ",[147,150569,445],{"class":397},[147,150571,150572],{"class":157}," Dog()\n",[147,150574,150575],{"class":149,"line":1891},[147,150576,150577],{"class":157},"dog.eat()\n",[147,150579,150580],{"class":149,"line":1897},[147,150581,150582],{"class":157},"dog.bark()\n",[19,150584,150585],{},"子类可以扩展新方法，也可以重写父类方法。",[14,150587,150589],{"id":150588},"_119-方法重写","11.9 方法重写",[138,150591,150593],{"className":30652,"code":150592,"language":30654,"meta":143,"style":143},"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",[51,150594,150595,150603,150612,150623,150627,150631,150643,150651,150661,150665,150669,150682,150690,150701,150705,150709,150717,150727,150731,150736],{"__ignoreMap":143},[147,150596,150597,150599,150601],{"class":149,"line":150},[147,150598,14967],{"class":397},[147,150600,150490],{"class":2237},[147,150602,4013],{"class":157},[147,150604,150605,150607,150610],{"class":149,"line":312},[147,150606,31075],{"class":397},[147,150608,150609],{"class":2237}," speak",[147,150611,31081],{"class":157},[147,150613,150614,150616,150618,150621],{"class":149,"line":1454},[147,150615,32725],{"class":448},[147,150617,401],{"class":157},[147,150619,150620],{"class":504},"\"动物叫\"",[147,150622,407],{"class":157},[147,150624,150625],{"class":149,"line":1469},[147,150626,2674],{"emptyLinePlaceholder":324},[147,150628,150629],{"class":149,"line":1475},[147,150630,2674],{"emptyLinePlaceholder":324},[147,150632,150633,150635,150637,150639,150641],{"class":149,"line":1489},[147,150634,14967],{"class":397},[147,150636,150527],{"class":2237},[147,150638,401],{"class":157},[147,150640,150532],{"class":2237},[147,150642,31060],{"class":157},[147,150644,150645,150647,150649],{"class":149,"line":1495},[147,150646,31075],{"class":397},[147,150648,150609],{"class":2237},[147,150650,31081],{"class":157},[147,150652,150653,150655,150657,150659],{"class":149,"line":1586},[147,150654,32725],{"class":448},[147,150656,401],{"class":157},[147,150658,150552],{"class":504},[147,150660,407],{"class":157},[147,150662,150663],{"class":149,"line":1592},[147,150664,2674],{"emptyLinePlaceholder":324},[147,150666,150667],{"class":149,"line":1604},[147,150668,2674],{"emptyLinePlaceholder":324},[147,150670,150671,150673,150676,150678,150680],{"class":149,"line":1886},[147,150672,14967],{"class":397},[147,150674,150675],{"class":2237}," Cat",[147,150677,401],{"class":157},[147,150679,150532],{"class":2237},[147,150681,31060],{"class":157},[147,150683,150684,150686,150688],{"class":149,"line":1891},[147,150685,31075],{"class":397},[147,150687,150609],{"class":2237},[147,150689,31081],{"class":157},[147,150691,150692,150694,150696,150699],{"class":149,"line":1897},[147,150693,32725],{"class":448},[147,150695,401],{"class":157},[147,150697,150698],{"class":504},"\"喵喵\"",[147,150700,407],{"class":157},[147,150702,150703],{"class":149,"line":1902},[147,150704,2674],{"emptyLinePlaceholder":324},[147,150706,150707],{"class":149,"line":1916},[147,150708,2674],{"emptyLinePlaceholder":324},[147,150710,150711,150713,150715],{"class":149,"line":1921},[147,150712,150567],{"class":157},[147,150714,445],{"class":397},[147,150716,150572],{"class":157},[147,150718,150719,150722,150724],{"class":149,"line":1927},[147,150720,150721],{"class":157},"cat ",[147,150723,445],{"class":397},[147,150725,150726],{"class":157}," Cat()\n",[147,150728,150729],{"class":149,"line":1948},[147,150730,2674],{"emptyLinePlaceholder":324},[147,150732,150733],{"class":149,"line":1953},[147,150734,150735],{"class":157},"dog.speak()\n",[147,150737,150738],{"class":149,"line":1967},[147,150739,150740],{"class":157},"cat.speak()\n",[14,150742,150744],{"id":150743},"_1110-super","11.10 super",[19,150746,150747,150748,150751],{},"子类可以通过 ",[51,150749,150750],{},"super()"," 调用父类方法。",[138,150753,150755],{"className":30652,"code":150754,"language":30654,"meta":143,"style":143},"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",[51,150756,150757,150765,150774,150784,150788,150792,150804,150813,150824,150834,150838,150842,150858],{"__ignoreMap":143},[147,150758,150759,150761,150763],{"class":149,"line":150},[147,150760,14967],{"class":397},[147,150762,15842],{"class":2237},[147,150764,4013],{"class":157},[147,150766,150767,150769,150771],{"class":149,"line":312},[147,150768,31075],{"class":397},[147,150770,31078],{"class":448},[147,150772,150773],{"class":157},"(self, name):\n",[147,150775,150776,150778,150780,150782],{"class":149,"line":1454},[147,150777,31119],{"class":448},[147,150779,149953],{"class":157},[147,150781,445],{"class":397},[147,150783,149958],{"class":157},[147,150785,150786],{"class":149,"line":1469},[147,150787,2674],{"emptyLinePlaceholder":324},[147,150789,150790],{"class":149,"line":1475},[147,150791,2674],{"emptyLinePlaceholder":324},[147,150793,150794,150796,150798,150800,150802],{"class":149,"line":1489},[147,150795,14967],{"class":397},[147,150797,8172],{"class":2237},[147,150799,401],{"class":157},[147,150801,19319],{"class":2237},[147,150803,31060],{"class":157},[147,150805,150806,150808,150810],{"class":149,"line":1495},[147,150807,31075],{"class":397},[147,150809,31078],{"class":448},[147,150811,150812],{"class":157},"(self, name, score):\n",[147,150814,150815,150817,150819,150821],{"class":149,"line":1586},[147,150816,31091],{"class":448},[147,150818,17534],{"class":157},[147,150820,31103],{"class":448},[147,150822,150823],{"class":157},"(name)\n",[147,150825,150826,150828,150830,150832],{"class":149,"line":1592},[147,150827,31119],{"class":448},[147,150829,149977],{"class":157},[147,150831,445],{"class":397},[147,150833,1853],{"class":157},[147,150835,150836],{"class":149,"line":1604},[147,150837,2674],{"emptyLinePlaceholder":324},[147,150839,150840],{"class":149,"line":1886},[147,150841,2674],{"emptyLinePlaceholder":324},[147,150843,150844,150846,150848,150850,150852,150854,150856],{"class":149,"line":1891},[147,150845,149644],{"class":157},[147,150847,445],{"class":397},[147,150849,150048],{"class":157},[147,150851,150051],{"class":504},[147,150853,12709],{"class":157},[147,150855,1388],{"class":448},[147,150857,407],{"class":157},[147,150859,150860,150862],{"class":149,"line":1897},[147,150861,30689],{"class":448},[147,150863,150864],{"class":157},"(student.name, student.score)\n",[14,150866,150868],{"id":150867},"_1111-多态","11.11 多态",[19,150870,150871],{},"多态指不同对象响应同一个方法，表现出不同结果。",[138,150873,150875],{"className":30652,"code":150874,"language":30654,"meta":143,"style":143},"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",[51,150876,150877,150885,150893,150903,150907,150911,150919,150927,150937,150941,150945,150955,150960,150964,150968,150973],{"__ignoreMap":143},[147,150878,150879,150881,150883],{"class":149,"line":150},[147,150880,14967],{"class":397},[147,150882,150527],{"class":2237},[147,150884,4013],{"class":157},[147,150886,150887,150889,150891],{"class":149,"line":312},[147,150888,31075],{"class":397},[147,150890,150609],{"class":2237},[147,150892,31081],{"class":157},[147,150894,150895,150897,150899,150901],{"class":149,"line":1454},[147,150896,32725],{"class":448},[147,150898,401],{"class":157},[147,150900,150552],{"class":504},[147,150902,407],{"class":157},[147,150904,150905],{"class":149,"line":1469},[147,150906,2674],{"emptyLinePlaceholder":324},[147,150908,150909],{"class":149,"line":1475},[147,150910,2674],{"emptyLinePlaceholder":324},[147,150912,150913,150915,150917],{"class":149,"line":1489},[147,150914,14967],{"class":397},[147,150916,150675],{"class":2237},[147,150918,4013],{"class":157},[147,150920,150921,150923,150925],{"class":149,"line":1495},[147,150922,31075],{"class":397},[147,150924,150609],{"class":2237},[147,150926,31081],{"class":157},[147,150928,150929,150931,150933,150935],{"class":149,"line":1586},[147,150930,32725],{"class":448},[147,150932,401],{"class":157},[147,150934,150698],{"class":504},[147,150936,407],{"class":157},[147,150938,150939],{"class":149,"line":1592},[147,150940,2674],{"emptyLinePlaceholder":324},[147,150942,150943],{"class":149,"line":1604},[147,150944,2674],{"emptyLinePlaceholder":324},[147,150946,150947,150949,150952],{"class":149,"line":1886},[147,150948,32221],{"class":397},[147,150950,150951],{"class":2237}," make_sound",[147,150953,150954],{"class":157},"(animal):\n",[147,150956,150957],{"class":149,"line":1891},[147,150958,150959],{"class":157},"    animal.speak()\n",[147,150961,150962],{"class":149,"line":1897},[147,150963,2674],{"emptyLinePlaceholder":324},[147,150965,150966],{"class":149,"line":1902},[147,150967,2674],{"emptyLinePlaceholder":324},[147,150969,150970],{"class":149,"line":1916},[147,150971,150972],{"class":157},"make_sound(Dog())\n",[147,150974,150975],{"class":149,"line":1921},[147,150976,150977],{"class":157},"make_sound(Cat())\n",[19,150979,150980],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,150982,150984],{"id":150983},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,150986,150987],{},"实例属性属于对象：",[138,150989,150991],{"className":30652,"code":150990,"language":30654,"meta":143,"style":143},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[51,150992,150993,151001,151009],{"__ignoreMap":143},[147,150994,150995,150997,150999],{"class":149,"line":150},[147,150996,14967],{"class":397},[147,150998,8172],{"class":2237},[147,151000,4013],{"class":157},[147,151002,151003,151005,151007],{"class":149,"line":312},[147,151004,31075],{"class":397},[147,151006,31078],{"class":448},[147,151008,150773],{"class":157},[147,151010,151011,151013,151015,151017],{"class":149,"line":1454},[147,151012,31119],{"class":448},[147,151014,149953],{"class":157},[147,151016,445],{"class":397},[147,151018,149958],{"class":157},[19,151020,151021],{},"类属性属于类，所有对象共享：",[138,151023,151025],{"className":30652,"code":151024,"language":30654,"meta":143,"style":143},"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",[51,151026,151027,151035,151045,151049,151057,151067,151071,151075,151088,151102,151106,151113,151120],{"__ignoreMap":143},[147,151028,151029,151031,151033],{"class":149,"line":150},[147,151030,14967],{"class":397},[147,151032,8172],{"class":2237},[147,151034,4013],{"class":157},[147,151036,151037,151040,151042],{"class":149,"line":312},[147,151038,151039],{"class":157},"    school ",[147,151041,445],{"class":397},[147,151043,151044],{"class":504}," \"黑马学校\"\n",[147,151046,151047],{"class":149,"line":1454},[147,151048,2674],{"emptyLinePlaceholder":324},[147,151050,151051,151053,151055],{"class":149,"line":1469},[147,151052,31075],{"class":397},[147,151054,31078],{"class":448},[147,151056,150773],{"class":157},[147,151058,151059,151061,151063,151065],{"class":149,"line":1475},[147,151060,31119],{"class":448},[147,151062,149953],{"class":157},[147,151064,445],{"class":397},[147,151066,149958],{"class":157},[147,151068,151069],{"class":149,"line":1489},[147,151070,2674],{"emptyLinePlaceholder":324},[147,151072,151073],{"class":149,"line":1495},[147,151074,2674],{"emptyLinePlaceholder":324},[147,151076,151077,151080,151082,151084,151086],{"class":149,"line":1586},[147,151078,151079],{"class":157},"s1 ",[147,151081,445],{"class":397},[147,151083,150048],{"class":157},[147,151085,150051],{"class":504},[147,151087,407],{"class":157},[147,151089,151090,151093,151095,151097,151100],{"class":149,"line":1592},[147,151091,151092],{"class":157},"s2 ",[147,151094,445],{"class":397},[147,151096,150048],{"class":157},[147,151098,151099],{"class":504},"\"小红\"",[147,151101,407],{"class":157},[147,151103,151104],{"class":149,"line":1604},[147,151105,2674],{"emptyLinePlaceholder":324},[147,151107,151108,151110],{"class":149,"line":1886},[147,151109,30689],{"class":448},[147,151111,151112],{"class":157},"(s1.school)\n",[147,151114,151115,151117],{"class":149,"line":1891},[147,151116,30689],{"class":448},[147,151118,151119],{"class":157},"(s2.school)\n",[147,151121,151122,151124],{"class":149,"line":1897},[147,151123,30689],{"class":448},[147,151125,151126],{"class":157},"(Student.school)\n",[19,151128,151129],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,151131,151133],{"id":151132},"_1113-类方法和静态方法","11.13 类方法和静态方法",[367,151135,151137],{"id":151136},"_11131-类方法","11.13.1 类方法",[19,151139,151140,151141,151144,151145,28659],{},"类方法使用 ",[51,151142,151143],{},"@classmethod","，第一个参数通常是 ",[51,151146,151147],{},"cls",[138,151149,151151],{"className":30652,"code":151150,"language":30654,"meta":143,"style":143},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[51,151152,151153,151161,151169,151173,151181,151191,151201,151205,151209],{"__ignoreMap":143},[147,151154,151155,151157,151159],{"class":149,"line":150},[147,151156,14967],{"class":397},[147,151158,8172],{"class":2237},[147,151160,4013],{"class":157},[147,151162,151163,151165,151167],{"class":149,"line":312},[147,151164,151039],{"class":157},[147,151166,445],{"class":397},[147,151168,151044],{"class":504},[147,151170,151171],{"class":149,"line":1454},[147,151172,2674],{"emptyLinePlaceholder":324},[147,151174,151175,151178],{"class":149,"line":1469},[147,151176,151177],{"class":2237},"    @",[147,151179,151180],{"class":448},"classmethod\n",[147,151182,151183,151185,151188],{"class":149,"line":1475},[147,151184,31075],{"class":397},[147,151186,151187],{"class":2237}," get_school",[147,151189,151190],{"class":157},"(cls):\n",[147,151192,151193,151195,151198],{"class":149,"line":1489},[147,151194,15025],{"class":397},[147,151196,151197],{"class":448}," cls",[147,151199,151200],{"class":157},".school\n",[147,151202,151203],{"class":149,"line":1495},[147,151204,2674],{"emptyLinePlaceholder":324},[147,151206,151207],{"class":149,"line":1586},[147,151208,2674],{"emptyLinePlaceholder":324},[147,151210,151211,151213],{"class":149,"line":1592},[147,151212,30689],{"class":448},[147,151214,151215],{"class":157},"(Student.get_school())\n",[367,151217,151219],{"id":151218},"_11132-静态方法","11.13.2 静态方法",[19,151221,151222,151223,151226],{},"静态方法使用 ",[51,151224,151225],{},"@staticmethod","，不需要访问实例和类。",[138,151228,151230],{"className":30652,"code":151229,"language":30654,"meta":143,"style":143},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[51,151231,151232,151241,151248,151257,151268,151272,151276],{"__ignoreMap":143},[147,151233,151234,151236,151239],{"class":149,"line":150},[147,151235,14967],{"class":397},[147,151237,151238],{"class":2237}," MathUtils",[147,151240,4013],{"class":157},[147,151242,151243,151245],{"class":149,"line":312},[147,151244,151177],{"class":2237},[147,151246,151247],{"class":448},"staticmethod\n",[147,151249,151250,151252,151254],{"class":149,"line":1454},[147,151251,31075],{"class":397},[147,151253,5483],{"class":2237},[147,151255,151256],{"class":157},"(a, b):\n",[147,151258,151259,151261,151263,151265],{"class":149,"line":1469},[147,151260,15025],{"class":397},[147,151262,11143],{"class":157},[147,151264,880],{"class":397},[147,151266,151267],{"class":157}," b\n",[147,151269,151270],{"class":149,"line":1475},[147,151271,2674],{"emptyLinePlaceholder":324},[147,151273,151274],{"class":149,"line":1489},[147,151275,2674],{"emptyLinePlaceholder":324},[147,151277,151278,151280,151283,151285,151287,151289],{"class":149,"line":1495},[147,151279,30689],{"class":448},[147,151281,151282],{"class":157},"(MathUtils.add(",[147,151284,616],{"class":448},[147,151286,12709],{"class":157},[147,151288,477],{"class":448},[147,151290,30771],{"class":157},[19,151292,151293],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,151295,151297],{"id":151296},"_1114-dataclass","11.14 dataclass",[19,151299,151300,151303],{},[51,151301,151302],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[138,151305,151307],{"className":30652,"code":151306,"language":30654,"meta":143,"style":143},"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",[51,151308,151309,151321,151325,151329,151334,151342,151350,151358,151366,151370,151374,151394],{"__ignoreMap":143},[147,151310,151311,151313,151316,151318],{"class":149,"line":150},[147,151312,31011],{"class":397},[147,151314,151315],{"class":157}," dataclasses ",[147,151317,30666],{"class":397},[147,151319,151320],{"class":157}," dataclass\n",[147,151322,151323],{"class":149,"line":312},[147,151324,2674],{"emptyLinePlaceholder":324},[147,151326,151327],{"class":149,"line":1454},[147,151328,2674],{"emptyLinePlaceholder":324},[147,151330,151331],{"class":149,"line":1469},[147,151332,151333],{"class":2237},"@dataclass\n",[147,151335,151336,151338,151340],{"class":149,"line":1475},[147,151337,14967],{"class":397},[147,151339,8172],{"class":2237},[147,151341,4013],{"class":157},[147,151343,151344,151347],{"class":149,"line":1489},[147,151345,151346],{"class":157},"    name: ",[147,151348,151349],{"class":448},"str\n",[147,151351,151352,151355],{"class":149,"line":1495},[147,151353,151354],{"class":157},"    age: ",[147,151356,151357],{"class":448},"int\n",[147,151359,151360,151363],{"class":149,"line":1586},[147,151361,151362],{"class":157},"    score: ",[147,151364,151365],{"class":448},"float\n",[147,151367,151368],{"class":149,"line":1592},[147,151369,2674],{"emptyLinePlaceholder":324},[147,151371,151372],{"class":149,"line":1604},[147,151373,2674],{"emptyLinePlaceholder":324},[147,151375,151376,151378,151380,151382,151384,151386,151388,151390,151392],{"class":149,"line":1886},[147,151377,149644],{"class":157},[147,151379,445],{"class":397},[147,151381,150048],{"class":157},[147,151383,150051],{"class":504},[147,151385,12709],{"class":157},[147,151387,1049],{"class":448},[147,151389,12709],{"class":157},[147,151391,1388],{"class":448},[147,151393,407],{"class":157},[147,151395,151396,151398],{"class":149,"line":1891},[147,151397,30689],{"class":448},[147,151399,150205],{"class":157},[19,151401,151402,151403,611,151405,151408],{},"它会自动生成 ",[51,151404,31103],{},[51,151406,151407],{},"__repr__"," 等方法。适合数据模型类。",[14,151410,151412],{"id":151411},"_1115-小案例学生类","11.15 小案例：学生类",[138,151414,151416],{"className":30652,"code":151415,"language":30654,"meta":143,"style":143},"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",[51,151417,151418,151426,151435,151447,151457,151467,151477,151481,151490,151503,151507,151516,151522,151534,151546,151558,151570,151574,151578,151584,151594,151603,151613,151621,151629,151638,151642,151646,151654,151690,151694,151698,151723,151730],{"__ignoreMap":143},[147,151419,151420,151422,151424],{"class":149,"line":150},[147,151421,14967],{"class":397},[147,151423,8172],{"class":2237},[147,151425,4013],{"class":157},[147,151427,151428,151430,151432],{"class":149,"line":312},[147,151429,31075],{"class":397},[147,151431,31078],{"class":448},[147,151433,151434],{"class":157},"(self, student_id, name, age, score):\n",[147,151436,151437,151439,151442,151444],{"class":149,"line":1454},[147,151438,31119],{"class":448},[147,151440,151441],{"class":157},".student_id ",[147,151443,445],{"class":397},[147,151445,151446],{"class":157}," student_id\n",[147,151448,151449,151451,151453,151455],{"class":149,"line":1469},[147,151450,31119],{"class":448},[147,151452,149953],{"class":157},[147,151454,445],{"class":397},[147,151456,149958],{"class":157},[147,151458,151459,151461,151463,151465],{"class":149,"line":1475},[147,151460,31119],{"class":448},[147,151462,149965],{"class":157},[147,151464,445],{"class":397},[147,151466,149970],{"class":157},[147,151468,151469,151471,151473,151475],{"class":149,"line":1489},[147,151470,31119],{"class":448},[147,151472,149977],{"class":157},[147,151474,445],{"class":397},[147,151476,1853],{"class":157},[147,151478,151479],{"class":149,"line":1495},[147,151480,2674],{"emptyLinePlaceholder":324},[147,151482,151483,151485,151488],{"class":149,"line":1586},[147,151484,31075],{"class":397},[147,151486,151487],{"class":2237}," is_passed",[147,151489,31081],{"class":157},[147,151491,151492,151494,151496,151498,151500],{"class":149,"line":1592},[147,151493,15025],{"class":397},[147,151495,39147],{"class":448},[147,151497,149977],{"class":157},[147,151499,1984],{"class":397},[147,151501,151502],{"class":448}," 60\n",[147,151504,151505],{"class":149,"line":1604},[147,151506,2674],{"emptyLinePlaceholder":324},[147,151508,151509,151511,151514],{"class":149,"line":1886},[147,151510,31075],{"class":397},[147,151512,151513],{"class":2237}," to_dict",[147,151515,31081],{"class":157},[147,151517,151518,151520],{"class":149,"line":1891},[147,151519,15025],{"class":397},[147,151521,15845],{"class":157},[147,151523,151524,151527,151529,151531],{"class":149,"line":1897},[147,151525,151526],{"class":504},"            \"student_id\"",[147,151528,51710],{"class":157},[147,151530,31097],{"class":448},[147,151532,151533],{"class":157},".student_id,\n",[147,151535,151536,151539,151541,151543],{"class":149,"line":1902},[147,151537,151538],{"class":504},"            \"name\"",[147,151540,51710],{"class":157},[147,151542,31097],{"class":448},[147,151544,151545],{"class":157},".name,\n",[147,151547,151548,151551,151553,151555],{"class":149,"line":1916},[147,151549,151550],{"class":504},"            \"age\"",[147,151552,51710],{"class":157},[147,151554,31097],{"class":448},[147,151556,151557],{"class":157},".age,\n",[147,151559,151560,151563,151565,151567],{"class":149,"line":1921},[147,151561,151562],{"class":504},"            \"score\"",[147,151564,51710],{"class":157},[147,151566,31097],{"class":448},[147,151568,151569],{"class":157},".score,\n",[147,151571,151572],{"class":149,"line":1927},[147,151573,2803],{"class":157},[147,151575,151576],{"class":149,"line":1948},[147,151577,2674],{"emptyLinePlaceholder":324},[147,151579,151580,151582],{"class":149,"line":1953},[147,151581,151177],{"class":2237},[147,151583,151180],{"class":448},[147,151585,151586,151588,151591],{"class":149,"line":1967},[147,151587,31075],{"class":397},[147,151589,151590],{"class":2237}," from_dict",[147,151592,151593],{"class":157},"(cls, data):\n",[147,151595,151596,151598,151600],{"class":149,"line":1972},[147,151597,15025],{"class":397},[147,151599,151197],{"class":448},[147,151601,151602],{"class":157},"(\n",[147,151604,151605,151608,151611],{"class":149,"line":2001},[147,151606,151607],{"class":157},"            data[",[147,151609,151610],{"class":504},"\"student_id\"",[147,151612,88108],{"class":157},[147,151614,151615,151617,151619],{"class":149,"line":2006},[147,151616,151607],{"class":157},[147,151618,62952],{"class":504},[147,151620,88108],{"class":157},[147,151622,151623,151625,151627],{"class":149,"line":2023},[147,151624,151607],{"class":157},[147,151626,69397],{"class":504},[147,151628,88108],{"class":157},[147,151630,151631,151633,151636],{"class":149,"line":2028},[147,151632,151607],{"class":157},[147,151634,151635],{"class":504},"\"score\"",[147,151637,88108],{"class":157},[147,151639,151640],{"class":149,"line":2033},[147,151641,38400],{"class":157},[147,151643,151644],{"class":149,"line":2038},[147,151645,2674],{"emptyLinePlaceholder":324},[147,151647,151648,151650,151652],{"class":149,"line":2052},[147,151649,31075],{"class":397},[147,151651,150144],{"class":448},[147,151653,31081],{"class":157},[147,151655,151656,151658,151660,151662,151664,151667,151669,151672,151674,151676,151678,151680,151682,151684,151686,151688],{"class":149,"line":2057},[147,151657,15025],{"class":397},[147,151659,150153],{"class":397},[147,151661,650],{"class":504},[147,151663,149615],{"class":448},[147,151665,151666],{"class":157},".student_id",[147,151668,1345],{"class":448},[147,151670,151671],{"class":448}," {self",[147,151673,80573],{"class":157},[147,151675,1345],{"class":448},[147,151677,151671],{"class":448},[147,151679,80585],{"class":157},[147,151681,1345],{"class":448},[147,151683,151671],{"class":448},[147,151685,150025],{"class":157},[147,151687,1345],{"class":448},[147,151689,25407],{"class":504},[147,151691,151692],{"class":149,"line":2851},[147,151693,2674],{"emptyLinePlaceholder":324},[147,151695,151696],{"class":149,"line":2865},[147,151697,2674],{"emptyLinePlaceholder":324},[147,151699,151700,151702,151704,151706,151709,151711,151713,151715,151717,151719,151721],{"class":149,"line":2873},[147,151701,149644],{"class":157},[147,151703,445],{"class":397},[147,151705,150048],{"class":157},[147,151707,151708],{"class":504},"\"001\"",[147,151710,12709],{"class":157},[147,151712,150051],{"class":504},[147,151714,12709],{"class":157},[147,151716,1049],{"class":448},[147,151718,12709],{"class":157},[147,151720,1388],{"class":448},[147,151722,407],{"class":157},[147,151724,151725,151727],{"class":149,"line":2878},[147,151726,30689],{"class":448},[147,151728,151729],{"class":157},"(student.is_passed())\n",[147,151731,151732,151734],{"class":149,"line":2884},[147,151733,30689],{"class":448},[147,151735,151736],{"class":157},"(student.to_dict())\n",[19,151738,151739,101290,151742,151745],{},[51,151740,151741],{},"to_dict()",[51,151743,151744],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,151747,151749],{"id":151748},"_1116-易错点","11.16 易错点",[350,151751,151752,151758,151764,151769,151772,151775],{},[353,151753,151754,151755,28659],{},"类名推荐使用大驼峰，如 ",[51,151756,151757],{},"StudentManager",[353,151759,151760,151761,151763],{},"方法第一个参数必须写 ",[51,151762,31097],{},"，调用时不用传。",[353,151765,151766,151768],{},[51,151767,31103],{}," 不是普通方法，它在创建对象时自动执行。",[353,151770,151771],{},"私有属性不是绝对安全，只是约定和名称改写。",[353,151773,151774],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[353,151776,151777],{},"类中方法太多时，说明职责可能过重。",[14,151779,151781],{"id":151780},"_1117-本章练习","11.17 本章练习",[350,151783,151784,151790,151796,151801,151814],{},[353,151785,151786,151787,151789],{},"定义 ",[51,151788,149731],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[353,151791,151786,151792,151795],{},[51,151793,151794],{},"Account"," 类，实现存款、取款、查询余额。",[353,151797,151786,151798,151800],{},[51,151799,17499],{}," 类，计算圆的周长和面积。",[353,151802,151786,151803,611,151806,151809,151810,151813],{},[51,151804,151805],{},"Dog",[51,151807,151808],{},"Cat"," 类，并用同一个函数调用它们的 ",[51,151811,151812],{},"speak()"," 方法。",[353,151815,104636,151816,151818,151819,28659],{},[51,151817,151302],{}," 定义一个商品类 ",[51,151820,151821],{},"Product",[308,151823,151824],{},"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":143,"searchDepth":312,"depth":312,"links":151826},[151827,151828,151829,151830,151831,151832,151834,151835,151836,151837,151838,151839,151840,151844,151845,151846,151847],{"id":149495,"depth":312,"text":149496},{"id":149678,"depth":312,"text":149679},{"id":149742,"depth":312,"text":149743},{"id":149819,"depth":312,"text":149820},{"id":149918,"depth":312,"text":149919},{"id":150082,"depth":312,"text":151833},"11.6 str",{"id":150208,"depth":312,"text":150209},{"id":150474,"depth":312,"text":150475},{"id":150588,"depth":312,"text":150589},{"id":150743,"depth":312,"text":150744},{"id":150867,"depth":312,"text":150868},{"id":150983,"depth":312,"text":150984},{"id":151132,"depth":312,"text":151133,"children":151841},[151842,151843],{"id":151136,"depth":1454,"text":151137},{"id":151218,"depth":1454,"text":151219},{"id":151296,"depth":312,"text":151297},{"id":151411,"depth":312,"text":151412},{"id":151748,"depth":312,"text":151749},{"id":151780,"depth":312,"text":151781},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149487,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151854,"title":151855,"body":151856,"description":321,"extension":322,"meta":155169,"navigation":324,"path":155170,"seo":155171,"stem":155172,"__hash__":155173},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151857,"toc":155145},[151858,151861,151865,151868,151871,151900,151903,151911,151915,151919,151922,151945,151948,151954,151958,153404,153407,153428,153432,153435,153447,153450,153634,153637,153763,153766,153770,153774,153910,153914,154000,154004,154086,154090,154127,154131,154320,154324,154327,154557,154561,154564,154745,154748,154752,154755,154761,154764,154790,154794,154797,154811,154814,154839,154842,154856,154859,154876,154879,154896,154899,154916,154920,154946,154950,154973,154977,154980,154982,154988,154990,155011,155014,155020,155026,155030,155033,155109,155112,155116,155142],[10,151859,151855],{"id":151860},"_12-综合案例与复习路线",[14,151862,151864],{"id":151863},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,151866,151867],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,151869,151870],{},"一个合格的入门综合项目最好覆盖：",[350,151872,151873,151876,151879,151882,151885,151888,151891,151894,151897],{},[353,151874,151875],{},"输入输出。",[353,151877,151878],{},"判断和循环。",[353,151880,151881],{},"函数拆分。",[353,151883,151884],{},"列表、字典等容器。",[353,151886,151887],{},"文件持久化。",[353,151889,151890],{},"异常处理。",[353,151892,151893],{},"模块拆分。",[353,151895,151896],{},"可选：面向对象。",[353,151898,151899],{},"可选：数据可视化。",[19,151901,151902],{},"本章整理两个方向：",[350,151904,151905,151908],{},[353,151906,151907],{},"学生管理系统。",[353,151909,151910],{},"销售数据统计和可视化。",[14,151912,151914],{"id":151913},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[367,151916,151918],{"id":151917},"_1221-需求","12.2.1 需求",[19,151920,151921],{},"实现一个命令行学生管理系统：",[350,151923,151924,151927,151930,151933,151936,151939,151942],{},[353,151925,151926],{},"添加学生。",[353,151928,151929],{},"删除学生。",[353,151931,151932],{},"修改学生。",[353,151934,151935],{},"查询学生。",[353,151937,151938],{},"显示所有学生。",[353,151940,151941],{},"保存到 JSON 文件。",[353,151943,151944],{},"程序启动时自动读取 JSON 文件。",[19,151946,151947],{},"学生字段：",[138,151949,151952],{"className":151950,"code":151951,"language":5461,"meta":143},[5459],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[51,151953,151951],{"__ignoreMap":143},[14,151955,151957],{"id":151956},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[138,151959,151961],{"className":30652,"code":151960,"language":30654,"meta":143,"style":143},"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",[51,151962,151963,151969,151979,151983,151997,152001,152005,152014,152026,152032,152036,152042,152073,152083,152090,152101,152107,152111,152115,152125,152156,152182,152186,152190,152199,152210,152221,152232,152243,152254,152265,152276,152280,152284,152294,152306,152322,152329,152336,152340,152344,152354,152362,152369,152382,152392,152403,152407,152411,152420,152428,152434,152446,152454,152465,152469,152473,152482,152498,152502,152509,152520,152525,152529,152545,152560,152575,152579,152584,152592,152600,152608,152616,152620,152625,152636,152640,152644,152653,152668,152678,152682,152694,152705,152709,152713,152718,152722,152733,152737,152741,152750,152765,152773,152777,152789,152799,152803,152807,152822,152835,152848,152852,152865,152877,152889,152893,152897,152908,152912,152916,152925,152940,152948,152952,152964,152974,152978,152982,152987,152991,152995,153005,153011,153033,153052,153071,153090,153095,153099,153103,153112,153120,153131,153135,153139,153165,153175,153180,153184,153188,153196,153206,153210,153218,153223,153239,153243,153257,153262,153276,153281,153294,153299,153312,153317,153330,153335,153348,153359,153363,153369,153380,153384,153388,153400],{"__ignoreMap":143},[147,151964,151965,151967],{"class":149,"line":150},[147,151966,30666],{"class":397},[147,151968,147254],{"class":157},[147,151970,151971,151973,151975,151977],{"class":149,"line":312},[147,151972,31011],{"class":397},[147,151974,108581],{"class":157},[147,151976,30666],{"class":397},[147,151978,108586],{"class":157},[147,151980,151981],{"class":149,"line":1454},[147,151982,2674],{"emptyLinePlaceholder":324},[147,151984,151985,151988,151990,151992,151995],{"class":149,"line":1469},[147,151986,151987],{"class":448},"DATA_FILE",[147,151989,13838],{"class":397},[147,151991,108815],{"class":157},[147,151993,151994],{"class":504},"\"students.json\"",[147,151996,407],{"class":157},[147,151998,151999],{"class":149,"line":1475},[147,152000,2674],{"emptyLinePlaceholder":324},[147,152002,152003],{"class":149,"line":1489},[147,152004,2674],{"emptyLinePlaceholder":324},[147,152006,152007,152009,152012],{"class":149,"line":1495},[147,152008,32221],{"class":397},[147,152010,152011],{"class":2237}," load_students",[147,152013,32227],{"class":157},[147,152015,152016,152018,152020,152023],{"class":149,"line":1586},[147,152017,3375],{"class":397},[147,152019,39204],{"class":397},[147,152021,152022],{"class":448}," DATA_FILE",[147,152024,152025],{"class":157},".exists():\n",[147,152027,152028,152030],{"class":149,"line":1592},[147,152029,15025],{"class":397},[147,152031,52111],{"class":157},[147,152033,152034],{"class":149,"line":1604},[147,152035,2674],{"emptyLinePlaceholder":324},[147,152037,152038,152040],{"class":149,"line":1886},[147,152039,126054],{"class":397},[147,152041,4013],{"class":157},[147,152043,152044,152047,152049,152051,152053,152055,152057,152059,152061,152063,152065,152067,152069,152071],{"class":149,"line":1891},[147,152045,152046],{"class":397},"        with",[147,152048,146954],{"class":448},[147,152050,401],{"class":157},[147,152052,151987],{"class":448},[147,152054,12709],{"class":157},[147,152056,146964],{"class":504},[147,152058,12709],{"class":157},[147,152060,146969],{"class":5490},[147,152062,445],{"class":397},[147,152064,146974],{"class":504},[147,152066,13988],{"class":157},[147,152068,31657],{"class":397},[147,152070,148316],{"class":5490},[147,152072,4013],{"class":157},[147,152074,152075,152077,152079,152081],{"class":149,"line":1897},[147,152076,16005],{"class":397},[147,152078,148327],{"class":157},[147,152080,45628],{"class":5490},[147,152082,407],{"class":157},[147,152084,152085,152087],{"class":149,"line":1902},[147,152086,126082],{"class":397},[147,152088,152089],{"class":157}," json.JSONDecodeError:\n",[147,152091,152092,152094,152096,152099],{"class":149,"line":1916},[147,152093,32725],{"class":448},[147,152095,401],{"class":157},[147,152097,152098],{"class":504},"\"数据文件格式错误，已使用空数据启动\"",[147,152100,407],{"class":157},[147,152102,152103,152105],{"class":149,"line":1921},[147,152104,15025],{"class":397},[147,152106,52111],{"class":157},[147,152108,152109],{"class":149,"line":1927},[147,152110,2674],{"emptyLinePlaceholder":324},[147,152112,152113],{"class":149,"line":1948},[147,152114,2674],{"emptyLinePlaceholder":324},[147,152116,152117,152119,152122],{"class":149,"line":1953},[147,152118,32221],{"class":397},[147,152120,152121],{"class":2237}," save_students",[147,152123,152124],{"class":157},"(students):\n",[147,152126,152127,152129,152131,152133,152135,152137,152140,152142,152144,152146,152148,152150,152152,152154],{"class":149,"line":1967},[147,152128,34452],{"class":397},[147,152130,146954],{"class":448},[147,152132,401],{"class":157},[147,152134,151987],{"class":448},[147,152136,12709],{"class":157},[147,152138,152139],{"class":504},"\"w\"",[147,152141,12709],{"class":157},[147,152143,146969],{"class":5490},[147,152145,445],{"class":397},[147,152147,146974],{"class":504},[147,152149,13988],{"class":157},[147,152151,31657],{"class":397},[147,152153,148316],{"class":5490},[147,152155,4013],{"class":157},[147,152157,152158,152161,152163,152165,152167,152169,152171,152173,152176,152178,152180],{"class":149,"line":1972},[147,152159,152160],{"class":157},"        json.dump(students, ",[147,152162,45628],{"class":5490},[147,152164,12709],{"class":157},[147,152166,147300],{"class":5490},[147,152168,445],{"class":397},[147,152170,34261],{"class":448},[147,152172,12709],{"class":157},[147,152174,152175],{"class":5490},"indent",[147,152177,445],{"class":397},[147,152179,477],{"class":448},[147,152181,407],{"class":157},[147,152183,152184],{"class":149,"line":2001},[147,152185,2674],{"emptyLinePlaceholder":324},[147,152187,152188],{"class":149,"line":2006},[147,152189,2674],{"emptyLinePlaceholder":324},[147,152191,152192,152194,152197],{"class":149,"line":2023},[147,152193,32221],{"class":397},[147,152195,152196],{"class":2237}," show_menu",[147,152198,32227],{"class":157},[147,152200,152201,152203,152205,152208],{"class":149,"line":2028},[147,152202,31573],{"class":448},[147,152204,401],{"class":157},[147,152206,152207],{"class":504},"\"====== 学生管理系统 ======\"",[147,152209,407],{"class":157},[147,152211,152212,152214,152216,152219],{"class":149,"line":2033},[147,152213,31573],{"class":448},[147,152215,401],{"class":157},[147,152217,152218],{"class":504},"\"1. 添加学生\"",[147,152220,407],{"class":157},[147,152222,152223,152225,152227,152230],{"class":149,"line":2038},[147,152224,31573],{"class":448},[147,152226,401],{"class":157},[147,152228,152229],{"class":504},"\"2. 删除学生\"",[147,152231,407],{"class":157},[147,152233,152234,152236,152238,152241],{"class":149,"line":2052},[147,152235,31573],{"class":448},[147,152237,401],{"class":157},[147,152239,152240],{"class":504},"\"3. 修改学生\"",[147,152242,407],{"class":157},[147,152244,152245,152247,152249,152252],{"class":149,"line":2057},[147,152246,31573],{"class":448},[147,152248,401],{"class":157},[147,152250,152251],{"class":504},"\"4. 查询学生\"",[147,152253,407],{"class":157},[147,152255,152256,152258,152260,152263],{"class":149,"line":2851},[147,152257,31573],{"class":448},[147,152259,401],{"class":157},[147,152261,152262],{"class":504},"\"5. 显示所有学生\"",[147,152264,407],{"class":157},[147,152266,152267,152269,152271,152274],{"class":149,"line":2865},[147,152268,31573],{"class":448},[147,152270,401],{"class":157},[147,152272,152273],{"class":504},"\"0. 退出系统\"",[147,152275,407],{"class":157},[147,152277,152278],{"class":149,"line":2873},[147,152279,2674],{"emptyLinePlaceholder":324},[147,152281,152282],{"class":149,"line":2878},[147,152283,2674],{"emptyLinePlaceholder":324},[147,152285,152286,152288,152291],{"class":149,"line":2884},[147,152287,32221],{"class":397},[147,152289,152290],{"class":2237}," find_student",[147,152292,152293],{"class":157},"(students, student_id):\n",[147,152295,152296,152298,152301,152303],{"class":149,"line":2890},[147,152297,3475],{"class":397},[147,152299,152300],{"class":157}," student ",[147,152302,26317],{"class":397},[147,152304,152305],{"class":157}," students:\n",[147,152307,152308,152310,152313,152315,152317,152319],{"class":149,"line":2895},[147,152309,2771],{"class":397},[147,152311,152312],{"class":157}," student[",[147,152314,151610],{"class":504},[147,152316,4717],{"class":157},[147,152318,3223],{"class":397},[147,152320,152321],{"class":157}," student_id:\n",[147,152323,152324,152326],{"class":149,"line":8222},[147,152325,16005],{"class":397},[147,152327,152328],{"class":157}," student\n",[147,152330,152331,152333],{"class":149,"line":8246},[147,152332,4364],{"class":397},[147,152334,152335],{"class":448}," None\n",[147,152337,152338],{"class":149,"line":8251},[147,152339,2674],{"emptyLinePlaceholder":324},[147,152341,152342],{"class":149,"line":8257},[147,152343,2674],{"emptyLinePlaceholder":324},[147,152345,152346,152348,152351],{"class":149,"line":8284},[147,152347,32221],{"class":397},[147,152349,152350],{"class":2237}," input_int",[147,152352,152353],{"class":157},"(prompt):\n",[147,152355,152356,152358,152360],{"class":149,"line":8289},[147,152357,2525],{"class":397},[147,152359,95564],{"class":448},[147,152361,4013],{"class":157},[147,152363,152364,152367],{"class":149,"line":8295},[147,152365,152366],{"class":397},"        try",[147,152368,4013],{"class":157},[147,152370,152371,152373,152375,152377,152379],{"class":149,"line":8307},[147,152372,16005],{"class":397},[147,152374,2656],{"class":448},[147,152376,401],{"class":157},[147,152378,54094],{"class":448},[147,152380,152381],{"class":157},"(prompt))\n",[147,152383,152384,152387,152390],{"class":149,"line":8319},[147,152385,152386],{"class":397},"        except",[147,152388,152389],{"class":448}," ValueError",[147,152391,4013],{"class":157},[147,152393,152394,152396,152398,152401],{"class":149,"line":8331},[147,152395,34924],{"class":448},[147,152397,401],{"class":157},[147,152399,152400],{"class":504},"\"请输入整数\"",[147,152402,407],{"class":157},[147,152404,152405],{"class":149,"line":9990},[147,152406,2674],{"emptyLinePlaceholder":324},[147,152408,152409],{"class":149,"line":10015},[147,152410,2674],{"emptyLinePlaceholder":324},[147,152412,152413,152415,152418],{"class":149,"line":10038},[147,152414,32221],{"class":397},[147,152416,152417],{"class":2237}," input_float",[147,152419,152353],{"class":157},[147,152421,152422,152424,152426],{"class":149,"line":10062},[147,152423,2525],{"class":397},[147,152425,95564],{"class":448},[147,152427,4013],{"class":157},[147,152429,152430,152432],{"class":149,"line":10067},[147,152431,152366],{"class":397},[147,152433,4013],{"class":157},[147,152435,152436,152438,152440,152442,152444],{"class":149,"line":10072},[147,152437,16005],{"class":397},[147,152439,110067],{"class":448},[147,152441,401],{"class":157},[147,152443,54094],{"class":448},[147,152445,152381],{"class":157},[147,152447,152448,152450,152452],{"class":149,"line":10077},[147,152449,152386],{"class":397},[147,152451,152389],{"class":448},[147,152453,4013],{"class":157},[147,152455,152456,152458,152460,152463],{"class":149,"line":10086},[147,152457,34924],{"class":448},[147,152459,401],{"class":157},[147,152461,152462],{"class":504},"\"请输入数字\"",[147,152464,407],{"class":157},[147,152466,152467],{"class":149,"line":10091},[147,152468,2674],{"emptyLinePlaceholder":324},[147,152470,152471],{"class":149,"line":10097},[147,152472,2674],{"emptyLinePlaceholder":324},[147,152474,152475,152477,152480],{"class":149,"line":10118},[147,152476,32221],{"class":397},[147,152478,152479],{"class":2237}," add_student",[147,152481,152124],{"class":157},[147,152483,152484,152487,152489,152491,152493,152496],{"class":149,"line":10124},[147,152485,152486],{"class":157},"    student_id ",[147,152488,445],{"class":397},[147,152490,60878],{"class":448},[147,152492,401],{"class":157},[147,152494,152495],{"class":504},"\"请输入学号:\"",[147,152497,407],{"class":157},[147,152499,152500],{"class":149,"line":10138},[147,152501,2674],{"emptyLinePlaceholder":324},[147,152503,152504,152506],{"class":149,"line":10144},[147,152505,3375],{"class":397},[147,152507,152508],{"class":157}," find_student(students, student_id):\n",[147,152510,152511,152513,152515,152518],{"class":149,"line":10171},[147,152512,32725],{"class":448},[147,152514,401],{"class":157},[147,152516,152517],{"class":504},"\"学号已存在\"",[147,152519,407],{"class":157},[147,152521,152522],{"class":149,"line":10180},[147,152523,152524],{"class":397},"        return\n",[147,152526,152527],{"class":149,"line":10186},[147,152528,2674],{"emptyLinePlaceholder":324},[147,152530,152531,152534,152536,152538,152540,152543],{"class":149,"line":10194},[147,152532,152533],{"class":157},"    name ",[147,152535,445],{"class":397},[147,152537,60878],{"class":448},[147,152539,401],{"class":157},[147,152541,152542],{"class":504},"\"请输入姓名:\"",[147,152544,407],{"class":157},[147,152546,152547,152550,152552,152555,152558],{"class":149,"line":10199},[147,152548,152549],{"class":157},"    age ",[147,152551,445],{"class":397},[147,152553,152554],{"class":157}," input_int(",[147,152556,152557],{"class":504},"\"请输入年龄:\"",[147,152559,407],{"class":157},[147,152561,152562,152565,152567,152570,152573],{"class":149,"line":16877},[147,152563,152564],{"class":157},"    score ",[147,152566,445],{"class":397},[147,152568,152569],{"class":157}," input_float(",[147,152571,152572],{"class":504},"\"请输入成绩:\"",[147,152574,407],{"class":157},[147,152576,152577],{"class":149,"line":16883},[147,152578,2674],{"emptyLinePlaceholder":324},[147,152580,152581],{"class":149,"line":16906},[147,152582,152583],{"class":157},"    students.append({\n",[147,152585,152586,152589],{"class":149,"line":16912},[147,152587,152588],{"class":504},"        \"student_id\"",[147,152590,152591],{"class":157},": student_id,\n",[147,152593,152594,152597],{"class":149,"line":16935},[147,152595,152596],{"class":504},"        \"name\"",[147,152598,152599],{"class":157},": name,\n",[147,152601,152602,152605],{"class":149,"line":16949},[147,152603,152604],{"class":504},"        \"age\"",[147,152606,152607],{"class":157},": age,\n",[147,152609,152610,152613],{"class":149,"line":16969},[147,152611,152612],{"class":504},"        \"score\"",[147,152614,152615],{"class":157},": score,\n",[147,152617,152618],{"class":149,"line":16975},[147,152619,33735],{"class":157},[147,152621,152622],{"class":149,"line":16986},[147,152623,152624],{"class":157},"    save_students(students)\n",[147,152626,152627,152629,152631,152634],{"class":149,"line":17009},[147,152628,31573],{"class":448},[147,152630,401],{"class":157},[147,152632,152633],{"class":504},"\"添加成功\"",[147,152635,407],{"class":157},[147,152637,152638],{"class":149,"line":17031},[147,152639,2674],{"emptyLinePlaceholder":324},[147,152641,152642],{"class":149,"line":17036},[147,152643,2674],{"emptyLinePlaceholder":324},[147,152645,152646,152648,152651],{"class":149,"line":17042},[147,152647,32221],{"class":397},[147,152649,152650],{"class":2237}," delete_student",[147,152652,152124],{"class":157},[147,152654,152655,152657,152659,152661,152663,152666],{"class":149,"line":17056},[147,152656,152486],{"class":157},[147,152658,445],{"class":397},[147,152660,60878],{"class":448},[147,152662,401],{"class":157},[147,152664,152665],{"class":504},"\"请输入要删除的学号:\"",[147,152667,407],{"class":157},[147,152669,152670,152673,152675],{"class":149,"line":17069},[147,152671,152672],{"class":157},"    student ",[147,152674,445],{"class":397},[147,152676,152677],{"class":157}," find_student(students, student_id)\n",[147,152679,152680],{"class":149,"line":17074},[147,152681,2674],{"emptyLinePlaceholder":324},[147,152683,152684,152686,152688,152690,152692],{"class":149,"line":17088},[147,152685,3375],{"class":397},[147,152687,152300],{"class":157},[147,152689,39201],{"class":397},[147,152691,39207],{"class":448},[147,152693,4013],{"class":157},[147,152695,152696,152698,152700,152703],{"class":149,"line":17093},[147,152697,32725],{"class":448},[147,152699,401],{"class":157},[147,152701,152702],{"class":504},"\"学生不存在\"",[147,152704,407],{"class":157},[147,152706,152707],{"class":149,"line":17099},[147,152708,152524],{"class":397},[147,152710,152711],{"class":149,"line":17104},[147,152712,2674],{"emptyLinePlaceholder":324},[147,152714,152715],{"class":149,"line":17118},[147,152716,152717],{"class":157},"    students.remove(student)\n",[147,152719,152720],{"class":149,"line":17123},[147,152721,152624],{"class":157},[147,152723,152724,152726,152728,152731],{"class":149,"line":17128},[147,152725,31573],{"class":448},[147,152727,401],{"class":157},[147,152729,152730],{"class":504},"\"删除成功\"",[147,152732,407],{"class":157},[147,152734,152735],{"class":149,"line":17142},[147,152736,2674],{"emptyLinePlaceholder":324},[147,152738,152739],{"class":149,"line":17154},[147,152740,2674],{"emptyLinePlaceholder":324},[147,152742,152743,152745,152748],{"class":149,"line":17159},[147,152744,32221],{"class":397},[147,152746,152747],{"class":2237}," update_student",[147,152749,152124],{"class":157},[147,152751,152752,152754,152756,152758,152760,152763],{"class":149,"line":17172},[147,152753,152486],{"class":157},[147,152755,445],{"class":397},[147,152757,60878],{"class":448},[147,152759,401],{"class":157},[147,152761,152762],{"class":504},"\"请输入要修改的学号:\"",[147,152764,407],{"class":157},[147,152766,152767,152769,152771],{"class":149,"line":17177},[147,152768,152672],{"class":157},[147,152770,445],{"class":397},[147,152772,152677],{"class":157},[147,152774,152775],{"class":149,"line":17182},[147,152776,2674],{"emptyLinePlaceholder":324},[147,152778,152779,152781,152783,152785,152787],{"class":149,"line":17187},[147,152780,3375],{"class":397},[147,152782,152300],{"class":157},[147,152784,39201],{"class":397},[147,152786,39207],{"class":448},[147,152788,4013],{"class":157},[147,152790,152791,152793,152795,152797],{"class":149,"line":17200},[147,152792,32725],{"class":448},[147,152794,401],{"class":157},[147,152796,152702],{"class":504},[147,152798,407],{"class":157},[147,152800,152801],{"class":149,"line":17205},[147,152802,152524],{"class":397},[147,152804,152805],{"class":149,"line":32907},[147,152806,2674],{"emptyLinePlaceholder":324},[147,152808,152809,152811,152813,152815,152817,152820],{"class":149,"line":32913},[147,152810,152533],{"class":157},[147,152812,445],{"class":397},[147,152814,60878],{"class":448},[147,152816,401],{"class":157},[147,152818,152819],{"class":504},"\"请输入新姓名:\"",[147,152821,407],{"class":157},[147,152823,152824,152826,152828,152830,152833],{"class":149,"line":32919},[147,152825,152549],{"class":157},[147,152827,445],{"class":397},[147,152829,152554],{"class":157},[147,152831,152832],{"class":504},"\"请输入新年龄:\"",[147,152834,407],{"class":157},[147,152836,152837,152839,152841,152843,152846],{"class":149,"line":32925},[147,152838,152564],{"class":157},[147,152840,445],{"class":397},[147,152842,152569],{"class":157},[147,152844,152845],{"class":504},"\"请输入新成绩:\"",[147,152847,407],{"class":157},[147,152849,152850],{"class":149,"line":32931},[147,152851,2674],{"emptyLinePlaceholder":324},[147,152853,152854,152857,152859,152861,152863],{"class":149,"line":32942},[147,152855,152856],{"class":157},"    student[",[147,152858,62952],{"class":504},[147,152860,4717],{"class":157},[147,152862,445],{"class":397},[147,152864,149958],{"class":157},[147,152866,152867,152869,152871,152873,152875],{"class":149,"line":32948},[147,152868,152856],{"class":157},[147,152870,69397],{"class":504},[147,152872,4717],{"class":157},[147,152874,445],{"class":397},[147,152876,149970],{"class":157},[147,152878,152879,152881,152883,152885,152887],{"class":149,"line":32968},[147,152880,152856],{"class":157},[147,152882,151635],{"class":504},[147,152884,4717],{"class":157},[147,152886,445],{"class":397},[147,152888,1853],{"class":157},[147,152890,152891],{"class":149,"line":32974},[147,152892,2674],{"emptyLinePlaceholder":324},[147,152894,152895],{"class":149,"line":32985},[147,152896,152624],{"class":157},[147,152898,152899,152901,152903,152906],{"class":149,"line":32991},[147,152900,31573],{"class":448},[147,152902,401],{"class":157},[147,152904,152905],{"class":504},"\"修改成功\"",[147,152907,407],{"class":157},[147,152909,152910],{"class":149,"line":32997},[147,152911,2674],{"emptyLinePlaceholder":324},[147,152913,152914],{"class":149,"line":33003},[147,152915,2674],{"emptyLinePlaceholder":324},[147,152917,152918,152920,152923],{"class":149,"line":33009},[147,152919,32221],{"class":397},[147,152921,152922],{"class":2237}," query_student",[147,152924,152124],{"class":157},[147,152926,152927,152929,152931,152933,152935,152938],{"class":149,"line":33015},[147,152928,152486],{"class":157},[147,152930,445],{"class":397},[147,152932,60878],{"class":448},[147,152934,401],{"class":157},[147,152936,152937],{"class":504},"\"请输入要查询的学号:\"",[147,152939,407],{"class":157},[147,152941,152942,152944,152946],{"class":149,"line":33021},[147,152943,152672],{"class":157},[147,152945,445],{"class":397},[147,152947,152677],{"class":157},[147,152949,152950],{"class":149,"line":33027},[147,152951,2674],{"emptyLinePlaceholder":324},[147,152953,152954,152956,152958,152960,152962],{"class":149,"line":33047},[147,152955,3375],{"class":397},[147,152957,152300],{"class":157},[147,152959,39201],{"class":397},[147,152961,39207],{"class":448},[147,152963,4013],{"class":157},[147,152965,152966,152968,152970,152972],{"class":149,"line":33053},[147,152967,32725],{"class":448},[147,152969,401],{"class":157},[147,152971,152702],{"class":504},[147,152973,407],{"class":157},[147,152975,152976],{"class":149,"line":33069},[147,152977,152524],{"class":397},[147,152979,152980],{"class":149,"line":33075},[147,152981,2674],{"emptyLinePlaceholder":324},[147,152983,152984],{"class":149,"line":33089},[147,152985,152986],{"class":157},"    print_student(student)\n",[147,152988,152989],{"class":149,"line":33095},[147,152990,2674],{"emptyLinePlaceholder":324},[147,152992,152993],{"class":149,"line":33110},[147,152994,2674],{"emptyLinePlaceholder":324},[147,152996,152997,152999,153002],{"class":149,"line":33116},[147,152998,32221],{"class":397},[147,153000,153001],{"class":2237}," print_student",[147,153003,153004],{"class":157},"(student):\n",[147,153006,153007,153009],{"class":149,"line":33125},[147,153008,31573],{"class":448},[147,153010,151602],{"class":157},[147,153012,153013,153016,153018,153020,153023,153026,153028,153031],{"class":149,"line":33131},[147,153014,153015],{"class":397},"        f",[147,153017,650],{"class":504},[147,153019,1295],{"class":448},[147,153021,153022],{"class":157},"student[",[147,153024,153025],{"class":504},"'student_id'",[147,153027,1339],{"class":157},[147,153029,153030],{"class":448},"}\\t",[147,153032,25407],{"class":504},[147,153034,153035,153037,153039,153041,153043,153046,153048,153050],{"class":149,"line":33140},[147,153036,153015],{"class":397},[147,153038,650],{"class":504},[147,153040,1295],{"class":448},[147,153042,153022],{"class":157},[147,153044,153045],{"class":504},"'name'",[147,153047,1339],{"class":157},[147,153049,153030],{"class":448},[147,153051,25407],{"class":504},[147,153053,153054,153056,153058,153060,153062,153065,153067,153069],{"class":149,"line":33146},[147,153055,153015],{"class":397},[147,153057,650],{"class":504},[147,153059,1295],{"class":448},[147,153061,153022],{"class":157},[147,153063,153064],{"class":504},"'age'",[147,153066,1339],{"class":157},[147,153068,153030],{"class":448},[147,153070,25407],{"class":504},[147,153072,153073,153075,153077,153079,153081,153084,153086,153088],{"class":149,"line":33152},[147,153074,153015],{"class":397},[147,153076,650],{"class":504},[147,153078,1295],{"class":448},[147,153080,153022],{"class":157},[147,153082,153083],{"class":504},"'score'",[147,153085,1339],{"class":157},[147,153087,1345],{"class":448},[147,153089,25407],{"class":504},[147,153091,153092],{"class":149,"line":33161},[147,153093,153094],{"class":157},"    )\n",[147,153096,153097],{"class":149,"line":33167},[147,153098,2674],{"emptyLinePlaceholder":324},[147,153100,153101],{"class":149,"line":33178},[147,153102,2674],{"emptyLinePlaceholder":324},[147,153104,153105,153107,153110],{"class":149,"line":33184},[147,153106,32221],{"class":397},[147,153108,153109],{"class":2237}," show_all_students",[147,153111,152124],{"class":157},[147,153113,153114,153116,153118],{"class":149,"line":33203},[147,153115,3375],{"class":397},[147,153117,39204],{"class":397},[147,153119,152305],{"class":157},[147,153121,153122,153124,153126,153129],{"class":149,"line":33209},[147,153123,32725],{"class":448},[147,153125,401],{"class":157},[147,153127,153128],{"class":504},"\"暂无学生\"",[147,153130,407],{"class":157},[147,153132,153133],{"class":149,"line":33220},[147,153134,152524],{"class":397},[147,153136,153137],{"class":149,"line":33226},[147,153138,2674],{"emptyLinePlaceholder":324},[147,153140,153141,153143,153145,153148,153150,153153,153155,153158,153160,153163],{"class":149,"line":33246},[147,153142,31573],{"class":448},[147,153144,401],{"class":157},[147,153146,153147],{"class":504},"\"学号",[147,153149,1505],{"class":448},[147,153151,153152],{"class":504},"姓名",[147,153154,1505],{"class":448},[147,153156,153157],{"class":504},"年龄",[147,153159,1505],{"class":448},[147,153161,153162],{"class":504},"成绩\"",[147,153164,407],{"class":157},[147,153166,153167,153169,153171,153173],{"class":149,"line":33262},[147,153168,3475],{"class":397},[147,153170,152300],{"class":157},[147,153172,26317],{"class":397},[147,153174,152305],{"class":157},[147,153176,153177],{"class":149,"line":33268},[147,153178,153179],{"class":157},"        print_student(student)\n",[147,153181,153182],{"class":149,"line":33282},[147,153183,2674],{"emptyLinePlaceholder":324},[147,153185,153186],{"class":149,"line":33288},[147,153187,2674],{"emptyLinePlaceholder":324},[147,153189,153190,153192,153194],{"class":149,"line":33294},[147,153191,32221],{"class":397},[147,153193,2247],{"class":2237},[147,153195,32227],{"class":157},[147,153197,153198,153201,153203],{"class":149,"line":33305},[147,153199,153200],{"class":157},"    students ",[147,153202,445],{"class":397},[147,153204,153205],{"class":157}," load_students()\n",[147,153207,153208],{"class":149,"line":33311},[147,153209,2674],{"emptyLinePlaceholder":324},[147,153211,153212,153214,153216],{"class":149,"line":33317},[147,153213,2525],{"class":397},[147,153215,95564],{"class":448},[147,153217,4013],{"class":157},[147,153219,153220],{"class":149,"line":33327},[147,153221,153222],{"class":157},"        show_menu()\n",[147,153224,153225,153228,153230,153232,153234,153237],{"class":149,"line":33333},[147,153226,153227],{"class":157},"        choice ",[147,153229,445],{"class":397},[147,153231,60878],{"class":448},[147,153233,401],{"class":157},[147,153235,153236],{"class":504},"\"请输入操作:\"",[147,153238,407],{"class":157},[147,153240,153241],{"class":149,"line":33344},[147,153242,2674],{"emptyLinePlaceholder":324},[147,153244,153245,153247,153250,153252,153255],{"class":149,"line":33350},[147,153246,2771],{"class":397},[147,153248,153249],{"class":157}," choice ",[147,153251,3223],{"class":397},[147,153253,153254],{"class":504}," \"1\"",[147,153256,4013],{"class":157},[147,153258,153259],{"class":149,"line":33360},[147,153260,153261],{"class":157},"            add_student(students)\n",[147,153263,153264,153267,153269,153271,153274],{"class":149,"line":33365},[147,153265,153266],{"class":397},"        elif",[147,153268,153249],{"class":157},[147,153270,3223],{"class":397},[147,153272,153273],{"class":504}," \"2\"",[147,153275,4013],{"class":157},[147,153277,153278],{"class":149,"line":33371},[147,153279,153280],{"class":157},"            delete_student(students)\n",[147,153282,153283,153285,153287,153289,153292],{"class":149,"line":33420},[147,153284,153266],{"class":397},[147,153286,153249],{"class":157},[147,153288,3223],{"class":397},[147,153290,153291],{"class":504}," \"3\"",[147,153293,4013],{"class":157},[147,153295,153296],{"class":149,"line":33467},[147,153297,153298],{"class":157},"            update_student(students)\n",[147,153300,153301,153303,153305,153307,153310],{"class":149,"line":33472},[147,153302,153266],{"class":397},[147,153304,153249],{"class":157},[147,153306,3223],{"class":397},[147,153308,153309],{"class":504}," \"4\"",[147,153311,4013],{"class":157},[147,153313,153314],{"class":149,"line":33478},[147,153315,153316],{"class":157},"            query_student(students)\n",[147,153318,153319,153321,153323,153325,153328],{"class":149,"line":33497},[147,153320,153266],{"class":397},[147,153322,153249],{"class":157},[147,153324,3223],{"class":397},[147,153326,153327],{"class":504}," \"5\"",[147,153329,4013],{"class":157},[147,153331,153332],{"class":149,"line":33503},[147,153333,153334],{"class":157},"            show_all_students(students)\n",[147,153336,153337,153339,153341,153343,153346],{"class":149,"line":33523},[147,153338,153266],{"class":397},[147,153340,153249],{"class":157},[147,153342,3223],{"class":397},[147,153344,153345],{"class":504}," \"0\"",[147,153347,4013],{"class":157},[147,153349,153350,153352,153354,153357],{"class":149,"line":33529},[147,153351,34924],{"class":448},[147,153353,401],{"class":157},[147,153355,153356],{"class":504},"\"退出系统\"",[147,153358,407],{"class":157},[147,153360,153361],{"class":149,"line":33535},[147,153362,115368],{"class":397},[147,153364,153365,153367],{"class":149,"line":33545},[147,153366,2808],{"class":397},[147,153368,4013],{"class":157},[147,153370,153371,153373,153375,153378],{"class":149,"line":33550},[147,153372,34924],{"class":448},[147,153374,401],{"class":157},[147,153376,153377],{"class":504},"\"输入错误\"",[147,153379,407],{"class":157},[147,153381,153382],{"class":149,"line":33556},[147,153383,2674],{"emptyLinePlaceholder":324},[147,153385,153386],{"class":149,"line":33572},[147,153387,2674],{"emptyLinePlaceholder":324},[147,153389,153390,153392,153394,153396,153398],{"class":149,"line":33617},[147,153391,1805],{"class":397},[147,153393,31494],{"class":448},[147,153395,101831],{"class":397},[147,153397,101834],{"class":504},[147,153399,4013],{"class":157},[147,153401,153402],{"class":149,"line":33623},[147,153403,101841],{"class":157},[19,153405,153406],{},"这个项目串联了：",[350,153408,153409,153412,153415,153418,153421,153423],{},[353,153410,153411],{},"菜单循环。",[353,153413,153414],{},"函数封装。",[353,153416,153417],{},"列表字典。",[353,153419,153420],{},"JSON 读写。",[353,153422,151890],{},[353,153424,153425,28659],{},[51,153426,153427],{},"if __name__ == \"__main__\"",[14,153429,153431],{"id":153430},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,153433,153434],{},"可以进一步拆成两个类：",[350,153436,153437,153442],{},[353,153438,153439,153441],{},[51,153440,149731],{},"：表示单个学生。",[353,153443,153444,153446],{},[51,153445,151757],{},"：负责学生增删改查和文件保存。",[19,153448,153449],{},"示意代码：",[138,153451,153453],{"className":30652,"code":153452,"language":30654,"meta":143,"style":143},"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",[51,153454,153455,153465,153469,153473,153477,153485,153492,153498,153504,153510,153514,153522,153528,153538,153548,153558,153568,153572,153576,153582,153590,153598,153606,153614,153622,153630],{"__ignoreMap":143},[147,153456,153457,153459,153461,153463],{"class":149,"line":150},[147,153458,31011],{"class":397},[147,153460,151315],{"class":157},[147,153462,30666],{"class":397},[147,153464,151320],{"class":157},[147,153466,153467],{"class":149,"line":312},[147,153468,2674],{"emptyLinePlaceholder":324},[147,153470,153471],{"class":149,"line":1454},[147,153472,2674],{"emptyLinePlaceholder":324},[147,153474,153475],{"class":149,"line":1469},[147,153476,151333],{"class":2237},[147,153478,153479,153481,153483],{"class":149,"line":1475},[147,153480,14967],{"class":397},[147,153482,8172],{"class":2237},[147,153484,4013],{"class":157},[147,153486,153487,153490],{"class":149,"line":1489},[147,153488,153489],{"class":157},"    student_id: ",[147,153491,151349],{"class":448},[147,153493,153494,153496],{"class":149,"line":1495},[147,153495,151346],{"class":157},[147,153497,151349],{"class":448},[147,153499,153500,153502],{"class":149,"line":1586},[147,153501,151354],{"class":157},[147,153503,151357],{"class":448},[147,153505,153506,153508],{"class":149,"line":1592},[147,153507,151362],{"class":157},[147,153509,151365],{"class":448},[147,153511,153512],{"class":149,"line":1604},[147,153513,2674],{"emptyLinePlaceholder":324},[147,153515,153516,153518,153520],{"class":149,"line":1886},[147,153517,31075],{"class":397},[147,153519,151513],{"class":2237},[147,153521,31081],{"class":157},[147,153523,153524,153526],{"class":149,"line":1891},[147,153525,15025],{"class":397},[147,153527,15845],{"class":157},[147,153529,153530,153532,153534,153536],{"class":149,"line":1897},[147,153531,151526],{"class":504},[147,153533,51710],{"class":157},[147,153535,31097],{"class":448},[147,153537,151533],{"class":157},[147,153539,153540,153542,153544,153546],{"class":149,"line":1902},[147,153541,151538],{"class":504},[147,153543,51710],{"class":157},[147,153545,31097],{"class":448},[147,153547,151545],{"class":157},[147,153549,153550,153552,153554,153556],{"class":149,"line":1916},[147,153551,151550],{"class":504},[147,153553,51710],{"class":157},[147,153555,31097],{"class":448},[147,153557,151557],{"class":157},[147,153559,153560,153562,153564,153566],{"class":149,"line":1921},[147,153561,151562],{"class":504},[147,153563,51710],{"class":157},[147,153565,31097],{"class":448},[147,153567,151569],{"class":157},[147,153569,153570],{"class":149,"line":1927},[147,153571,2803],{"class":157},[147,153573,153574],{"class":149,"line":1948},[147,153575,2674],{"emptyLinePlaceholder":324},[147,153577,153578,153580],{"class":149,"line":1953},[147,153579,151177],{"class":2237},[147,153581,151180],{"class":448},[147,153583,153584,153586,153588],{"class":149,"line":1967},[147,153585,31075],{"class":397},[147,153587,151590],{"class":2237},[147,153589,151593],{"class":157},[147,153591,153592,153594,153596],{"class":149,"line":1972},[147,153593,15025],{"class":397},[147,153595,151197],{"class":448},[147,153597,151602],{"class":157},[147,153599,153600,153602,153604],{"class":149,"line":2001},[147,153601,151607],{"class":157},[147,153603,151610],{"class":504},[147,153605,88108],{"class":157},[147,153607,153608,153610,153612],{"class":149,"line":2006},[147,153609,151607],{"class":157},[147,153611,62952],{"class":504},[147,153613,88108],{"class":157},[147,153615,153616,153618,153620],{"class":149,"line":2023},[147,153617,151607],{"class":157},[147,153619,69397],{"class":504},[147,153621,88108],{"class":157},[147,153623,153624,153626,153628],{"class":149,"line":2028},[147,153625,151607],{"class":157},[147,153627,151635],{"class":504},[147,153629,88108],{"class":157},[147,153631,153632],{"class":149,"line":2033},[147,153633,38400],{"class":157},[19,153635,153636],{},"管理器示意：",[138,153638,153640],{"className":30652,"code":153639,"language":30654,"meta":143,"style":143},"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",[51,153641,153642,153651,153659,153670,153674,153684,153697,153708,153715,153721,153725,153734,153743,153749,153756],{"__ignoreMap":143},[147,153643,153644,153646,153649],{"class":149,"line":150},[147,153645,14967],{"class":397},[147,153647,153648],{"class":2237}," StudentManager",[147,153650,4013],{"class":157},[147,153652,153653,153655,153657],{"class":149,"line":312},[147,153654,31075],{"class":397},[147,153656,31078],{"class":448},[147,153658,31081],{"class":157},[147,153660,153661,153663,153666,153668],{"class":149,"line":1454},[147,153662,31119],{"class":448},[147,153664,153665],{"class":157},".students ",[147,153667,445],{"class":397},[147,153669,52111],{"class":157},[147,153671,153672],{"class":149,"line":1469},[147,153673,2674],{"emptyLinePlaceholder":324},[147,153675,153676,153678,153681],{"class":149,"line":1475},[147,153677,31075],{"class":397},[147,153679,153680],{"class":2237}," find_by_id",[147,153682,153683],{"class":157},"(self, student_id):\n",[147,153685,153686,153688,153690,153692,153694],{"class":149,"line":1489},[147,153687,3677],{"class":397},[147,153689,152300],{"class":157},[147,153691,26317],{"class":397},[147,153693,39147],{"class":448},[147,153695,153696],{"class":157},".students:\n",[147,153698,153699,153701,153704,153706],{"class":149,"line":1495},[147,153700,4916],{"class":397},[147,153702,153703],{"class":157}," student.student_id ",[147,153705,3223],{"class":397},[147,153707,152321],{"class":157},[147,153709,153710,153713],{"class":149,"line":1586},[147,153711,153712],{"class":397},"                return",[147,153714,152328],{"class":157},[147,153716,153717,153719],{"class":149,"line":1592},[147,153718,15025],{"class":397},[147,153720,152335],{"class":448},[147,153722,153723],{"class":149,"line":1604},[147,153724,2674],{"emptyLinePlaceholder":324},[147,153726,153727,153729,153731],{"class":149,"line":1886},[147,153728,31075],{"class":397},[147,153730,5483],{"class":2237},[147,153732,153733],{"class":157},"(self, student):\n",[147,153735,153736,153738,153740],{"class":149,"line":1891},[147,153737,2771],{"class":397},[147,153739,39147],{"class":448},[147,153741,153742],{"class":157},".find_by_id(student.student_id):\n",[147,153744,153745,153747],{"class":149,"line":1897},[147,153746,16005],{"class":397},[147,153748,126077],{"class":448},[147,153750,153751,153753],{"class":149,"line":1902},[147,153752,31119],{"class":448},[147,153754,153755],{"class":157},".students.append(student)\n",[147,153757,153758,153760],{"class":149,"line":1916},[147,153759,15025],{"class":397},[147,153761,153762],{"class":448}," True\n",[19,153764,153765],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,153767,153769],{"id":153768},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[367,153771,153773],{"id":153772},"_1251-数据结构","12.5.1 数据结构",[138,153775,153777],{"className":30652,"code":153776,"language":30654,"meta":143,"style":143},"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",[51,153778,153779,153787,153818,153848,153877,153906],{"__ignoreMap":143},[147,153780,153781,153783,153785],{"class":149,"line":150},[147,153782,148628],{"class":157},[147,153784,445],{"class":397},[147,153786,55720],{"class":157},[147,153788,153789,153791,153793,153795,153797,153799,153802,153804,153807,153809,153811,153813,153816],{"class":149,"line":312},[147,153790,148548],{"class":157},[147,153792,148160],{"class":504},[147,153794,51710],{"class":157},[147,153796,148771],{"class":504},[147,153798,12709],{"class":157},[147,153800,153801],{"class":504},"\"category\"",[147,153803,51710],{"class":157},[147,153805,153806],{"class":504},"\"手机\"",[147,153808,12709],{"class":157},[147,153810,84356],{"class":504},[147,153812,51710],{"class":157},[147,153814,153815],{"class":448},"12000",[147,153817,5204],{"class":157},[147,153819,153820,153822,153824,153826,153828,153830,153832,153834,153837,153839,153841,153843,153846],{"class":149,"line":1454},[147,153821,148548],{"class":157},[147,153823,148160],{"class":504},[147,153825,51710],{"class":157},[147,153827,148771],{"class":504},[147,153829,12709],{"class":157},[147,153831,153801],{"class":504},[147,153833,51710],{"class":157},[147,153835,153836],{"class":504},"\"电脑\"",[147,153838,12709],{"class":157},[147,153840,84356],{"class":504},[147,153842,51710],{"class":157},[147,153844,153845],{"class":448},"18000",[147,153847,5204],{"class":157},[147,153849,153850,153852,153854,153856,153858,153860,153862,153864,153866,153868,153870,153872,153875],{"class":149,"line":1469},[147,153851,148548],{"class":157},[147,153853,148160],{"class":504},[147,153855,51710],{"class":157},[147,153857,148792],{"class":504},[147,153859,12709],{"class":157},[147,153861,153801],{"class":504},[147,153863,51710],{"class":157},[147,153865,153806],{"class":504},[147,153867,12709],{"class":157},[147,153869,84356],{"class":504},[147,153871,51710],{"class":157},[147,153873,153874],{"class":448},"15000",[147,153876,5204],{"class":157},[147,153878,153879,153881,153883,153885,153887,153889,153891,153893,153895,153897,153899,153901,153904],{"class":149,"line":1475},[147,153880,148548],{"class":157},[147,153882,148160],{"class":504},[147,153884,51710],{"class":157},[147,153886,148792],{"class":504},[147,153888,12709],{"class":157},[147,153890,153801],{"class":504},[147,153892,51710],{"class":157},[147,153894,153836],{"class":504},[147,153896,12709],{"class":157},[147,153898,84356],{"class":504},[147,153900,51710],{"class":157},[147,153902,153903],{"class":448},"16000",[147,153905,5204],{"class":157},[147,153907,153908],{"class":149,"line":1489},[147,153909,33520],{"class":157},[367,153911,153913],{"id":153912},"_1252-按日期统计","12.5.2 按日期统计",[138,153915,153917],{"className":30652,"code":153916,"language":30654,"meta":143,"style":143},"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",[51,153918,153919,153928,153932,153943,153957,153970,153989,153993],{"__ignoreMap":143},[147,153920,153921,153924,153926],{"class":149,"line":150},[147,153922,153923],{"class":157},"daily_total ",[147,153925,445],{"class":397},[147,153927,88140],{"class":157},[147,153929,153930],{"class":149,"line":312},[147,153931,2674],{"emptyLinePlaceholder":324},[147,153933,153934,153936,153938,153940],{"class":149,"line":1454},[147,153935,3299],{"class":397},[147,153937,148372],{"class":157},[147,153939,26317],{"class":397},[147,153941,153942],{"class":157}," sales:\n",[147,153944,153945,153948,153950,153953,153955],{"class":149,"line":1469},[147,153946,153947],{"class":157},"    date ",[147,153949,445],{"class":397},[147,153951,153952],{"class":157}," item[",[147,153954,148160],{"class":504},[147,153956,33520],{"class":157},[147,153958,153959,153962,153964,153966,153968],{"class":149,"line":1475},[147,153960,153961],{"class":157},"    amount ",[147,153963,445],{"class":397},[147,153965,153952],{"class":157},[147,153967,84356],{"class":504},[147,153969,33520],{"class":157},[147,153971,153972,153975,153977,153980,153982,153984,153986],{"class":149,"line":1489},[147,153973,153974],{"class":157},"    daily_total[date] ",[147,153976,445],{"class":397},[147,153978,153979],{"class":157}," daily_total.get(date, ",[147,153981,590],{"class":448},[147,153983,13988],{"class":157},[147,153985,880],{"class":397},[147,153987,153988],{"class":157}," amount\n",[147,153990,153991],{"class":149,"line":1495},[147,153992,2674],{"emptyLinePlaceholder":324},[147,153994,153995,153997],{"class":149,"line":1586},[147,153996,30689],{"class":448},[147,153998,153999],{"class":157},"(daily_total)\n",[367,154001,154003],{"id":154002},"_1253-按类别统计","12.5.3 按类别统计",[138,154005,154007],{"className":30652,"code":154006,"language":30654,"meta":143,"style":143},"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",[51,154008,154009,154018,154022,154032,154045,154057,154075,154079],{"__ignoreMap":143},[147,154010,154011,154014,154016],{"class":149,"line":150},[147,154012,154013],{"class":157},"category_total ",[147,154015,445],{"class":397},[147,154017,88140],{"class":157},[147,154019,154020],{"class":149,"line":312},[147,154021,2674],{"emptyLinePlaceholder":324},[147,154023,154024,154026,154028,154030],{"class":149,"line":1454},[147,154025,3299],{"class":397},[147,154027,148372],{"class":157},[147,154029,26317],{"class":397},[147,154031,153942],{"class":157},[147,154033,154034,154037,154039,154041,154043],{"class":149,"line":1469},[147,154035,154036],{"class":157},"    category ",[147,154038,445],{"class":397},[147,154040,153952],{"class":157},[147,154042,153801],{"class":504},[147,154044,33520],{"class":157},[147,154046,154047,154049,154051,154053,154055],{"class":149,"line":1475},[147,154048,153961],{"class":157},[147,154050,445],{"class":397},[147,154052,153952],{"class":157},[147,154054,84356],{"class":504},[147,154056,33520],{"class":157},[147,154058,154059,154062,154064,154067,154069,154071,154073],{"class":149,"line":1489},[147,154060,154061],{"class":157},"    category_total[category] ",[147,154063,445],{"class":397},[147,154065,154066],{"class":157}," category_total.get(category, ",[147,154068,590],{"class":448},[147,154070,13988],{"class":157},[147,154072,880],{"class":397},[147,154074,153988],{"class":157},[147,154076,154077],{"class":149,"line":1495},[147,154078,2674],{"emptyLinePlaceholder":324},[147,154080,154081,154083],{"class":149,"line":1586},[147,154082,30689],{"class":448},[147,154084,154085],{"class":157},"(category_total)\n",[367,154087,154089],{"id":154088},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[138,154091,154093],{"className":30652,"code":154092,"language":30654,"meta":143,"style":143},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[51,154094,154095,154120],{"__ignoreMap":143},[147,154096,154097,154100,154102,154104,154107,154110,154113,154116,154118],{"class":149,"line":150},[147,154098,154099],{"class":157},"top_date, top_amount ",[147,154101,445],{"class":397},[147,154103,6225],{"class":448},[147,154105,154106],{"class":157},"(daily_total.items(), ",[147,154108,154109],{"class":5490},"key",[147,154111,154112],{"class":397},"=lambda",[147,154114,154115],{"class":157}," item: item[",[147,154117,616],{"class":448},[147,154119,4931],{"class":157},[147,154121,154122,154124],{"class":149,"line":312},[147,154123,30689],{"class":448},[147,154125,154126],{"class":157},"(top_date, top_amount)\n",[14,154128,154130],{"id":154129},"_126-绘制柱状图","12.6 绘制柱状图",[138,154132,154134],{"className":30652,"code":154133,"language":30654,"meta":143,"style":143},"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",[51,154135,154136,154150,154161,154165,154173,154185,154197,154208,154212,154216,154226,154237,154251,154256,154273,154290,154306,154310],{"__ignoreMap":143},[147,154137,154138,154140,154142,154144,154146,154148],{"class":149,"line":150},[147,154139,31011],{"class":397},[147,154141,147542],{"class":157},[147,154143,30666],{"class":397},[147,154145,147547],{"class":157},[147,154147,31657],{"class":397},[147,154149,147552],{"class":157},[147,154151,154152,154154,154156,154158],{"class":149,"line":312},[147,154153,31011],{"class":397},[147,154155,147401],{"class":157},[147,154157,30666],{"class":397},[147,154159,154160],{"class":157}," Bar\n",[147,154162,154163],{"class":149,"line":1454},[147,154164,2674],{"emptyLinePlaceholder":324},[147,154166,154167,154169,154171],{"class":149,"line":1469},[147,154168,154013],{"class":157},[147,154170,445],{"class":397},[147,154172,15845],{"class":157},[147,154174,154175,154178,154180,154183],{"class":149,"line":1475},[147,154176,154177],{"class":504},"    \"手机\"",[147,154179,51710],{"class":157},[147,154181,154182],{"class":448},"27000",[147,154184,31740],{"class":157},[147,154186,154187,154190,154192,154195],{"class":149,"line":1489},[147,154188,154189],{"class":504},"    \"电脑\"",[147,154191,51710],{"class":157},[147,154193,154194],{"class":448},"34000",[147,154196,31740],{"class":157},[147,154198,154199,154202,154204,154206],{"class":149,"line":1495},[147,154200,154201],{"class":504},"    \"耳机\"",[147,154203,51710],{"class":157},[147,154205,124669],{"class":448},[147,154207,31740],{"class":157},[147,154209,154210],{"class":149,"line":1586},[147,154211,1839],{"class":157},[147,154213,154214],{"class":149,"line":1592},[147,154215,2674],{"emptyLinePlaceholder":324},[147,154217,154218,154221,154223],{"class":149,"line":1604},[147,154219,154220],{"class":157},"bar ",[147,154222,445],{"class":397},[147,154224,154225],{"class":157}," Bar()\n",[147,154227,154228,154231,154234],{"class":149,"line":1886},[147,154229,154230],{"class":157},"bar.add_xaxis(",[147,154232,154233],{"class":448},"list",[147,154235,154236],{"class":157},"(category_total.keys()))\n",[147,154238,154239,154242,154244,154246,154248],{"class":149,"line":1891},[147,154240,154241],{"class":157},"bar.add_yaxis(",[147,154243,147458],{"class":504},[147,154245,12709],{"class":157},[147,154247,154233],{"class":448},[147,154249,154250],{"class":157},"(category_total.values()))\n",[147,154252,154253],{"class":149,"line":1897},[147,154254,154255],{"class":157},"bar.set_global_opts(\n",[147,154257,154258,154260,154262,154264,154266,154268,154271],{"class":149,"line":1902},[147,154259,147636],{"class":5490},[147,154261,445],{"class":397},[147,154263,147641],{"class":157},[147,154265,51680],{"class":5490},[147,154267,445],{"class":397},[147,154269,154270],{"class":504},"\"品类销售额\"",[147,154272,38321],{"class":157},[147,154274,154275,154277,154279,154281,154283,154285,154288],{"class":149,"line":1916},[147,154276,147655],{"class":5490},[147,154278,445],{"class":397},[147,154280,147660],{"class":157},[147,154282,80082],{"class":5490},[147,154284,445],{"class":397},[147,154286,154287],{"class":504},"\"品类\"",[147,154289,38321],{"class":157},[147,154291,154292,154294,154296,154298,154300,154302,154304],{"class":149,"line":1921},[147,154293,147674],{"class":5490},[147,154295,445],{"class":397},[147,154297,147660],{"class":157},[147,154299,80082],{"class":5490},[147,154301,445],{"class":397},[147,154303,147458],{"class":504},[147,154305,38321],{"class":157},[147,154307,154308],{"class":149,"line":1927},[147,154309,407],{"class":157},[147,154311,154312,154315,154318],{"class":149,"line":1948},[147,154313,154314],{"class":157},"bar.render(",[147,154316,154317],{"class":504},"\"category_sales.html\"",[147,154319,407],{"class":157},[14,154321,154323],{"id":154322},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,154325,154326],{},"时间线适合展示不同日期、月份、年份的数据变化。",[138,154328,154330],{"className":30652,"code":154329,"language":30654,"meta":143,"style":143},"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",[51,154331,154332,154346,154357,154361,154369,154393,154416,154441,154445,154449,154459,154463,154474,154483,154493,154507,154538,154543,154547],{"__ignoreMap":143},[147,154333,154334,154336,154338,154340,154342,154344],{"class":149,"line":150},[147,154335,31011],{"class":397},[147,154337,147542],{"class":157},[147,154339,30666],{"class":397},[147,154341,147547],{"class":157},[147,154343,31657],{"class":397},[147,154345,147552],{"class":157},[147,154347,154348,154350,154352,154354],{"class":149,"line":312},[147,154349,31011],{"class":397},[147,154351,147401],{"class":157},[147,154353,30666],{"class":397},[147,154355,154356],{"class":157}," Bar, Timeline\n",[147,154358,154359],{"class":149,"line":1454},[147,154360,2674],{"emptyLinePlaceholder":324},[147,154362,154363,154365,154367],{"class":149,"line":1469},[147,154364,101930],{"class":157},[147,154366,445],{"class":397},[147,154368,15845],{"class":157},[147,154370,154371,154374,154377,154379,154381,154383,154385,154387,154389,154391],{"class":149,"line":1475},[147,154372,154373],{"class":504},"    \"2024-10-01\"",[147,154375,154376],{"class":157},": {",[147,154378,153806],{"class":504},[147,154380,51710],{"class":157},[147,154382,153815],{"class":448},[147,154384,12709],{"class":157},[147,154386,153836],{"class":504},[147,154388,51710],{"class":157},[147,154390,153845],{"class":448},[147,154392,5204],{"class":157},[147,154394,154395,154398,154400,154402,154404,154406,154408,154410,154412,154414],{"class":149,"line":1489},[147,154396,154397],{"class":504},"    \"2024-10-02\"",[147,154399,154376],{"class":157},[147,154401,153806],{"class":504},[147,154403,51710],{"class":157},[147,154405,153874],{"class":448},[147,154407,12709],{"class":157},[147,154409,153836],{"class":504},[147,154411,51710],{"class":157},[147,154413,153903],{"class":448},[147,154415,5204],{"class":157},[147,154417,154418,154421,154423,154425,154427,154430,154432,154434,154436,154439],{"class":149,"line":1495},[147,154419,154420],{"class":504},"    \"2024-10-03\"",[147,154422,154376],{"class":157},[147,154424,153806],{"class":504},[147,154426,51710],{"class":157},[147,154428,154429],{"class":448},"17000",[147,154431,12709],{"class":157},[147,154433,153836],{"class":504},[147,154435,51710],{"class":157},[147,154437,154438],{"class":448},"19000",[147,154440,5204],{"class":157},[147,154442,154443],{"class":149,"line":1586},[147,154444,1839],{"class":157},[147,154446,154447],{"class":149,"line":1592},[147,154448,2674],{"emptyLinePlaceholder":324},[147,154450,154451,154454,154456],{"class":149,"line":1604},[147,154452,154453],{"class":157},"timeline ",[147,154455,445],{"class":397},[147,154457,154458],{"class":157}," Timeline()\n",[147,154460,154461],{"class":149,"line":1886},[147,154462,2674],{"emptyLinePlaceholder":324},[147,154464,154465,154467,154470,154472],{"class":149,"line":1891},[147,154466,3299],{"class":397},[147,154468,154469],{"class":157}," date, category_data ",[147,154471,26317],{"class":397},[147,154473,149311],{"class":157},[147,154475,154476,154479,154481],{"class":149,"line":1897},[147,154477,154478],{"class":157},"    bar ",[147,154480,445],{"class":397},[147,154482,154225],{"class":157},[147,154484,154485,154488,154490],{"class":149,"line":1902},[147,154486,154487],{"class":157},"    bar.add_xaxis(",[147,154489,154233],{"class":448},[147,154491,154492],{"class":157},"(category_data.keys()))\n",[147,154494,154495,154498,154500,154502,154504],{"class":149,"line":1916},[147,154496,154497],{"class":157},"    bar.add_yaxis(",[147,154499,147458],{"class":504},[147,154501,12709],{"class":157},[147,154503,154233],{"class":448},[147,154505,154506],{"class":157},"(category_data.values()))\n",[147,154508,154509,154512,154515,154517,154519,154521,154523,154525,154527,154529,154531,154533,154536],{"class":149,"line":1921},[147,154510,154511],{"class":157},"    bar.set_global_opts(",[147,154513,154514],{"class":5490},"title_opts",[147,154516,445],{"class":397},[147,154518,147641],{"class":157},[147,154520,51680],{"class":5490},[147,154522,445],{"class":397},[147,154524,452],{"class":397},[147,154526,650],{"class":504},[147,154528,1295],{"class":448},[147,154530,74199],{"class":157},[147,154532,1345],{"class":448},[147,154534,154535],{"class":504},"销售额\"",[147,154537,30771],{"class":157},[147,154539,154540],{"class":149,"line":1927},[147,154541,154542],{"class":157},"    timeline.add(bar, date)\n",[147,154544,154545],{"class":149,"line":1948},[147,154546,2674],{"emptyLinePlaceholder":324},[147,154548,154549,154552,154555],{"class":149,"line":1953},[147,154550,154551],{"class":157},"timeline.render(",[147,154553,154554],{"class":504},"\"timeline_sales.html\"",[147,154556,407],{"class":157},[14,154558,154560],{"id":154559},"_128-绘制地图","12.8 绘制地图",[19,154562,154563],{},"地图适合展示地区数据。",[138,154565,154567],{"className":30652,"code":154566,"language":30654,"meta":143,"style":143},"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",[51,154568,154569,154583,154594,154598,154606,154619,154631,154644,154657,154661,154665,154675,154690,154695,154712,154731,154735],{"__ignoreMap":143},[147,154570,154571,154573,154575,154577,154579,154581],{"class":149,"line":150},[147,154572,31011],{"class":397},[147,154574,147542],{"class":157},[147,154576,30666],{"class":397},[147,154578,147547],{"class":157},[147,154580,31657],{"class":397},[147,154582,147552],{"class":157},[147,154584,154585,154587,154589,154591],{"class":149,"line":312},[147,154586,31011],{"class":397},[147,154588,147401],{"class":157},[147,154590,30666],{"class":397},[147,154592,154593],{"class":157}," Map\n",[147,154595,154596],{"class":149,"line":1454},[147,154597,2674],{"emptyLinePlaceholder":324},[147,154599,154600,154602,154604],{"class":149,"line":1469},[147,154601,101930],{"class":157},[147,154603,445],{"class":397},[147,154605,55720],{"class":157},[147,154607,154608,154611,154613,154615,154617],{"class":149,"line":1475},[147,154609,154610],{"class":157},"    (",[147,154612,69542],{"class":504},[147,154614,12709],{"class":157},[147,154616,1216],{"class":448},[147,154618,38321],{"class":157},[147,154620,154621,154623,154625,154627,154629],{"class":149,"line":1489},[147,154622,154610],{"class":157},[147,154624,69562],{"class":504},[147,154626,12709],{"class":157},[147,154628,147475],{"class":448},[147,154630,38321],{"class":157},[147,154632,154633,154635,154638,154640,154642],{"class":149,"line":1495},[147,154634,154610],{"class":157},[147,154636,154637],{"class":504},"\"广东\"",[147,154639,12709],{"class":157},[147,154641,1996],{"class":448},[147,154643,38321],{"class":157},[147,154645,154646,154648,154651,154653,154655],{"class":149,"line":1586},[147,154647,154610],{"class":157},[147,154649,154650],{"class":504},"\"浙江\"",[147,154652,12709],{"class":157},[147,154654,147480],{"class":448},[147,154656,38321],{"class":157},[147,154658,154659],{"class":149,"line":1592},[147,154660,33520],{"class":157},[147,154662,154663],{"class":149,"line":1604},[147,154664,2674],{"emptyLinePlaceholder":324},[147,154666,154667,154670,154672],{"class":149,"line":1886},[147,154668,154669],{"class":157},"map_chart ",[147,154671,445],{"class":397},[147,154673,154674],{"class":157}," Map()\n",[147,154676,154677,154680,154682,154685,154688],{"class":149,"line":1891},[147,154678,154679],{"class":157},"map_chart.add(",[147,154681,147458],{"class":504},[147,154683,154684],{"class":157},", data, ",[147,154686,154687],{"class":504},"\"china\"",[147,154689,407],{"class":157},[147,154691,154692],{"class":149,"line":1897},[147,154693,154694],{"class":157},"map_chart.set_global_opts(\n",[147,154696,154697,154699,154701,154703,154705,154707,154710],{"class":149,"line":1902},[147,154698,147636],{"class":5490},[147,154700,445],{"class":397},[147,154702,147641],{"class":157},[147,154704,51680],{"class":5490},[147,154706,445],{"class":397},[147,154708,154709],{"class":504},"\"地区销售额\"",[147,154711,38321],{"class":157},[147,154713,154714,154717,154719,154722,154725,154727,154729],{"class":149,"line":1916},[147,154715,154716],{"class":5490},"    visualmap_opts",[147,154718,445],{"class":397},[147,154720,154721],{"class":157},"opts.VisualMapOpts(",[147,154723,154724],{"class":5490},"max_",[147,154726,445],{"class":397},[147,154728,1996],{"class":448},[147,154730,38321],{"class":157},[147,154732,154733],{"class":149,"line":1921},[147,154734,407],{"class":157},[147,154736,154737,154740,154743],{"class":149,"line":1927},[147,154738,154739],{"class":157},"map_chart.render(",[147,154741,154742],{"class":504},"\"map_sales.html\"",[147,154744,407],{"class":157},[19,154746,154747],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,154749,154751],{"id":154750},"_129-项目拆分建议","12.9 项目拆分建议",[19,154753,154754],{},"当代码超过一个文件时，可以这样组织：",[138,154756,154759],{"className":154757,"code":154758,"language":5461,"meta":143},[5459],"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",[51,154760,154758],{"__ignoreMap":143},[19,154762,154763],{},"职责：",[350,154765,154766,154772,154778,154784],{},[353,154767,154768,154771],{},[51,154769,154770],{},"main.py","：程序入口。",[353,154773,154774,154777],{},[51,154775,154776],{},"file_utils.py","：读写 JSON。",[353,154779,154780,154783],{},[51,154781,154782],{},"sales_service.py","：统计销售数据。",[353,154785,154786,154789],{},[51,154787,154788],{},"chart_builder.py","：生成图表。",[14,154791,154793],{"id":154792},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,154795,154796],{},"语法基础：",[350,154798,154799,154802,154805,154808],{},[353,154800,154801],{},"会写变量、注释、输入输出。",[353,154803,154804],{},"会使用 int、float、str、bool。",[353,154806,154807],{},"会做类型转换。",[353,154809,154810],{},"会使用 f-string 格式化输出。",[19,154812,154813],{},"流程控制：",[350,154815,154816,154822,154828,154836],{},[353,154817,154818,154819,28659],{},"会写 ",[51,154820,154821],{},"if elif else",[353,154823,154818,154824,101290,154826,28659],{},[51,154825,108933],{},[51,154827,3299],{},[353,154829,154830,154831,101290,154833,28659],{},"理解 ",[51,154832,2327],{},[51,154834,154835],{},"continue",[353,154837,154838],{},"能写嵌套循环。",[19,154840,154841],{},"函数：",[350,154843,154844,154847,154850,154853],{},[353,154845,154846],{},"会定义和调用函数。",[353,154848,154849],{},"理解参数和返回值。",[353,154851,154852],{},"知道局部变量和全局变量。",[353,154854,154855],{},"会使用默认参数、关键字参数、不定长参数。",[19,154857,154858],{},"容器：",[350,154860,154861,154864,154867,154870,154873],{},[353,154862,154863],{},"会使用列表增删改查。",[353,154865,154866],{},"会遍历列表、字典。",[353,154868,154869],{},"会使用切片。",[353,154871,154872],{},"会用集合去重。",[353,154874,154875],{},"会处理列表嵌套字典。",[19,154877,154878],{},"文件和模块：",[350,154880,154881,154884,154887,154890,154893],{},[353,154882,154883],{},"会读写文本文件。",[353,154885,154886],{},"会读写 JSON。",[353,154888,154889],{},"会捕获常见异常。",[353,154891,154892],{},"会导入模块和第三方包。",[353,154894,154895],{},"会创建简单包结构。",[19,154897,154898],{},"项目能力：",[350,154900,154901,154904,154907,154910,154913],{},[353,154902,154903],{},"能把代码拆成函数。",[353,154905,154906],{},"能把数据保存到文件。",[353,154908,154909],{},"能处理用户输入错误。",[353,154911,154912],{},"能写一个完整菜单程序。",[353,154914,154915],{},"能用 pyecharts 生成图表。",[14,154917,154919],{"id":154918},"_1211-推荐练习顺序","12.11 推荐练习顺序",[350,154921,154922,154925,154928,154931,154934,154937,154940,154943],{},[353,154923,154924],{},"猜数字游戏。",[353,154926,154927],{},"ATM 菜单程序。",[353,154929,154930],{},"学生成绩统计。",[353,154932,154933],{},"学生管理系统函数版。",[353,154935,154936],{},"学生管理系统文件持久化版。",[353,154938,154939],{},"学生管理系统面向对象版。",[353,154941,154942],{},"销售数据统计。",[353,154944,154945],{},"销售数据可视化。",[14,154947,154949],{"id":154948},"_1212-常见学习误区","12.12 常见学习误区",[350,154951,154952,154955,154958,154961,154964,154967,154970],{},[353,154953,154954],{},"只看视频不敲代码。",[353,154956,154957],{},"一报错就复制错误去搜，不先读报错位置。",[353,154959,154960],{},"变量名随便写，后续自己看不懂。",[353,154962,154963],{},"所有代码都写在一个文件一个函数里。",[353,154965,154966],{},"不保存练习代码，复习时没有材料。",[353,154968,154969],{},"还没掌握列表字典就急着学框架。",[353,154971,154972],{},"不会读官方文档，只依赖教程。",[14,154974,154976],{"id":154975},"_1213-如何读报错","12.13 如何读报错",[19,154978,154979],{},"报错通常从下往上看最后几行。",[19,154981,15408],{},[138,154983,154986],{"className":154984,"code":154985,"language":5461,"meta":143},[5459],"ValueError: invalid literal for int() with base 10: 'abc'\n",[51,154987,154985],{"__ignoreMap":143},[19,154989,24873],{},[350,154991,154992,154998,155008],{},[353,154993,154994,154995,28659],{},"异常类型是 ",[51,154996,154997],{},"ValueError",[353,154999,107615,155000,155003,155004,155007],{},[51,155001,155002],{},"int()"," 无法把 ",[51,155005,155006],{},"'abc'"," 转成整数。",[353,155009,155010],{},"应该检查输入内容或增加异常处理。",[19,155012,155013],{},"再看文件名和行号：",[138,155015,155018],{"className":155016,"code":155017,"language":5461,"meta":143},[5459],"File \"main.py\", line 10, in \u003Cmodule>\n",[51,155019,155017],{"__ignoreMap":143},[19,155021,155022,155023,155025],{},"表示错误发生在 ",[51,155024,154770],{}," 第 10 行。",[14,155027,155029],{"id":155028},"_1214-后续学习方向","12.14 后续学习方向",[19,155031,155032],{},"Python 基础完成后，可以按兴趣选择方向：",[350,155034,155035,155047,155056,155068,155079,155088,155098],{},[353,155036,155037,155038,611,155041,611,155044,28659],{},"自动化办公：",[51,155039,155040],{},"openpyxl",[51,155042,155043],{},"python-docx",[51,155045,155046],{},"pdfplumber",[353,155048,155049,155050,611,155052,611,155054,28659],{},"数据分析：",[51,155051,100898],{},[51,155053,146348],{},[51,155055,146356],{},[353,155057,155058,155059,611,155062,611,155065,28659],{},"Web 后端：",[51,155060,155061],{},"Flask",[51,155063,155064],{},"FastAPI",[51,155066,155067],{},"Django",[353,155069,155070,155071,611,155073,611,155076,28659],{},"爬虫：",[51,155072,146333],{},[51,155074,155075],{},"BeautifulSoup",[51,155077,155078],{},"Scrapy",[353,155080,155081,155082,611,155084,155087],{},"测试开发：",[51,155083,146380],{},[51,155085,155086],{},"selenium","、接口测试。",[353,155089,155090,155091,611,155093,611,155095,28659],{},"人工智能：",[51,155092,100898],{},[51,155094,146348],{},[51,155096,155097],{},"pytorch",[353,155099,155100,155101,611,155103,611,155106,28659],{},"运维脚本：",[51,155102,145949],{},[51,155104,155105],{},"subprocess",[51,155107,155108],{},"paramiko",[19,155110,155111],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,155113,155115],{"id":155114},"_1215-结课练习","12.15 结课练习",[350,155117,155118,155121,155124,155127,155130,155133,155136,155139],{},[353,155119,155120],{},"完成函数版学生管理系统。",[353,155122,155123],{},"给学生管理系统增加 JSON 持久化。",[353,155125,155126],{},"给学生管理系统增加异常处理。",[353,155128,155129],{},"把学生管理系统改成面向对象版。",[353,155131,155132],{},"使用 pyecharts 绘制学生成绩柱状图。",[353,155134,155135],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[353,155137,155138],{},"按品类统计销售额并绘制柱状图。",[353,155140,155141],{},"写一份自己的 Python 学习路线图。",[308,155143,155144],{},"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":143,"searchDepth":312,"depth":312,"links":155146},[155147,155148,155151,155152,155153,155159,155160,155161,155162,155163,155164,155165,155166,155167,155168],{"id":151863,"depth":312,"text":151864},{"id":151913,"depth":312,"text":151914,"children":155149},[155150],{"id":151917,"depth":1454,"text":151918},{"id":151956,"depth":312,"text":151957},{"id":153430,"depth":312,"text":153431},{"id":153768,"depth":312,"text":153769,"children":155154},[155155,155156,155157,155158],{"id":153772,"depth":1454,"text":153773},{"id":153912,"depth":1454,"text":153913},{"id":154002,"depth":1454,"text":154003},{"id":154088,"depth":1454,"text":154089},{"id":154129,"depth":312,"text":154130},{"id":154322,"depth":312,"text":154323},{"id":154559,"depth":312,"text":154560},{"id":154750,"depth":312,"text":154751},{"id":154792,"depth":312,"text":154793},{"id":154918,"depth":312,"text":154919},{"id":154948,"depth":312,"text":154949},{"id":154975,"depth":312,"text":154976},{"id":155028,"depth":312,"text":155029},{"id":155114,"depth":312,"text":155115},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151855,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155175,"title":155176,"body":155177,"description":321,"extension":322,"meta":157646,"navigation":324,"path":157647,"seo":157648,"stem":157649,"__hash__":157650},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155178,"toc":157621},[155179,155182,155186,155189,155192,155212,155215,155238,155241,155244,155266,155269,155291,155295,155298,155338,155341,155462,155466,155469,155509,155512,155536,155539,155543,155546,155560,155593,155596,155631,155634,155657,155660,155693,155696,155698,155704,155779,155782,155788,155805,155845,155849,155852,155898,155900,155938,155941,155976,155979,156014,156017,156049,156052,156071,156075,156079,156192,156194,156269,156273,156319,156322,156348,156357,156361,156364,156427,156435,156463,156467,156507,156572,156576,156579,156618,156621,156666,156669,156730,156734,156761,156764,156792,156795,156799,156803,156868,156871,156909,156912,156944,156948,157047,157051,157054,157127,157130,157178,157182,157188,157228,157231,157278,157281,157330,157334,157336,157350,157352,157533,157537,157564,157584,157591,157595,157612,157618],[10,155180,155176],{"id":155181},"_2-基础语法变量与字符串",[14,155183,155185],{"id":155184},"_21-注释","2.1 注释",[19,155187,155188],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,155190,155191],{},"单行注释：",[138,155193,155195],{"className":30652,"code":155194,"language":30654,"meta":143,"style":143},"# 这是单行注释\nprint(\"hello\")\n",[51,155196,155197,155202],{"__ignoreMap":143},[147,155198,155199],{"class":149,"line":150},[147,155200,155201],{"class":458},"# 这是单行注释\n",[147,155203,155204,155206,155208,155210],{"class":149,"line":312},[147,155205,30689],{"class":448},[147,155207,401],{"class":157},[147,155209,6118],{"class":504},[147,155211,407],{"class":157},[19,155213,155214],{},"多行说明常用三引号：",[138,155216,155218],{"className":30652,"code":155217,"language":30654,"meta":143,"style":143},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[51,155219,155220,155224,155229,155234],{"__ignoreMap":143},[147,155221,155222],{"class":149,"line":150},[147,155223,95970],{"class":504},[147,155225,155226],{"class":149,"line":312},[147,155227,155228],{"class":504},"这是多行说明。\n",[147,155230,155231],{"class":149,"line":1454},[147,155232,155233],{"class":504},"常用于文件顶部说明、函数说明等。\n",[147,155235,155236],{"class":149,"line":1469},[147,155237,95970],{"class":504},[19,155239,155240],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,155242,155243],{},"不好：",[138,155245,155247],{"className":30652,"code":155246,"language":30654,"meta":143,"style":143},"# age 加 1\nage = age + 1\n",[51,155248,155249,155254],{"__ignoreMap":143},[147,155250,155251],{"class":149,"line":150},[147,155252,155253],{"class":458},"# age 加 1\n",[147,155255,155256,155258,155260,155262,155264],{"class":149,"line":312},[147,155257,146709],{"class":157},[147,155259,445],{"class":397},[147,155261,15980],{"class":157},[147,155263,880],{"class":397},[147,155265,55972],{"class":448},[19,155267,155268],{},"较好：",[138,155270,155272],{"className":30652,"code":155271,"language":30654,"meta":143,"style":143},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[51,155273,155274,155279],{"__ignoreMap":143},[147,155275,155276],{"class":149,"line":150},[147,155277,155278],{"class":458},"# 用户过完生日后，年龄增加一岁\n",[147,155280,155281,155283,155285,155287,155289],{"class":149,"line":312},[147,155282,146709],{"class":157},[147,155284,445],{"class":397},[147,155286,15980],{"class":157},[147,155288,880],{"class":397},[147,155290,55972],{"class":448},[14,155292,155294],{"id":155293},"_22-字面量","2.2 字面量",[19,155296,155297],{},"字面量就是代码中直接写出来的数据。",[138,155299,155301],{"className":30652,"code":155300,"language":30654,"meta":143,"style":143},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[51,155302,155303,155310,155317,155324,155331],{"__ignoreMap":143},[147,155304,155305,155307],{"class":149,"line":150},[147,155306,710],{"class":448},[147,155308,155309],{"class":458},"          # 整数\n",[147,155311,155312,155314],{"class":149,"line":312},[147,155313,449],{"class":448},[147,155315,155316],{"class":458},"         # 小数\n",[147,155318,155319,155321],{"class":149,"line":1454},[147,155320,6118],{"class":504},[147,155322,155323],{"class":458},"      # 字符串\n",[147,155325,155326,155328],{"class":149,"line":1469},[147,155327,31750],{"class":448},[147,155329,155330],{"class":458},"         # 布尔值\n",[147,155332,155333,155335],{"class":149,"line":1475},[147,155334,95958],{"class":448},[147,155336,155337],{"class":458},"         # 空值\n",[19,155339,155340],{},"常见字面量类型：",[537,155342,155343,155353],{},[540,155344,155345],{},[543,155346,155347,155349,155351],{},[546,155348,24010],{},[546,155350,27766],{},[546,155352,26143],{},[583,155354,155355,155366,155377,155388,155400,155412,155424,155437,155449],{},[543,155356,155357,155359,155363],{},[588,155358,404],{},[588,155360,155361],{},[51,155362,710],{},[588,155364,155365],{},"整数",[543,155367,155368,155370,155374],{},[588,155369,439],{},[588,155371,155372],{},[51,155373,449],{},[588,155375,155376],{},"浮点数",[543,155378,155379,155381,155385],{},[588,155380,1574],{},[588,155382,155383],{},[51,155384,6118],{},[588,155386,155387],{},"字符串",[543,155389,155390,155392,155398],{},[588,155391,1629],{},[588,155393,155394,611,155396],{},[51,155395,31750],{},[51,155397,34261],{},[588,155399,66288],{},[543,155401,155402,155405,155409],{},[588,155403,155404],{},"NoneType",[588,155406,155407],{},[51,155408,95958],{},[588,155410,155411],{},"空值",[543,155413,155414,155416,155421],{},[588,155415,154233],{},[588,155417,155418],{},[51,155419,155420],{},"[1, 2, 3]",[588,155422,155423],{},"列表",[543,155425,155426,155429,155434],{},[588,155427,155428],{},"tuple",[588,155430,155431],{},[51,155432,155433],{},"(1, 2, 3)",[588,155435,155436],{},"元组",[543,155438,155439,155441,155446],{},[588,155440,114816],{},[588,155442,155443],{},[51,155444,155445],{},"{\"name\": \"张三\"}",[588,155447,155448],{},"字典",[543,155450,155451,155454,155459],{},[588,155452,155453],{},"set",[588,155455,155456],{},[51,155457,155458],{},"{1, 2, 3}",[588,155460,155461],{},"集合",[14,155463,155465],{"id":155464},"_23-变量","2.3 变量",[19,155467,155468],{},"变量是保存数据的名字。",[138,155470,155472],{"className":30652,"code":155471,"language":30654,"meta":143,"style":143},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[51,155473,155474,155482,155490,155500],{"__ignoreMap":143},[147,155475,155476,155478,155480],{"class":149,"line":150},[147,155477,146699],{"class":157},[147,155479,445],{"class":397},[147,155481,149516],{"class":504},[147,155483,155484,155486,155488],{"class":149,"line":312},[147,155485,146709],{"class":157},[147,155487,445],{"class":397},[147,155489,146714],{"class":448},[147,155491,155492,155495,155497],{"class":149,"line":1454},[147,155493,155494],{"class":157},"height ",[147,155496,445],{"class":397},[147,155498,155499],{"class":448}," 1.75\n",[147,155501,155502,155505,155507],{"class":149,"line":1469},[147,155503,155504],{"class":157},"is_student ",[147,155506,445],{"class":397},[147,155508,153762],{"class":448},[19,155510,155511],{},"Python 的变量不需要提前声明类型：",[138,155513,155515],{"className":30652,"code":155514,"language":30654,"meta":143,"style":143},"score = 100\nscore = \"满分\"\n",[51,155516,155517,155527],{"__ignoreMap":143},[147,155518,155519,155522,155524],{"class":149,"line":150},[147,155520,155521],{"class":157},"score ",[147,155523,445],{"class":397},[147,155525,155526],{"class":448}," 100\n",[147,155528,155529,155531,155533],{"class":149,"line":312},[147,155530,155521],{"class":157},[147,155532,445],{"class":397},[147,155534,155535],{"class":504}," \"满分\"\n",[19,155537,155538],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,155540,155542],{"id":155541},"_24-变量命名规则","2.4 变量命名规则",[19,155544,155545],{},"硬性规则：",[350,155547,155548,155551,155554,155557],{},[353,155549,155550],{},"只能由字母、数字、下划线组成。",[353,155552,155553],{},"不能以数字开头。",[353,155555,155556],{},"不能使用 Python 关键字。",[353,155558,155559],{},"区分大小写。",[138,155561,155563],{"className":30652,"code":155562,"language":30654,"meta":143,"style":143},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[51,155564,155565,155574,155583],{"__ignoreMap":143},[147,155566,155567,155570,155572],{"class":149,"line":150},[147,155568,155569],{"class":157},"user_name ",[147,155571,445],{"class":397},[147,155573,146704],{"class":504},[147,155575,155576,155579,155581],{"class":149,"line":312},[147,155577,155578],{"class":157},"age2 ",[147,155580,445],{"class":397},[147,155582,146714],{"class":448},[147,155584,155585,155588,155590],{"class":149,"line":1454},[147,155586,155587],{"class":157},"_token ",[147,155589,445],{"class":397},[147,155591,155592],{"class":504}," \"abc\"\n",[19,155594,155595],{},"错误写法：",[138,155597,155599],{"className":30652,"code":155598,"language":30654,"meta":143,"style":143},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[51,155600,155601,155610,155622],{"__ignoreMap":143},[147,155602,155603,155606,155608],{"class":149,"line":150},[147,155604,155605],{"class":77675},"2age",[147,155607,13838],{"class":397},[147,155609,146714],{"class":448},[147,155611,155612,155614,155616,155618,155620],{"class":149,"line":312},[147,155613,131747],{"class":157},[147,155615,931],{"class":397},[147,155617,146699],{"class":157},[147,155619,445],{"class":397},[147,155621,146704],{"class":504},[147,155623,155624,155626,155628],{"class":149,"line":1454},[147,155625,14967],{"class":397},[147,155627,13838],{"class":397},[147,155629,155630],{"class":504}," \"一班\"\n",[19,155632,155633],{},"查看关键字：",[138,155635,155637],{"className":30652,"code":155636,"language":30654,"meta":143,"style":143},"import keyword\n\nprint(keyword.kwlist)\n",[51,155638,155639,155646,155650],{"__ignoreMap":143},[147,155640,155641,155643],{"class":149,"line":150},[147,155642,30666],{"class":397},[147,155644,155645],{"class":157}," keyword\n",[147,155647,155648],{"class":149,"line":312},[147,155649,2674],{"emptyLinePlaceholder":324},[147,155651,155652,155654],{"class":149,"line":1454},[147,155653,30689],{"class":448},[147,155655,155656],{"class":157},"(keyword.kwlist)\n",[19,155658,155659],{},"推荐命名风格：",[138,155661,155663],{"className":30652,"code":155662,"language":30654,"meta":143,"style":143},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[51,155664,155665,155674,155684],{"__ignoreMap":143},[147,155666,155667,155670,155672],{"class":149,"line":150},[147,155668,155669],{"class":157},"student_name ",[147,155671,445],{"class":397},[147,155673,149516],{"class":504},[147,155675,155676,155679,155681],{"class":149,"line":312},[147,155677,155678],{"class":157},"total_price ",[147,155680,445],{"class":397},[147,155682,155683],{"class":448}," 99.8\n",[147,155685,155686,155689,155691],{"class":149,"line":1454},[147,155687,155688],{"class":157},"is_finished ",[147,155690,445],{"class":397},[147,155692,126077],{"class":448},[19,155694,155695],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,155697,51006],{"id":51005},[19,155699,104636,155700,155703],{},[51,155701,155702],{},"type()"," 查看数据类型：",[138,155705,155707],{"className":30652,"code":155706,"language":30654,"meta":143,"style":143},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[51,155708,155709,155723,155737,155751,155765],{"__ignoreMap":143},[147,155710,155711,155713,155715,155717,155719,155721],{"class":149,"line":150},[147,155712,30689],{"class":448},[147,155714,401],{"class":157},[147,155716,103377],{"class":448},[147,155718,401],{"class":157},[147,155720,710],{"class":448},[147,155722,30771],{"class":157},[147,155724,155725,155727,155729,155731,155733,155735],{"class":149,"line":312},[147,155726,30689],{"class":448},[147,155728,401],{"class":157},[147,155730,103377],{"class":448},[147,155732,401],{"class":157},[147,155734,449],{"class":448},[147,155736,30771],{"class":157},[147,155738,155739,155741,155743,155745,155747,155749],{"class":149,"line":1454},[147,155740,30689],{"class":448},[147,155742,401],{"class":157},[147,155744,103377],{"class":448},[147,155746,401],{"class":157},[147,155748,6118],{"class":504},[147,155750,30771],{"class":157},[147,155752,155753,155755,155757,155759,155761,155763],{"class":149,"line":1469},[147,155754,30689],{"class":448},[147,155756,401],{"class":157},[147,155758,103377],{"class":448},[147,155760,401],{"class":157},[147,155762,31750],{"class":448},[147,155764,30771],{"class":157},[147,155766,155767,155769,155771,155773,155775,155777],{"class":149,"line":1475},[147,155768,30689],{"class":448},[147,155770,401],{"class":157},[147,155772,103377],{"class":448},[147,155774,401],{"class":157},[147,155776,95958],{"class":448},[147,155778,30771],{"class":157},[19,155780,155781],{},"输出类似：",[138,155783,155786],{"className":155784,"code":155785,"language":5461,"meta":143},[5459],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[51,155787,155785],{"__ignoreMap":143},[19,155789,9299,155790,107553,155792,155794,155795,155797,155798,21773,155800,155797,155802,155804],{},[51,155791,1629],{},[51,155793,404],{}," 的子类，",[51,155796,31750],{}," 可以当作 ",[51,155799,616],{},[51,155801,34261],{},[51,155803,590],{},"，但业务代码中不要滥用。",[138,155806,155808],{"className":30652,"code":155807,"language":30654,"meta":143,"style":143},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[51,155809,155810,155828],{"__ignoreMap":143},[147,155811,155812,155814,155816,155818,155820,155822,155825],{"class":149,"line":150},[147,155813,30689],{"class":448},[147,155815,401],{"class":157},[147,155817,31750],{"class":448},[147,155819,45840],{"class":397},[147,155821,25392],{"class":448},[147,155823,155824],{"class":157},")   ",[147,155826,155827],{"class":458},"# 2\n",[147,155829,155830,155832,155834,155836,155838,155840,155842],{"class":149,"line":312},[147,155831,30689],{"class":448},[147,155833,401],{"class":157},[147,155835,34261],{"class":448},[147,155837,45840],{"class":397},[147,155839,25392],{"class":448},[147,155841,46082],{"class":157},[147,155843,155844],{"class":458},"# 1\n",[14,155846,155848],{"id":155847},"_26-类型转换","2.6 类型转换",[19,155850,155851],{},"常用转换函数：",[138,155853,155855],{"className":30652,"code":155854,"language":30654,"meta":143,"style":143},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[51,155856,155857,155867,155878,155888],{"__ignoreMap":143},[147,155858,155859,155861,155863,155865],{"class":149,"line":150},[147,155860,404],{"class":448},[147,155862,401],{"class":157},[147,155864,54589],{"class":504},[147,155866,407],{"class":157},[147,155868,155869,155871,155873,155876],{"class":149,"line":312},[147,155870,439],{"class":448},[147,155872,401],{"class":157},[147,155874,155875],{"class":504},"\"3.14\"",[147,155877,407],{"class":157},[147,155879,155880,155882,155884,155886],{"class":149,"line":1454},[147,155881,1574],{"class":448},[147,155883,401],{"class":157},[147,155885,710],{"class":448},[147,155887,407],{"class":157},[147,155889,155890,155892,155894,155896],{"class":149,"line":1469},[147,155891,1629],{"class":448},[147,155893,401],{"class":157},[147,155895,616],{"class":448},[147,155897,407],{"class":157},[19,155899,15408],{},[138,155901,155903],{"className":30652,"code":155902,"language":30654,"meta":143,"style":143},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[51,155904,155905,155914,155925],{"__ignoreMap":143},[147,155906,155907,155909,155911],{"class":149,"line":150},[147,155908,146709],{"class":157},[147,155910,445],{"class":397},[147,155912,155913],{"class":504}," \"18\"\n",[147,155915,155916,155918,155920,155922],{"class":149,"line":312},[147,155917,146709],{"class":157},[147,155919,445],{"class":397},[147,155921,2656],{"class":448},[147,155923,155924],{"class":157},"(age)\n",[147,155926,155927,155929,155932,155934,155936],{"class":149,"line":1454},[147,155928,30689],{"class":448},[147,155930,155931],{"class":157},"(age ",[147,155933,880],{"class":397},[147,155935,25392],{"class":448},[147,155937,407],{"class":157},[19,155939,155940],{},"输入得到的内容永远是字符串：",[138,155942,155944],{"className":30652,"code":155943,"language":30654,"meta":143,"style":143},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[51,155945,155946,155962],{"__ignoreMap":143},[147,155947,155948,155951,155953,155955,155957,155960],{"class":149,"line":150},[147,155949,155950],{"class":157},"num ",[147,155952,445],{"class":397},[147,155954,60878],{"class":448},[147,155956,401],{"class":157},[147,155958,155959],{"class":504},"\"请输入数字:\"",[147,155961,407],{"class":157},[147,155963,155964,155966,155968,155970,155973],{"class":149,"line":312},[147,155965,30689],{"class":448},[147,155967,401],{"class":157},[147,155969,103377],{"class":448},[147,155971,155972],{"class":157},"(num))  ",[147,155974,155975],{"class":458},"# str\n",[19,155977,155978],{},"如果要做数学运算，必须转换：",[138,155980,155982],{"className":30652,"code":155981,"language":30654,"meta":143,"style":143},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[51,155983,155984,156002],{"__ignoreMap":143},[147,155985,155986,155988,155990,155992,155994,155996,155998,156000],{"class":149,"line":150},[147,155987,155950],{"class":157},[147,155989,445],{"class":397},[147,155991,2656],{"class":448},[147,155993,401],{"class":157},[147,155995,54094],{"class":448},[147,155997,401],{"class":157},[147,155999,155959],{"class":504},[147,156001,30771],{"class":157},[147,156003,156004,156006,156008,156010,156012],{"class":149,"line":312},[147,156005,30689],{"class":448},[147,156007,45893],{"class":157},[147,156009,880],{"class":397},[147,156011,2312],{"class":448},[147,156013,407],{"class":157},[19,156015,156016],{},"常见错误：",[138,156018,156020],{"className":30652,"code":156019,"language":30654,"meta":143,"style":143},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[51,156021,156022,156035],{"__ignoreMap":143},[147,156023,156024,156026,156028,156030,156032],{"class":149,"line":150},[147,156025,404],{"class":448},[147,156027,401],{"class":157},[147,156029,155875],{"class":504},[147,156031,155824],{"class":157},[147,156033,156034],{"class":458},"# 错误\n",[147,156036,156037,156039,156041,156044,156047],{"class":149,"line":312},[147,156038,404],{"class":448},[147,156040,401],{"class":157},[147,156042,156043],{"class":504},"\"abc\"",[147,156045,156046],{"class":157},")    ",[147,156048,156034],{"class":458},[19,156050,156051],{},"正确写法：",[138,156053,156055],{"className":30652,"code":156054,"language":30654,"meta":143,"style":143},"num = float(\"3.14\")\n",[51,156056,156057],{"__ignoreMap":143},[147,156058,156059,156061,156063,156065,156067,156069],{"class":149,"line":150},[147,156060,155950],{"class":157},[147,156062,445],{"class":397},[147,156064,110067],{"class":448},[147,156066,401],{"class":157},[147,156068,155875],{"class":504},[147,156070,407],{"class":157},[14,156072,156074],{"id":156073},"_27-运算符","2.7 运算符",[367,156076,156078],{"id":156077},"_271-算术运算符","2.7.1 算术运算符",[537,156080,156081,156092],{},[540,156082,156083],{},[543,156084,156085,156088,156090],{},[546,156086,156087],{},"运算符",[546,156089,26143],{},[546,156091,27766],{},[583,156093,156094,156108,156122,156136,156150,156164,156178],{},[543,156095,156096,156100,156103],{},[588,156097,156098],{},[51,156099,880],{},[588,156101,156102],{},"加法",[588,156104,156105],{},[51,156106,156107],{},"1 + 2",[543,156109,156110,156114,156117],{},[588,156111,156112],{},[51,156113,931],{},[588,156115,156116],{},"减法",[588,156118,156119],{},[51,156120,156121],{},"5 - 3",[543,156123,156124,156128,156131],{},[588,156125,156126],{},[51,156127,854],{},[588,156129,156130],{},"乘法",[588,156132,156133],{},[51,156134,156135],{},"2 * 3",[543,156137,156138,156142,156145],{},[588,156139,156140],{},[51,156141,983],{},[588,156143,156144],{},"除法，结果是浮点数",[588,156146,156147],{},[51,156148,156149],{},"5 \u002F 2",[543,156151,156152,156156,156159],{},[588,156153,156154],{},[51,156155,33603],{},[588,156157,156158],{},"整除",[588,156160,156161],{},[51,156162,156163],{},"5 \u002F\u002F 2",[543,156165,156166,156170,156173],{},[588,156167,156168],{},[51,156169,727],{},[588,156171,156172],{},"取余",[588,156174,156175],{},[51,156176,156177],{},"5 % 2",[543,156179,156180,156184,156187],{},[588,156181,156182],{},[51,156183,10935],{},[588,156185,156186],{},"幂运算",[588,156188,156189],{},[51,156190,156191],{},"2 ** 3",[19,156193,15408],{},[138,156195,156197],{"className":30652,"code":156196,"language":30654,"meta":143,"style":143},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[51,156198,156199,156217,156234,156251],{"__ignoreMap":143},[147,156200,156201,156203,156205,156207,156210,156212,156214],{"class":149,"line":150},[147,156202,30689],{"class":448},[147,156204,401],{"class":157},[147,156206,718],{"class":448},[147,156208,156209],{"class":397}," \u002F",[147,156211,15028],{"class":448},[147,156213,155824],{"class":157},[147,156215,156216],{"class":458},"# 2.5\n",[147,156218,156219,156221,156223,156225,156228,156230,156232],{"class":149,"line":312},[147,156220,30689],{"class":448},[147,156222,401],{"class":157},[147,156224,718],{"class":448},[147,156226,156227],{"class":397}," \u002F\u002F",[147,156229,15028],{"class":448},[147,156231,46082],{"class":157},[147,156233,155827],{"class":458},[147,156235,156236,156238,156240,156242,156245,156247,156249],{"class":149,"line":1454},[147,156237,30689],{"class":448},[147,156239,401],{"class":157},[147,156241,718],{"class":448},[147,156243,156244],{"class":397}," %",[147,156246,15028],{"class":448},[147,156248,155824],{"class":157},[147,156250,155844],{"class":458},[147,156252,156253,156255,156257,156259,156262,156264,156266],{"class":149,"line":1469},[147,156254,30689],{"class":448},[147,156256,401],{"class":157},[147,156258,477],{"class":448},[147,156260,156261],{"class":397}," **",[147,156263,78342],{"class":448},[147,156265,46082],{"class":157},[147,156267,156268],{"class":458},"# 8\n",[367,156270,156272],{"id":156271},"_272-赋值运算符","2.7.2 赋值运算符",[138,156274,156276],{"className":30652,"code":156275,"language":30654,"meta":143,"style":143},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[51,156277,156278,156286,156294,156302,156310],{"__ignoreMap":143},[147,156279,156280,156282,156284],{"class":149,"line":150},[147,156281,155950],{"class":157},[147,156283,445],{"class":397},[147,156285,58701],{"class":448},[147,156287,156288,156290,156292],{"class":149,"line":312},[147,156289,155950],{"class":157},[147,156291,9751],{"class":397},[147,156293,54700],{"class":448},[147,156295,156296,156298,156300],{"class":149,"line":1454},[147,156297,155950],{"class":157},[147,156299,150415],{"class":397},[147,156301,47997],{"class":448},[147,156303,156304,156306,156308],{"class":149,"line":1469},[147,156305,155950],{"class":157},[147,156307,137311],{"class":397},[147,156309,120306],{"class":448},[147,156311,156312,156314,156317],{"class":149,"line":1475},[147,156313,155950],{"class":157},[147,156315,156316],{"class":397},"\u002F=",[147,156318,47997],{"class":448},[19,156320,156321],{},"等价关系：",[138,156323,156325],{"className":30652,"code":156324,"language":30654,"meta":143,"style":143},"num += 1\nnum = num + 1\n",[51,156326,156327,156335],{"__ignoreMap":143},[147,156328,156329,156331,156333],{"class":149,"line":150},[147,156330,155950],{"class":157},[147,156332,9751],{"class":397},[147,156334,55972],{"class":448},[147,156336,156337,156339,156341,156344,156346],{"class":149,"line":312},[147,156338,155950],{"class":157},[147,156340,445],{"class":397},[147,156342,156343],{"class":157}," num ",[147,156345,880],{"class":397},[147,156347,55972],{"class":448},[19,156349,156350,156351,101290,156354,28659],{},"Python 没有 ",[51,156352,156353],{},"num++",[51,156355,156356],{},"num--",[367,156358,156360],{"id":156359},"_273-比较运算符","2.7.3 比较运算符",[19,156362,156363],{},"比较运算结果是布尔值。",[138,156365,156367],{"className":30652,"code":156366,"language":30654,"meta":143,"style":143},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[51,156368,156369,156383,156398,156412],{"__ignoreMap":143},[147,156370,156371,156373,156375,156377,156379,156381],{"class":149,"line":150},[147,156372,30689],{"class":448},[147,156374,401],{"class":157},[147,156376,845],{"class":448},[147,156378,26496],{"class":397},[147,156380,2422],{"class":448},[147,156382,407],{"class":157},[147,156384,156385,156387,156389,156391,156394,156396],{"class":149,"line":312},[147,156386,30689],{"class":448},[147,156388,401],{"class":157},[147,156390,845],{"class":448},[147,156392,156393],{"class":397}," >=",[147,156395,2312],{"class":448},[147,156397,407],{"class":157},[147,156399,156400,156402,156404,156406,156408,156410],{"class":149,"line":1454},[147,156401,30689],{"class":448},[147,156403,401],{"class":157},[147,156405,845],{"class":448},[147,156407,101831],{"class":397},[147,156409,2357],{"class":448},[147,156411,407],{"class":157},[147,156413,156414,156416,156418,156420,156423,156425],{"class":149,"line":1469},[147,156415,30689],{"class":448},[147,156417,401],{"class":157},[147,156419,845],{"class":448},[147,156421,156422],{"class":397}," !=",[147,156424,2357],{"class":448},[147,156426,407],{"class":157},[19,156428,156429,156430,156432,156433,28659],{},"注意：判断相等用 ",[51,156431,3223],{},"，赋值用 ",[51,156434,445],{},[138,156436,156438],{"className":30652,"code":156437,"language":30654,"meta":143,"style":143},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[51,156439,156440,156452],{"__ignoreMap":143},[147,156441,156442,156444,156446,156449],{"class":149,"line":150},[147,156443,146709],{"class":157},[147,156445,445],{"class":397},[147,156447,156448],{"class":448}," 18",[147,156450,156451],{"class":458},"       # 赋值\n",[147,156453,156454,156456,156458,156460],{"class":149,"line":312},[147,156455,146709],{"class":157},[147,156457,3223],{"class":397},[147,156459,156448],{"class":448},[147,156461,156462],{"class":458},"      # 判断是否相等\n",[367,156464,156466],{"id":156465},"_274-逻辑运算符","2.7.4 逻辑运算符",[537,156468,156469,156477],{},[540,156470,156471],{},[543,156472,156473,156475],{},[546,156474,156087],{},[546,156476,26143],{},[583,156478,156479,156488,156497],{},[543,156480,156481,156485],{},[588,156482,156483],{},[51,156484,30736],{},[588,156486,156487],{},"并且",[543,156489,156490,156494],{},[588,156491,156492],{},[51,156493,115360],{},[588,156495,156496],{},"或者",[543,156498,156499,156504],{},[588,156500,156501],{},[51,156502,156503],{},"not",[588,156505,156506],{},"取反",[138,156508,156510],{"className":30652,"code":156509,"language":30654,"meta":143,"style":143},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[51,156511,156512,156520,156529,156533,156548,156562],{"__ignoreMap":143},[147,156513,156514,156516,156518],{"class":149,"line":150},[147,156515,146709],{"class":157},[147,156517,445],{"class":397},[147,156519,88337],{"class":448},[147,156521,156522,156525,156527],{"class":149,"line":312},[147,156523,156524],{"class":157},"has_ticket ",[147,156526,445],{"class":397},[147,156528,153762],{"class":448},[147,156530,156531],{"class":149,"line":1454},[147,156532,2674],{"emptyLinePlaceholder":324},[147,156534,156535,156537,156539,156541,156543,156545],{"class":149,"line":1469},[147,156536,30689],{"class":448},[147,156538,155931],{"class":157},[147,156540,1984],{"class":397},[147,156542,156448],{"class":448},[147,156544,120699],{"class":397},[147,156546,156547],{"class":157}," has_ticket)\n",[147,156549,156550,156552,156554,156556,156558,156560],{"class":149,"line":1475},[147,156551,30689],{"class":448},[147,156553,155931],{"class":157},[147,156555,1309],{"class":397},[147,156557,156448],{"class":448},[147,156559,114471],{"class":397},[147,156561,156547],{"class":157},[147,156563,156564,156566,156568,156570],{"class":149,"line":1489},[147,156565,30689],{"class":448},[147,156567,401],{"class":157},[147,156569,156503],{"class":397},[147,156571,156547],{"class":157},[14,156573,156575],{"id":156574},"_28-字符串定义","2.8 字符串定义",[19,156577,156578],{},"三种常见写法：",[138,156580,156582],{"className":30652,"code":156581,"language":30654,"meta":143,"style":143},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[51,156583,156584,156594,156603,156613],{"__ignoreMap":143},[147,156585,156586,156589,156591],{"class":149,"line":150},[147,156587,156588],{"class":157},"name1 ",[147,156590,445],{"class":397},[147,156592,156593],{"class":504}," '小明'\n",[147,156595,156596,156599,156601],{"class":149,"line":312},[147,156597,156598],{"class":157},"name2 ",[147,156600,445],{"class":397},[147,156602,149516],{"class":504},[147,156604,156605,156608,156610],{"class":149,"line":1454},[147,156606,156607],{"class":157},"text ",[147,156609,445],{"class":397},[147,156611,156612],{"class":504}," \"\"\"这是多行字符串\n",[147,156614,156615],{"class":149,"line":1469},[147,156616,156617],{"class":504},"可以换行\"\"\"\n",[19,156619,156620],{},"字符串中包含引号：",[138,156622,156624],{"className":30652,"code":156623,"language":30654,"meta":143,"style":143},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[51,156625,156626,156636,156646],{"__ignoreMap":143},[147,156627,156628,156631,156633],{"class":149,"line":150},[147,156629,156630],{"class":157},"msg ",[147,156632,445],{"class":397},[147,156634,156635],{"class":504}," \"他说:'你好'\"\n",[147,156637,156638,156641,156643],{"class":149,"line":312},[147,156639,156640],{"class":157},"msg2 ",[147,156642,445],{"class":397},[147,156644,156645],{"class":504}," '他说:\"你好\"'\n",[147,156647,156648,156651,156653,156656,156659,156662,156664],{"class":149,"line":1454},[147,156649,156650],{"class":157},"msg3 ",[147,156652,445],{"class":397},[147,156654,156655],{"class":504}," \"他说:",[147,156657,156658],{"class":448},"\\\"",[147,156660,156661],{"class":504},"你好",[147,156663,156658],{"class":448},[147,156665,25407],{"class":504},[19,156667,156668],{},"常见转义字符：",[537,156670,156671,156680],{},[540,156672,156673],{},[543,156674,156675,156678],{},[546,156676,156677],{},"写法",[546,156679,100972],{},[583,156681,156682,156692,156701,156711,156720],{},[543,156683,156684,156689],{},[588,156685,156686],{},[51,156687,156688],{},"\\n",[588,156690,156691],{},"换行",[543,156693,156694,156698],{},[588,156695,156696],{},[51,156697,1505],{},[588,156699,156700],{},"制表符",[543,156702,156703,156708],{},[588,156704,156705],{},[51,156706,156707],{},"\\\\",[588,156709,156710],{},"反斜杠",[543,156712,156713,156717],{},[588,156714,156715],{},[51,156716,156658],{},[588,156718,156719],{},"双引号",[543,156721,156722,156727],{},[588,156723,156724],{},[51,156725,156726],{},"\\'",[588,156728,156729],{},"单引号",[14,156731,156733],{"id":156732},"_29-字符串拼接","2.9 字符串拼接",[138,156735,156737],{"className":30652,"code":156736,"language":30654,"meta":143,"style":143},"name = \"小明\"\nprint(\"你好，\" + name)\n",[51,156738,156739,156747],{"__ignoreMap":143},[147,156740,156741,156743,156745],{"class":149,"line":150},[147,156742,146699],{"class":157},[147,156744,445],{"class":397},[147,156746,149516],{"class":504},[147,156748,156749,156751,156753,156756,156758],{"class":149,"line":312},[147,156750,30689],{"class":448},[147,156752,401],{"class":157},[147,156754,156755],{"class":504},"\"你好，\"",[147,156757,45840],{"class":397},[147,156759,156760],{"class":157}," name)\n",[19,156762,156763],{},"字符串只能和字符串拼接：",[138,156765,156767],{"className":30652,"code":156766,"language":30654,"meta":143,"style":143},"age = 18\nprint(\"年龄:\" + str(age))\n",[51,156768,156769,156777],{"__ignoreMap":143},[147,156770,156771,156773,156775],{"class":149,"line":150},[147,156772,146709],{"class":157},[147,156774,445],{"class":397},[147,156776,146714],{"class":448},[147,156778,156779,156781,156783,156785,156787,156789],{"class":149,"line":312},[147,156780,30689],{"class":448},[147,156782,401],{"class":157},[147,156784,146680],{"class":504},[147,156786,45840],{"class":397},[147,156788,74192],{"class":448},[147,156790,156791],{"class":157},"(age))\n",[19,156793,156794],{},"更推荐使用格式化字符串。",[14,156796,156798],{"id":156797},"_210-字符串格式化","2.10 字符串格式化",[367,156800,156802],{"id":156801},"_2101-百分号格式化","2.10.1 百分号格式化",[138,156804,156806],{"className":30652,"code":156805,"language":30654,"meta":143,"style":143},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[51,156807,156808,156816,156824,156833,156837],{"__ignoreMap":143},[147,156809,156810,156812,156814],{"class":149,"line":150},[147,156811,146699],{"class":157},[147,156813,445],{"class":397},[147,156815,149516],{"class":504},[147,156817,156818,156820,156822],{"class":149,"line":312},[147,156819,146709],{"class":157},[147,156821,445],{"class":397},[147,156823,146714],{"class":448},[147,156825,156826,156828,156830],{"class":149,"line":1454},[147,156827,155521],{"class":157},[147,156829,445],{"class":397},[147,156831,156832],{"class":448}," 95.5\n",[147,156834,156835],{"class":149,"line":1469},[147,156836,2674],{"emptyLinePlaceholder":324},[147,156838,156839,156841,156843,156846,156849,156852,156855,156858,156861,156863,156865],{"class":149,"line":1475},[147,156840,30689],{"class":448},[147,156842,401],{"class":157},[147,156844,156845],{"class":504},"\"姓名:",[147,156847,156848],{"class":448},"%s",[147,156850,156851],{"class":504}," 年龄:",[147,156853,156854],{"class":448},"%d",[147,156856,156857],{"class":504}," 分数:",[147,156859,156860],{"class":448},"%.1f",[147,156862,650],{"class":504},[147,156864,156244],{"class":397},[147,156866,156867],{"class":157}," (name, age, score))\n",[19,156869,156870],{},"常用占位符：",[537,156872,156873,156882],{},[540,156874,156875],{},[543,156876,156877,156880],{},[546,156878,156879],{},"占位符",[546,156881,26143],{},[583,156883,156884,156892,156900],{},[543,156885,156886,156890],{},[588,156887,156888],{},[51,156889,156848],{},[588,156891,155387],{},[543,156893,156894,156898],{},[588,156895,156896],{},[51,156897,156854],{},[588,156899,155365],{},[543,156901,156902,156907],{},[588,156903,156904],{},[51,156905,156906],{},"%f",[588,156908,155376],{},[19,156910,156911],{},"精度控制：",[138,156913,156915],{"className":30652,"code":156914,"language":30654,"meta":143,"style":143},"price = 12.3456\nprint(\"%.2f\" % price)\n",[51,156916,156917,156926],{"__ignoreMap":143},[147,156918,156919,156921,156923],{"class":149,"line":150},[147,156920,146844],{"class":157},[147,156922,445],{"class":397},[147,156924,156925],{"class":448}," 12.3456\n",[147,156927,156928,156930,156932,156934,156937,156939,156941],{"class":149,"line":312},[147,156929,30689],{"class":448},[147,156931,401],{"class":157},[147,156933,650],{"class":504},[147,156935,156936],{"class":448},"%.2f",[147,156938,650],{"class":504},[147,156940,156244],{"class":397},[147,156942,156943],{"class":157}," price)\n",[367,156945,156947],{"id":156946},"_2102-format方法","2.10.2 format方法",[138,156949,156951],{"className":30652,"code":156950,"language":30654,"meta":143,"style":143},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[51,156952,156953,156961,156969,156973,156992,157012],{"__ignoreMap":143},[147,156954,156955,156957,156959],{"class":149,"line":150},[147,156956,146699],{"class":157},[147,156958,445],{"class":397},[147,156960,149516],{"class":504},[147,156962,156963,156965,156967],{"class":149,"line":312},[147,156964,146709],{"class":157},[147,156966,445],{"class":397},[147,156968,146714],{"class":448},[147,156970,156971],{"class":149,"line":1454},[147,156972,2674],{"emptyLinePlaceholder":324},[147,156974,156975,156977,156979,156981,156983,156985,156987,156989],{"class":149,"line":1469},[147,156976,30689],{"class":448},[147,156978,401],{"class":157},[147,156980,156845],{"class":504},[147,156982,32733],{"class":448},[147,156984,156851],{"class":504},[147,156986,32733],{"class":448},[147,156988,650],{"class":504},[147,156990,156991],{"class":157},".format(name, age))\n",[147,156993,156994,156996,156998,157000,157003,157005,157008,157010],{"class":149,"line":1475},[147,156995,30689],{"class":448},[147,156997,401],{"class":157},[147,156999,156845],{"class":504},[147,157001,157002],{"class":448},"{0}",[147,157004,156851],{"class":504},[147,157006,157007],{"class":448},"{1}",[147,157009,650],{"class":504},[147,157011,156991],{"class":157},[147,157013,157014,157016,157018,157020,157023,157025,157028,157030,157033,157035,157037,157040,157042,157044],{"class":149,"line":1489},[147,157015,30689],{"class":448},[147,157017,401],{"class":157},[147,157019,156845],{"class":504},[147,157021,157022],{"class":448},"{name}",[147,157024,156851],{"class":504},[147,157026,157027],{"class":448},"{age}",[147,157029,650],{"class":504},[147,157031,157032],{"class":157},".format(",[147,157034,80082],{"class":5490},[147,157036,445],{"class":397},[147,157038,157039],{"class":157},"name, ",[147,157041,70494],{"class":5490},[147,157043,445],{"class":397},[147,157045,157046],{"class":157},"age))\n",[367,157048,157050],{"id":157049},"_2103-f-string","2.10.3 f-string",[19,157052,157053],{},"推荐写法：",[138,157055,157057],{"className":30652,"code":157056,"language":30654,"meta":143,"style":143},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[51,157058,157059,157067,157075,157083,157087],{"__ignoreMap":143},[147,157060,157061,157063,157065],{"class":149,"line":150},[147,157062,146699],{"class":157},[147,157064,445],{"class":397},[147,157066,149516],{"class":504},[147,157068,157069,157071,157073],{"class":149,"line":312},[147,157070,146709],{"class":157},[147,157072,445],{"class":397},[147,157074,146714],{"class":448},[147,157076,157077,157079,157081],{"class":149,"line":1454},[147,157078,155521],{"class":157},[147,157080,445],{"class":397},[147,157082,156832],{"class":448},[147,157084,157085],{"class":149,"line":1469},[147,157086,2674],{"emptyLinePlaceholder":324},[147,157088,157089,157091,157093,157095,157097,157099,157101,157103,157105,157107,157109,157111,157113,157115,157118,157121,157123,157125],{"class":149,"line":1475},[147,157090,30689],{"class":448},[147,157092,401],{"class":157},[147,157094,452],{"class":397},[147,157096,156845],{"class":504},[147,157098,1295],{"class":448},[147,157100,80082],{"class":157},[147,157102,1345],{"class":448},[147,157104,156851],{"class":504},[147,157106,1295],{"class":448},[147,157108,70494],{"class":157},[147,157110,1345],{"class":448},[147,157112,156857],{"class":504},[147,157114,1295],{"class":448},[147,157116,157117],{"class":157},"score",[147,157119,157120],{"class":397},":.1f",[147,157122,1345],{"class":448},[147,157124,650],{"class":504},[147,157126,407],{"class":157},[19,157128,157129],{},"表达式也可以放进去：",[138,157131,157133],{"className":30652,"code":157132,"language":30654,"meta":143,"style":143},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[51,157134,157135,157143,157151],{"__ignoreMap":143},[147,157136,157137,157139,157141],{"class":149,"line":150},[147,157138,146844],{"class":157},[147,157140,445],{"class":397},[147,157142,146849],{"class":448},[147,157144,157145,157147,157149],{"class":149,"line":312},[147,157146,146854],{"class":157},[147,157148,445],{"class":397},[147,157150,54700],{"class":448},[147,157152,157153,157155,157157,157159,157162,157164,157166,157168,157171,157173,157176],{"class":149,"line":1454},[147,157154,30689],{"class":448},[147,157156,401],{"class":157},[147,157158,452],{"class":397},[147,157160,157161],{"class":504},"\"总价:",[147,157163,1295],{"class":448},[147,157165,146844],{"class":157},[147,157167,854],{"class":397},[147,157169,157170],{"class":157}," count",[147,157172,1345],{"class":448},[147,157174,157175],{"class":504},"元\"",[147,157177,407],{"class":157},[14,157179,157181],{"id":157180},"_211-input输入","2.11 input输入",[19,157183,157184,157187],{},[51,157185,157186],{},"input()"," 会暂停程序，等待用户输入。",[138,157189,157191],{"className":30652,"code":157190,"language":30654,"meta":143,"style":143},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[51,157192,157193,157207],{"__ignoreMap":143},[147,157194,157195,157197,157199,157201,157203,157205],{"class":149,"line":150},[147,157196,146699],{"class":157},[147,157198,445],{"class":397},[147,157200,60878],{"class":448},[147,157202,401],{"class":157},[147,157204,152542],{"class":504},[147,157206,407],{"class":157},[147,157208,157209,157211,157213,157215,157218,157220,157222,157224,157226],{"class":149,"line":312},[147,157210,30689],{"class":448},[147,157212,401],{"class":157},[147,157214,452],{"class":397},[147,157216,157217],{"class":504},"\"你好，",[147,157219,1295],{"class":448},[147,157221,80082],{"class":157},[147,157223,1345],{"class":448},[147,157225,650],{"class":504},[147,157227,407],{"class":157},[19,157229,157230],{},"输入整数：",[138,157232,157234],{"className":30652,"code":157233,"language":30654,"meta":143,"style":143},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[51,157235,157236,157254],{"__ignoreMap":143},[147,157237,157238,157240,157242,157244,157246,157248,157250,157252],{"class":149,"line":150},[147,157239,146709],{"class":157},[147,157241,445],{"class":397},[147,157243,2656],{"class":448},[147,157245,401],{"class":157},[147,157247,54094],{"class":448},[147,157249,401],{"class":157},[147,157251,152557],{"class":504},[147,157253,30771],{"class":157},[147,157255,157256,157258,157260,157262,157265,157267,157269,157271,157274,157276],{"class":149,"line":312},[147,157257,30689],{"class":448},[147,157259,401],{"class":157},[147,157261,452],{"class":397},[147,157263,157264],{"class":504},"\"明年你",[147,157266,1295],{"class":448},[147,157268,146709],{"class":157},[147,157270,880],{"class":397},[147,157272,157273],{"class":448}," 1}",[147,157275,149567],{"class":504},[147,157277,407],{"class":157},[19,157279,157280],{},"输入小数：",[138,157282,157284],{"className":30652,"code":157283,"language":30654,"meta":143,"style":143},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[51,157285,157286,157305],{"__ignoreMap":143},[147,157287,157288,157290,157292,157294,157296,157298,157300,157303],{"class":149,"line":150},[147,157289,155494],{"class":157},[147,157291,445],{"class":397},[147,157293,110067],{"class":448},[147,157295,401],{"class":157},[147,157297,54094],{"class":448},[147,157299,401],{"class":157},[147,157301,157302],{"class":504},"\"请输入身高:\"",[147,157304,30771],{"class":157},[147,157306,157307,157309,157311,157313,157316,157318,157320,157323,157325,157328],{"class":149,"line":312},[147,157308,30689],{"class":448},[147,157310,401],{"class":157},[147,157312,452],{"class":397},[147,157314,157315],{"class":504},"\"身高:",[147,157317,1295],{"class":448},[147,157319,25255],{"class":157},[147,157321,157322],{"class":397},":.2f",[147,157324,1345],{"class":448},[147,157326,157327],{"class":504},"米\"",[147,157329,407],{"class":157},[14,157331,157333],{"id":157332},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,157335,123562],{},[350,157337,157338,157341,157344,157347],{},[353,157339,157340],{},"输入商品单价。",[353,157342,157343],{},"输入购买数量。",[353,157345,157346],{},"输入折扣，例如 0.8 表示八折。",[353,157348,157349],{},"输出最终金额，保留两位小数。",[19,157351,10309],{},[138,157353,157355],{"className":30652,"code":157354,"language":30654,"meta":143,"style":143},"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",[51,157356,157357,157376,157395,157415,157419,157439,157443,157466,157487,157509],{"__ignoreMap":143},[147,157358,157359,157361,157363,157365,157367,157369,157371,157374],{"class":149,"line":150},[147,157360,146844],{"class":157},[147,157362,445],{"class":397},[147,157364,110067],{"class":448},[147,157366,401],{"class":157},[147,157368,54094],{"class":448},[147,157370,401],{"class":157},[147,157372,157373],{"class":504},"\"请输入商品单价:\"",[147,157375,30771],{"class":157},[147,157377,157378,157380,157382,157384,157386,157388,157390,157393],{"class":149,"line":312},[147,157379,146854],{"class":157},[147,157381,445],{"class":397},[147,157383,2656],{"class":448},[147,157385,401],{"class":157},[147,157387,54094],{"class":448},[147,157389,401],{"class":157},[147,157391,157392],{"class":504},"\"请输入购买数量:\"",[147,157394,30771],{"class":157},[147,157396,157397,157400,157402,157404,157406,157408,157410,157413],{"class":149,"line":1454},[147,157398,157399],{"class":157},"discount ",[147,157401,445],{"class":397},[147,157403,110067],{"class":448},[147,157405,401],{"class":157},[147,157407,54094],{"class":448},[147,157409,401],{"class":157},[147,157411,157412],{"class":504},"\"请输入折扣:\"",[147,157414,30771],{"class":157},[147,157416,157417],{"class":149,"line":1469},[147,157418,2674],{"emptyLinePlaceholder":324},[147,157420,157421,157424,157426,157429,157431,157434,157436],{"class":149,"line":1475},[147,157422,157423],{"class":157},"total ",[147,157425,445],{"class":397},[147,157427,157428],{"class":157}," price ",[147,157430,854],{"class":397},[147,157432,157433],{"class":157}," count ",[147,157435,854],{"class":397},[147,157437,157438],{"class":157}," discount\n",[147,157440,157441],{"class":149,"line":1489},[147,157442,2674],{"emptyLinePlaceholder":324},[147,157444,157445,157447,157449,157451,157454,157456,157458,157460,157462,157464],{"class":149,"line":1495},[147,157446,30689],{"class":448},[147,157448,401],{"class":157},[147,157450,452],{"class":397},[147,157452,157453],{"class":504},"\"商品单价:",[147,157455,1295],{"class":448},[147,157457,80087],{"class":157},[147,157459,157322],{"class":397},[147,157461,1345],{"class":448},[147,157463,650],{"class":504},[147,157465,407],{"class":157},[147,157467,157468,157470,157472,157474,157477,157479,157481,157483,157485],{"class":149,"line":1586},[147,157469,30689],{"class":448},[147,157471,401],{"class":157},[147,157473,452],{"class":397},[147,157475,157476],{"class":504},"\"购买数量:",[147,157478,1295],{"class":448},[147,157480,84706],{"class":157},[147,157482,1345],{"class":448},[147,157484,650],{"class":504},[147,157486,407],{"class":157},[147,157488,157489,157491,157493,157495,157498,157500,157503,157505,157507],{"class":149,"line":1592},[147,157490,30689],{"class":448},[147,157492,401],{"class":157},[147,157494,452],{"class":397},[147,157496,157497],{"class":504},"\"折扣:",[147,157499,1295],{"class":448},[147,157501,157502],{"class":157},"discount",[147,157504,1345],{"class":448},[147,157506,650],{"class":504},[147,157508,407],{"class":157},[147,157510,157511,157513,157515,157517,157520,157522,157525,157527,157529,157531],{"class":149,"line":1604},[147,157512,30689],{"class":448},[147,157514,401],{"class":157},[147,157516,452],{"class":397},[147,157518,157519],{"class":504},"\"应付金额:",[147,157521,1295],{"class":448},[147,157523,157524],{"class":157},"total",[147,157526,157322],{"class":397},[147,157528,1345],{"class":448},[147,157530,157175],{"class":504},[147,157532,407],{"class":157},[14,157534,157536],{"id":157535},"_213-易错点","2.13 易错点",[350,157538,157539,157544,157550,157558,157561],{},[353,157540,157541,157543],{},[51,157542,157186],{}," 的结果是字符串，做运算前要转换。",[353,157545,157546,157547,28659],{},"字符串拼接时，数字要先 ",[51,157548,157549],{},"str()",[353,157551,157552,157554,157555,157557],{},[51,157553,445],{}," 是赋值，",[51,157556,3223],{}," 是比较。",[353,157559,157560],{},"Python 没有自增自减运算符。",[353,157562,157563],{},"浮点数计算可能有精度误差：",[138,157565,157567],{"className":30652,"code":157566,"language":30654,"meta":143,"style":143},"print(0.1 + 0.2)\n",[51,157568,157569],{"__ignoreMap":143},[147,157570,157571,157573,157575,157577,157579,157582],{"class":149,"line":150},[147,157572,30689],{"class":448},[147,157574,401],{"class":157},[147,157576,86482],{"class":448},[147,157578,45840],{"class":397},[147,157580,157581],{"class":448}," 0.2",[147,157583,407],{"class":157},[19,157585,157586,157587,157590],{},"金额计算如果要求严格，可以后续学习 ",[51,157588,157589],{},"decimal"," 模块。",[14,157592,157594],{"id":157593},"_214-本章练习","2.14 本章练习",[350,157596,157597,157600,157603,157606,157609],{},[353,157598,157599],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[353,157601,157602],{},"输入圆的半径，计算面积，保留两位小数。",[353,157604,157605],{},"输入工资和奖金，计算总收入。",[353,157607,157608],{},"输入摄氏温度，转换为华氏温度。",[353,157610,157611],{},"写一个 BMI 计算程序：",[138,157613,157616],{"className":157614,"code":157615,"language":5461,"meta":143},[5459],"BMI = 体重kg \u002F 身高m ** 2\n",[51,157617,157615],{"__ignoreMap":143},[308,157619,157620],{},"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":143,"searchDepth":312,"depth":312,"links":157622},[157623,157624,157625,157626,157627,157628,157629,157635,157636,157637,157642,157643,157644,157645],{"id":155184,"depth":312,"text":155185},{"id":155293,"depth":312,"text":155294},{"id":155464,"depth":312,"text":155465},{"id":155541,"depth":312,"text":155542},{"id":51005,"depth":312,"text":51006},{"id":155847,"depth":312,"text":155848},{"id":156073,"depth":312,"text":156074,"children":157630},[157631,157632,157633,157634],{"id":156077,"depth":1454,"text":156078},{"id":156271,"depth":1454,"text":156272},{"id":156359,"depth":1454,"text":156360},{"id":156465,"depth":1454,"text":156466},{"id":156574,"depth":312,"text":156575},{"id":156732,"depth":312,"text":156733},{"id":156797,"depth":312,"text":156798,"children":157638},[157639,157640,157641],{"id":156801,"depth":1454,"text":156802},{"id":156946,"depth":1454,"text":156947},{"id":157049,"depth":1454,"text":157050},{"id":157180,"depth":312,"text":157181},{"id":157332,"depth":312,"text":157333},{"id":157535,"depth":312,"text":157536},{"id":157593,"depth":312,"text":157594},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155176,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157652,"title":157653,"body":157654,"description":321,"extension":322,"meta":159290,"navigation":324,"path":159291,"seo":159292,"stem":159293,"__hash__":159294},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157655,"toc":159271},[157656,157659,157663,157666,157681,157684,157712,157716,157766,157768,157784,157787,157813,157816,157820,157887,157890,157906,157910,157913,158031,158034,158041,158090,158096,158100,158103,158216,158219,158223,158227,158230,158280,158284,158287,158337,158341,158344,158382,158386,158389,158435,158438,158473,158477,158482,158485,158531,158533,158600,158604,158610,158721,158730,158734,158736,158747,158749,158915,158919,158921,158935,158937,159151,159155,159174,159191,159194,159240,159244,159268],[10,157657,157653],{"id":157658},"_3-判断语句",[14,157660,157662],{"id":157661},"_31-布尔值","3.1 布尔值",[19,157664,157665],{},"判断语句依赖布尔值：",[138,157667,157669],{"className":30652,"code":157668,"language":30654,"meta":143,"style":143},"True\nFalse\n",[51,157670,157671,157676],{"__ignoreMap":143},[147,157672,157673],{"class":149,"line":150},[147,157674,157675],{"class":448},"True\n",[147,157677,157678],{"class":149,"line":312},[147,157679,157680],{"class":448},"False\n",[19,157682,157683],{},"比较表达式会产生布尔值：",[138,157685,157687],{"className":30652,"code":157686,"language":30654,"meta":143,"style":143},"age = 18\nprint(age >= 18)  # True\n",[51,157688,157689,157697],{"__ignoreMap":143},[147,157690,157691,157693,157695],{"class":149,"line":150},[147,157692,146709],{"class":157},[147,157694,445],{"class":397},[147,157696,146714],{"class":448},[147,157698,157699,157701,157703,157705,157707,157709],{"class":149,"line":312},[147,157700,30689],{"class":448},[147,157702,155931],{"class":157},[147,157704,1984],{"class":397},[147,157706,156448],{"class":448},[147,157708,46082],{"class":157},[147,157710,157711],{"class":458},"# True\n",[14,157713,157715],{"id":157714},"_32-if基础语法","3.2 if基础语法",[138,157717,157719],{"className":30652,"code":157718,"language":30654,"meta":143,"style":143},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[51,157720,157721,157739,157743,157755],{"__ignoreMap":143},[147,157722,157723,157725,157727,157729,157731,157733,157735,157737],{"class":149,"line":150},[147,157724,146709],{"class":157},[147,157726,445],{"class":397},[147,157728,2656],{"class":448},[147,157730,401],{"class":157},[147,157732,54094],{"class":448},[147,157734,401],{"class":157},[147,157736,152557],{"class":504},[147,157738,30771],{"class":157},[147,157740,157741],{"class":149,"line":312},[147,157742,2674],{"emptyLinePlaceholder":324},[147,157744,157745,157747,157749,157751,157753],{"class":149,"line":1454},[147,157746,1805],{"class":397},[147,157748,15980],{"class":157},[147,157750,1984],{"class":397},[147,157752,156448],{"class":448},[147,157754,4013],{"class":157},[147,157756,157757,157759,157761,157764],{"class":149,"line":1469},[147,157758,31573],{"class":448},[147,157760,401],{"class":157},[147,157762,157763],{"class":504},"\"可以进入网吧\"",[147,157765,407],{"class":157},[19,157767,9299],{},[350,157769,157770,157775,157778,157781],{},[353,157771,157772,157774],{},[51,157773,1805],{}," 后面是条件表达式。",[353,157776,157777],{},"条件后面必须写冒号。",[353,157779,157780],{},"条件成立时执行缩进代码块。",[353,157782,157783],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,157785,157786],{},"错误示例：",[138,157788,157790],{"className":30652,"code":157789,"language":30654,"meta":143,"style":143},"if age >= 18\n    print(\"可以进入\")\n",[51,157791,157792,157802],{"__ignoreMap":143},[147,157793,157794,157796,157798,157800],{"class":149,"line":150},[147,157795,1805],{"class":397},[147,157797,15980],{"class":157},[147,157799,1984],{"class":397},[147,157801,146714],{"class":448},[147,157803,157804,157806,157808,157811],{"class":149,"line":312},[147,157805,31573],{"class":448},[147,157807,401],{"class":157},[147,157809,157810],{"class":504},"\"可以进入\"",[147,157812,407],{"class":157},[19,157814,157815],{},"缺少冒号。",[14,157817,157819],{"id":157818},"_33-if-else","3.3 if else",[138,157821,157823],{"className":30652,"code":157822,"language":30654,"meta":143,"style":143},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[51,157824,157825,157843,157847,157859,157870,157876],{"__ignoreMap":143},[147,157826,157827,157829,157831,157833,157835,157837,157839,157841],{"class":149,"line":150},[147,157828,146709],{"class":157},[147,157830,445],{"class":397},[147,157832,2656],{"class":448},[147,157834,401],{"class":157},[147,157836,54094],{"class":448},[147,157838,401],{"class":157},[147,157840,152557],{"class":504},[147,157842,30771],{"class":157},[147,157844,157845],{"class":149,"line":312},[147,157846,2674],{"emptyLinePlaceholder":324},[147,157848,157849,157851,157853,157855,157857],{"class":149,"line":1454},[147,157850,1805],{"class":397},[147,157852,15980],{"class":157},[147,157854,1984],{"class":397},[147,157856,156448],{"class":448},[147,157858,4013],{"class":157},[147,157860,157861,157863,157865,157868],{"class":149,"line":1469},[147,157862,31573],{"class":448},[147,157864,401],{"class":157},[147,157866,157867],{"class":504},"\"成年人\"",[147,157869,407],{"class":157},[147,157871,157872,157874],{"class":149,"line":1475},[147,157873,1975],{"class":397},[147,157875,4013],{"class":157},[147,157877,157878,157880,157882,157885],{"class":149,"line":1489},[147,157879,31573],{"class":448},[147,157881,401],{"class":157},[147,157883,157884],{"class":504},"\"未成年人\"",[147,157886,407],{"class":157},[19,157888,157889],{},"执行逻辑：",[350,157891,157892,157898,157903],{},[353,157893,157894,157895,157897],{},"条件成立，执行 ",[51,157896,1805],{}," 代码块。",[353,157899,157900,157901,157897],{},"条件不成立，执行 ",[51,157902,1975],{},[353,157904,157905],{},"两个代码块只会执行其中一个。",[14,157907,157909],{"id":157908},"_34-if-elif-else","3.4 if elif else",[19,157911,157912],{},"多条件判断：",[138,157914,157916],{"className":30652,"code":157915,"language":30654,"meta":143,"style":143},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[51,157917,157918,157936,157940,157954,157965,157979,157990,158003,158014,158020],{"__ignoreMap":143},[147,157919,157920,157922,157924,157926,157928,157930,157932,157934],{"class":149,"line":150},[147,157921,155521],{"class":157},[147,157923,445],{"class":397},[147,157925,2656],{"class":448},[147,157927,401],{"class":157},[147,157929,54094],{"class":448},[147,157931,401],{"class":157},[147,157933,152572],{"class":504},[147,157935,30771],{"class":157},[147,157937,157938],{"class":149,"line":312},[147,157939,2674],{"emptyLinePlaceholder":324},[147,157941,157942,157944,157947,157949,157952],{"class":149,"line":1454},[147,157943,1805],{"class":397},[147,157945,157946],{"class":157}," score ",[147,157948,1984],{"class":397},[147,157950,157951],{"class":448}," 90",[147,157953,4013],{"class":157},[147,157955,157956,157958,157960,157963],{"class":149,"line":1469},[147,157957,31573],{"class":448},[147,157959,401],{"class":157},[147,157961,157962],{"class":504},"\"优秀\"",[147,157964,407],{"class":157},[147,157966,157967,157970,157972,157974,157977],{"class":149,"line":1475},[147,157968,157969],{"class":397},"elif",[147,157971,157946],{"class":157},[147,157973,1984],{"class":397},[147,157975,157976],{"class":448}," 80",[147,157978,4013],{"class":157},[147,157980,157981,157983,157985,157988],{"class":149,"line":1489},[147,157982,31573],{"class":448},[147,157984,401],{"class":157},[147,157986,157987],{"class":504},"\"良好\"",[147,157989,407],{"class":157},[147,157991,157992,157994,157996,157998,158001],{"class":149,"line":1495},[147,157993,157969],{"class":397},[147,157995,157946],{"class":157},[147,157997,1984],{"class":397},[147,157999,158000],{"class":448}," 60",[147,158002,4013],{"class":157},[147,158004,158005,158007,158009,158012],{"class":149,"line":1586},[147,158006,31573],{"class":448},[147,158008,401],{"class":157},[147,158010,158011],{"class":504},"\"及格\"",[147,158013,407],{"class":157},[147,158015,158016,158018],{"class":149,"line":1592},[147,158017,1975],{"class":397},[147,158019,4013],{"class":157},[147,158021,158022,158024,158026,158029],{"class":149,"line":1604},[147,158023,31573],{"class":448},[147,158025,401],{"class":157},[147,158027,158028],{"class":504},"\"不及格\"",[147,158030,407],{"class":157},[19,158032,158033],{},"注意判断顺序很重要。",[19,158035,158036,158037,158040],{},"如果把 ",[51,158038,158039],{},"score >= 60"," 放在最前面：",[138,158042,158044],{"className":30652,"code":158043,"language":30654,"meta":143,"style":143},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[51,158045,158046,158058,158068,158080],{"__ignoreMap":143},[147,158047,158048,158050,158052,158054,158056],{"class":149,"line":150},[147,158049,1805],{"class":397},[147,158051,157946],{"class":157},[147,158053,1984],{"class":397},[147,158055,158000],{"class":448},[147,158057,4013],{"class":157},[147,158059,158060,158062,158064,158066],{"class":149,"line":312},[147,158061,31573],{"class":448},[147,158063,401],{"class":157},[147,158065,158011],{"class":504},[147,158067,407],{"class":157},[147,158069,158070,158072,158074,158076,158078],{"class":149,"line":1454},[147,158071,157969],{"class":397},[147,158073,157946],{"class":157},[147,158075,1984],{"class":397},[147,158077,157951],{"class":448},[147,158079,4013],{"class":157},[147,158081,158082,158084,158086,158088],{"class":149,"line":1469},[147,158083,31573],{"class":448},[147,158085,401],{"class":157},[147,158087,157962],{"class":504},[147,158089,407],{"class":157},[19,158091,158092,158093,158095],{},"成绩 95 会先满足 ",[51,158094,158039],{},"，后面的优秀分支就不会执行。",[14,158097,158099],{"id":158098},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,158101,158102],{},"嵌套判断就是在一个判断内部再写判断。",[138,158104,158106],{"className":30652,"code":158105,"language":30654,"meta":143,"style":143},"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",[51,158107,158108,158126,158141,158145,158157,158171,158181,158188,158199,158205],{"__ignoreMap":143},[147,158109,158110,158112,158114,158116,158118,158120,158122,158124],{"class":149,"line":150},[147,158111,146709],{"class":157},[147,158113,445],{"class":397},[147,158115,2656],{"class":448},[147,158117,401],{"class":157},[147,158119,54094],{"class":448},[147,158121,401],{"class":157},[147,158123,152557],{"class":504},[147,158125,30771],{"class":157},[147,158127,158128,158130,158132,158134,158136,158139],{"class":149,"line":312},[147,158129,156524],{"class":157},[147,158131,445],{"class":397},[147,158133,60878],{"class":448},[147,158135,401],{"class":157},[147,158137,158138],{"class":504},"\"是否有票(y\u002Fn):\"",[147,158140,407],{"class":157},[147,158142,158143],{"class":149,"line":1454},[147,158144,2674],{"emptyLinePlaceholder":324},[147,158146,158147,158149,158151,158153,158155],{"class":149,"line":1469},[147,158148,1805],{"class":397},[147,158150,15980],{"class":157},[147,158152,1984],{"class":397},[147,158154,156448],{"class":448},[147,158156,4013],{"class":157},[147,158158,158159,158161,158164,158166,158169],{"class":149,"line":1475},[147,158160,3375],{"class":397},[147,158162,158163],{"class":157}," has_ticket ",[147,158165,3223],{"class":397},[147,158167,158168],{"class":504}," \"y\"",[147,158170,4013],{"class":157},[147,158172,158173,158175,158177,158179],{"class":149,"line":1489},[147,158174,32725],{"class":448},[147,158176,401],{"class":157},[147,158178,157810],{"class":504},[147,158180,407],{"class":157},[147,158182,158183,158186],{"class":149,"line":1495},[147,158184,158185],{"class":397},"    else",[147,158187,4013],{"class":157},[147,158189,158190,158192,158194,158197],{"class":149,"line":1586},[147,158191,32725],{"class":448},[147,158193,401],{"class":157},[147,158195,158196],{"class":504},"\"请先买票\"",[147,158198,407],{"class":157},[147,158200,158201,158203],{"class":149,"line":1592},[147,158202,1975],{"class":397},[147,158204,4013],{"class":157},[147,158206,158207,158209,158211,158214],{"class":149,"line":1604},[147,158208,31573],{"class":448},[147,158210,401],{"class":157},[147,158212,158213],{"class":504},"\"未成年人禁止进入\"",[147,158215,407],{"class":157},[19,158217,158218],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,158220,158222],{"id":158221},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[367,158224,158226],{"id":158225},"_361-and","3.6.1 and",[19,158228,158229],{},"两个条件都成立才成立。",[138,158231,158233],{"className":30652,"code":158232,"language":30654,"meta":143,"style":143},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[51,158234,158235,158243,158251,158255,158270],{"__ignoreMap":143},[147,158236,158237,158239,158241],{"class":149,"line":150},[147,158238,146709],{"class":157},[147,158240,445],{"class":397},[147,158242,88337],{"class":448},[147,158244,158245,158247,158249],{"class":149,"line":312},[147,158246,156524],{"class":157},[147,158248,445],{"class":397},[147,158250,153762],{"class":448},[147,158252,158253],{"class":149,"line":1454},[147,158254,2674],{"emptyLinePlaceholder":324},[147,158256,158257,158259,158261,158263,158265,158267],{"class":149,"line":1469},[147,158258,1805],{"class":397},[147,158260,15980],{"class":157},[147,158262,1984],{"class":397},[147,158264,156448],{"class":448},[147,158266,120699],{"class":397},[147,158268,158269],{"class":157}," has_ticket:\n",[147,158271,158272,158274,158276,158278],{"class":149,"line":1475},[147,158273,31573],{"class":448},[147,158275,401],{"class":157},[147,158277,157810],{"class":504},[147,158279,407],{"class":157},[367,158281,158283],{"id":158282},"_362-or","3.6.2 or",[19,158285,158286],{},"只要一个条件成立就成立。",[138,158288,158290],{"className":30652,"code":158289,"language":30654,"meta":143,"style":143},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[51,158291,158292,158301,158310,158314,158326],{"__ignoreMap":143},[147,158293,158294,158297,158299],{"class":149,"line":150},[147,158295,158296],{"class":157},"is_vip ",[147,158298,445],{"class":397},[147,158300,126077],{"class":448},[147,158302,158303,158306,158308],{"class":149,"line":312},[147,158304,158305],{"class":157},"coupon ",[147,158307,445],{"class":397},[147,158309,153762],{"class":448},[147,158311,158312],{"class":149,"line":1454},[147,158313,2674],{"emptyLinePlaceholder":324},[147,158315,158316,158318,158321,158323],{"class":149,"line":1469},[147,158317,1805],{"class":397},[147,158319,158320],{"class":157}," is_vip ",[147,158322,115360],{"class":397},[147,158324,158325],{"class":157}," coupon:\n",[147,158327,158328,158330,158332,158335],{"class":149,"line":1475},[147,158329,31573],{"class":448},[147,158331,401],{"class":157},[147,158333,158334],{"class":504},"\"可以享受优惠\"",[147,158336,407],{"class":157},[367,158338,158340],{"id":158339},"_363-not","3.6.3 not",[19,158342,158343],{},"取反。",[138,158345,158347],{"className":30652,"code":158346,"language":30654,"meta":143,"style":143},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[51,158348,158349,158358,158362,158371],{"__ignoreMap":143},[147,158350,158351,158354,158356],{"class":149,"line":150},[147,158352,158353],{"class":157},"is_closed ",[147,158355,445],{"class":397},[147,158357,126077],{"class":448},[147,158359,158360],{"class":149,"line":312},[147,158361,2674],{"emptyLinePlaceholder":324},[147,158363,158364,158366,158368],{"class":149,"line":1454},[147,158365,1805],{"class":397},[147,158367,39204],{"class":397},[147,158369,158370],{"class":157}," is_closed:\n",[147,158372,158373,158375,158377,158380],{"class":149,"line":1469},[147,158374,31573],{"class":448},[147,158376,401],{"class":157},[147,158378,158379],{"class":504},"\"店铺营业中\"",[147,158381,407],{"class":157},[14,158383,158385],{"id":158384},"_37-链式比较","3.7 链式比较",[19,158387,158388],{},"Python 支持链式比较：",[138,158390,158392],{"className":30652,"code":158391,"language":30654,"meta":143,"style":143},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[51,158393,158394,158403,158407,158424],{"__ignoreMap":143},[147,158395,158396,158398,158400],{"class":149,"line":150},[147,158397,155521],{"class":157},[147,158399,445],{"class":397},[147,158401,158402],{"class":448}," 85\n",[147,158404,158405],{"class":149,"line":312},[147,158406,2674],{"emptyLinePlaceholder":324},[147,158408,158409,158411,158413,158416,158418,158420,158422],{"class":149,"line":1454},[147,158410,1805],{"class":397},[147,158412,4367],{"class":448},[147,158414,158415],{"class":397}," \u003C=",[147,158417,157946],{"class":157},[147,158419,1862],{"class":397},[147,158421,6028],{"class":448},[147,158423,4013],{"class":157},[147,158425,158426,158428,158430,158433],{"class":149,"line":1469},[147,158427,31573],{"class":448},[147,158429,401],{"class":157},[147,158431,158432],{"class":504},"\"成绩合法\"",[147,158434,407],{"class":157},[19,158436,158437],{},"等价于：",[138,158439,158441],{"className":30652,"code":158440,"language":30654,"meta":143,"style":143},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[51,158442,158443,158463],{"__ignoreMap":143},[147,158444,158445,158447,158449,158451,158453,158455,158457,158459,158461],{"class":149,"line":150},[147,158446,1805],{"class":397},[147,158448,157946],{"class":157},[147,158450,1984],{"class":397},[147,158452,4367],{"class":448},[147,158454,120699],{"class":397},[147,158456,157946],{"class":157},[147,158458,1862],{"class":397},[147,158460,6028],{"class":448},[147,158462,4013],{"class":157},[147,158464,158465,158467,158469,158471],{"class":149,"line":312},[147,158466,31573],{"class":448},[147,158468,401],{"class":157},[147,158470,158432],{"class":504},[147,158472,407],{"class":157},[14,158474,158476],{"id":158475},"_38-真值和假值","3.8 真值和假值",[19,158478,116737,158479,158481],{},[51,158480,1805],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,158483,158484],{},"假值：",[138,158486,158488],{"className":30652,"code":158487,"language":30654,"meta":143,"style":143},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[51,158489,158490,158494,158499,158503,158507,158512,158516,158520,158525],{"__ignoreMap":143},[147,158491,158492],{"class":149,"line":150},[147,158493,157680],{"class":448},[147,158495,158496],{"class":149,"line":312},[147,158497,158498],{"class":448},"None\n",[147,158500,158501],{"class":149,"line":1454},[147,158502,3359],{"class":448},[147,158504,158505],{"class":149,"line":1469},[147,158506,32616],{"class":448},[147,158508,158509],{"class":149,"line":1475},[147,158510,158511],{"class":504},"\"\"\n",[147,158513,158514],{"class":149,"line":1489},[147,158515,32631],{"class":157},[147,158517,158518],{"class":149,"line":1495},[147,158519,2250],{"class":157},[147,158521,158522],{"class":149,"line":1586},[147,158523,158524],{"class":157},"{}\n",[147,158526,158527,158529],{"class":149,"line":1592},[147,158528,155453],{"class":448},[147,158530,2250],{"class":157},[19,158532,15408],{},[138,158534,158536],{"className":30652,"code":158535,"language":30654,"meta":143,"style":143},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[51,158537,158538,158552,158556,158563,158583,158589],{"__ignoreMap":143},[147,158539,158540,158542,158544,158546,158548,158550],{"class":149,"line":150},[147,158541,146699],{"class":157},[147,158543,445],{"class":397},[147,158545,60878],{"class":448},[147,158547,401],{"class":157},[147,158549,152542],{"class":504},[147,158551,407],{"class":157},[147,158553,158554],{"class":149,"line":312},[147,158555,2674],{"emptyLinePlaceholder":324},[147,158557,158558,158560],{"class":149,"line":1454},[147,158559,1805],{"class":397},[147,158561,158562],{"class":157}," name:\n",[147,158564,158565,158567,158569,158571,158573,158575,158577,158579,158581],{"class":149,"line":1469},[147,158566,31573],{"class":448},[147,158568,401],{"class":157},[147,158570,452],{"class":397},[147,158572,157217],{"class":504},[147,158574,1295],{"class":448},[147,158576,80082],{"class":157},[147,158578,1345],{"class":448},[147,158580,650],{"class":504},[147,158582,407],{"class":157},[147,158584,158585,158587],{"class":149,"line":1475},[147,158586,1975],{"class":397},[147,158588,4013],{"class":157},[147,158590,158591,158593,158595,158598],{"class":149,"line":1489},[147,158592,31573],{"class":448},[147,158594,401],{"class":157},[147,158596,158597],{"class":504},"\"姓名不能为空\"",[147,158599,407],{"class":157},[14,158601,158603],{"id":158602},"_39-match语句","3.9 match语句",[19,158605,158606,158607,158609],{},"Python 3.10 开始支持 ",[51,158608,71538],{},"。它适合处理固定选项。",[138,158611,158613],{"className":30652,"code":158612,"language":30654,"meta":143,"style":143},"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",[51,158614,158615,158631,158635,158642,158652,158663,158672,158683,158692,158703,158710],{"__ignoreMap":143},[147,158616,158617,158620,158622,158624,158626,158629],{"class":149,"line":150},[147,158618,158619],{"class":157},"command ",[147,158621,445],{"class":397},[147,158623,60878],{"class":448},[147,158625,401],{"class":157},[147,158627,158628],{"class":504},"\"请输入命令:\"",[147,158630,407],{"class":157},[147,158632,158633],{"class":149,"line":312},[147,158634,2674],{"emptyLinePlaceholder":324},[147,158636,158637,158639],{"class":149,"line":1454},[147,158638,71538],{"class":397},[147,158640,158641],{"class":157}," command:\n",[147,158643,158644,158647,158650],{"class":149,"line":1469},[147,158645,158646],{"class":397},"    case",[147,158648,158649],{"class":504}," \"start\"",[147,158651,4013],{"class":157},[147,158653,158654,158656,158658,158661],{"class":149,"line":1475},[147,158655,32725],{"class":448},[147,158657,401],{"class":157},[147,158659,158660],{"class":504},"\"启动\"",[147,158662,407],{"class":157},[147,158664,158665,158667,158670],{"class":149,"line":1489},[147,158666,158646],{"class":397},[147,158668,158669],{"class":504}," \"stop\"",[147,158671,4013],{"class":157},[147,158673,158674,158676,158678,158681],{"class":149,"line":1495},[147,158675,32725],{"class":448},[147,158677,401],{"class":157},[147,158679,158680],{"class":504},"\"停止\"",[147,158682,407],{"class":157},[147,158684,158685,158687,158690],{"class":149,"line":1586},[147,158686,158646],{"class":397},[147,158688,158689],{"class":504}," \"restart\"",[147,158691,4013],{"class":157},[147,158693,158694,158696,158698,158701],{"class":149,"line":1592},[147,158695,32725],{"class":448},[147,158697,401],{"class":157},[147,158699,158700],{"class":504},"\"重启\"",[147,158702,407],{"class":157},[147,158704,158705,158707],{"class":149,"line":1604},[147,158706,158646],{"class":397},[147,158708,158709],{"class":157}," _:\n",[147,158711,158712,158714,158716,158719],{"class":149,"line":1886},[147,158713,32725],{"class":448},[147,158715,401],{"class":157},[147,158717,158718],{"class":504},"\"未知命令\"",[147,158720,407],{"class":157},[19,158722,158723,158724,158726,158727,158729],{},"入门阶段掌握 ",[51,158725,154821],{}," 更重要，",[51,158728,71538],{}," 可以作为补充。",[14,158731,158733],{"id":158732},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,158735,123562],{},[350,158737,158738,158741,158744],{},[353,158739,158740],{},"输入成绩。",[353,158742,158743],{},"判断成绩是否合法。",[353,158745,158746],{},"输出等级。",[19,158748,10309],{},[138,158750,158752],{"className":30652,"code":158751,"language":30654,"meta":143,"style":143},"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",[51,158753,158754,158772,158776,158794,158805,158817,158828,158840,158851,158864,158875,158887,158898,158904],{"__ignoreMap":143},[147,158755,158756,158758,158760,158762,158764,158766,158768,158770],{"class":149,"line":150},[147,158757,155521],{"class":157},[147,158759,445],{"class":397},[147,158761,110067],{"class":448},[147,158763,401],{"class":157},[147,158765,54094],{"class":448},[147,158767,401],{"class":157},[147,158769,152572],{"class":504},[147,158771,30771],{"class":157},[147,158773,158774],{"class":149,"line":312},[147,158775,2674],{"emptyLinePlaceholder":324},[147,158777,158778,158780,158782,158784,158786,158788,158790,158792],{"class":149,"line":1454},[147,158779,1805],{"class":397},[147,158781,39204],{"class":397},[147,158783,4367],{"class":448},[147,158785,158415],{"class":397},[147,158787,157946],{"class":157},[147,158789,1862],{"class":397},[147,158791,6028],{"class":448},[147,158793,4013],{"class":157},[147,158795,158796,158798,158800,158803],{"class":149,"line":1469},[147,158797,31573],{"class":448},[147,158799,401],{"class":157},[147,158801,158802],{"class":504},"\"成绩不合法\"",[147,158804,407],{"class":157},[147,158806,158807,158809,158811,158813,158815],{"class":149,"line":1475},[147,158808,157969],{"class":397},[147,158810,157946],{"class":157},[147,158812,1984],{"class":397},[147,158814,157951],{"class":448},[147,158816,4013],{"class":157},[147,158818,158819,158821,158823,158826],{"class":149,"line":1489},[147,158820,31573],{"class":448},[147,158822,401],{"class":157},[147,158824,158825],{"class":504},"\"等级:A\"",[147,158827,407],{"class":157},[147,158829,158830,158832,158834,158836,158838],{"class":149,"line":1495},[147,158831,157969],{"class":397},[147,158833,157946],{"class":157},[147,158835,1984],{"class":397},[147,158837,157976],{"class":448},[147,158839,4013],{"class":157},[147,158841,158842,158844,158846,158849],{"class":149,"line":1586},[147,158843,31573],{"class":448},[147,158845,401],{"class":157},[147,158847,158848],{"class":504},"\"等级:B\"",[147,158850,407],{"class":157},[147,158852,158853,158855,158857,158859,158862],{"class":149,"line":1592},[147,158854,157969],{"class":397},[147,158856,157946],{"class":157},[147,158858,1984],{"class":397},[147,158860,158861],{"class":448}," 70",[147,158863,4013],{"class":157},[147,158865,158866,158868,158870,158873],{"class":149,"line":1604},[147,158867,31573],{"class":448},[147,158869,401],{"class":157},[147,158871,158872],{"class":504},"\"等级:C\"",[147,158874,407],{"class":157},[147,158876,158877,158879,158881,158883,158885],{"class":149,"line":1886},[147,158878,157969],{"class":397},[147,158880,157946],{"class":157},[147,158882,1984],{"class":397},[147,158884,158000],{"class":448},[147,158886,4013],{"class":157},[147,158888,158889,158891,158893,158896],{"class":149,"line":1891},[147,158890,31573],{"class":448},[147,158892,401],{"class":157},[147,158894,158895],{"class":504},"\"等级:D\"",[147,158897,407],{"class":157},[147,158899,158900,158902],{"class":149,"line":1897},[147,158901,1975],{"class":397},[147,158903,4013],{"class":157},[147,158905,158906,158908,158910,158913],{"class":149,"line":1902},[147,158907,31573],{"class":448},[147,158909,401],{"class":157},[147,158911,158912],{"class":504},"\"等级:E\"",[147,158914,407],{"class":157},[14,158916,158918],{"id":158917},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,158920,123562],{},[350,158922,158923,158926,158929,158932],{},[353,158924,158925],{},"输入消费金额。",[353,158927,158928],{},"输入会员等级，普通、银卡、金卡。",[353,158930,158931],{},"普通不打折，银卡 9 折，金卡 8 折。",[353,158933,158934],{},"满 500 再减 50。",[19,158936,10309],{},[138,158938,158940],{"className":30652,"code":158939,"language":30654,"meta":143,"style":143},"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",[51,158941,158942,158962,158978,158982,158990,158994,159008,159018,159031,159040,159053,159061,159067,159078,159082,159096,159100,159114,159124,159128],{"__ignoreMap":143},[147,158943,158944,158947,158949,158951,158953,158955,158957,158960],{"class":149,"line":150},[147,158945,158946],{"class":157},"amount ",[147,158948,445],{"class":397},[147,158950,110067],{"class":448},[147,158952,401],{"class":157},[147,158954,54094],{"class":448},[147,158956,401],{"class":157},[147,158958,158959],{"class":504},"\"请输入消费金额:\"",[147,158961,30771],{"class":157},[147,158963,158964,158967,158969,158971,158973,158976],{"class":149,"line":312},[147,158965,158966],{"class":157},"level ",[147,158968,445],{"class":397},[147,158970,60878],{"class":448},[147,158972,401],{"class":157},[147,158974,158975],{"class":504},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[147,158977,407],{"class":157},[147,158979,158980],{"class":149,"line":1454},[147,158981,2674],{"emptyLinePlaceholder":324},[147,158983,158984,158986,158988],{"class":149,"line":1469},[147,158985,157399],{"class":157},[147,158987,445],{"class":397},[147,158989,55972],{"class":448},[147,158991,158992],{"class":149,"line":1475},[147,158993,2674],{"emptyLinePlaceholder":324},[147,158995,158996,158998,159001,159003,159006],{"class":149,"line":1489},[147,158997,1805],{"class":397},[147,158999,159000],{"class":157}," level ",[147,159002,3223],{"class":397},[147,159004,159005],{"class":504}," \"银卡\"",[147,159007,4013],{"class":157},[147,159009,159010,159013,159015],{"class":149,"line":1495},[147,159011,159012],{"class":157},"    discount ",[147,159014,445],{"class":397},[147,159016,159017],{"class":448}," 0.9\n",[147,159019,159020,159022,159024,159026,159029],{"class":149,"line":1586},[147,159021,157969],{"class":397},[147,159023,159000],{"class":157},[147,159025,3223],{"class":397},[147,159027,159028],{"class":504}," \"金卡\"",[147,159030,4013],{"class":157},[147,159032,159033,159035,159037],{"class":149,"line":1592},[147,159034,159012],{"class":157},[147,159036,445],{"class":397},[147,159038,159039],{"class":448}," 0.8\n",[147,159041,159042,159044,159046,159048,159051],{"class":149,"line":1604},[147,159043,157969],{"class":397},[147,159045,159000],{"class":157},[147,159047,3223],{"class":397},[147,159049,159050],{"class":504}," \"普通\"",[147,159052,4013],{"class":157},[147,159054,159055,159057,159059],{"class":149,"line":1886},[147,159056,159012],{"class":157},[147,159058,445],{"class":397},[147,159060,55972],{"class":448},[147,159062,159063,159065],{"class":149,"line":1891},[147,159064,1975],{"class":397},[147,159066,4013],{"class":157},[147,159068,159069,159071,159073,159076],{"class":149,"line":1897},[147,159070,31573],{"class":448},[147,159072,401],{"class":157},[147,159074,159075],{"class":504},"\"会员等级输入错误，按普通会员计算\"",[147,159077,407],{"class":157},[147,159079,159080],{"class":149,"line":1902},[147,159081,2674],{"emptyLinePlaceholder":324},[147,159083,159084,159087,159089,159092,159094],{"class":149,"line":1916},[147,159085,159086],{"class":157},"pay ",[147,159088,445],{"class":397},[147,159090,159091],{"class":157}," amount ",[147,159093,854],{"class":397},[147,159095,157438],{"class":157},[147,159097,159098],{"class":149,"line":1921},[147,159099,2674],{"emptyLinePlaceholder":324},[147,159101,159102,159104,159107,159109,159112],{"class":149,"line":1927},[147,159103,1805],{"class":397},[147,159105,159106],{"class":157}," pay ",[147,159108,1984],{"class":397},[147,159110,159111],{"class":448}," 500",[147,159113,4013],{"class":157},[147,159115,159116,159119,159121],{"class":149,"line":1948},[147,159117,159118],{"class":157},"    pay ",[147,159120,150415],{"class":397},[147,159122,159123],{"class":448}," 50\n",[147,159125,159126],{"class":149,"line":1953},[147,159127,2674],{"emptyLinePlaceholder":324},[147,159129,159130,159132,159134,159136,159138,159140,159143,159145,159147,159149],{"class":149,"line":1967},[147,159131,30689],{"class":448},[147,159133,401],{"class":157},[147,159135,452],{"class":397},[147,159137,157519],{"class":504},[147,159139,1295],{"class":448},[147,159141,159142],{"class":157},"pay",[147,159144,157322],{"class":397},[147,159146,1345],{"class":448},[147,159148,157175],{"class":504},[147,159150,407],{"class":157},[14,159152,159154],{"id":159153},"_312-易错点","3.12 易错点",[350,159156,159157,159160,159163,159166,159171],{},[353,159158,159159],{},"冒号不能漏。",[353,159161,159162],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[353,159164,159165],{},"多分支判断要注意顺序。",[353,159167,159168,159169,28659],{},"判断相等用 ",[51,159170,3223],{},[353,159172,159173],{},"字符串比较区分大小写：",[138,159175,159177],{"className":30652,"code":159176,"language":30654,"meta":143,"style":143},"\"Y\" == \"y\"  # False\n",[51,159178,159179],{"__ignoreMap":143},[147,159180,159181,159184,159186,159188],{"class":149,"line":150},[147,159182,159183],{"class":504},"\"Y\"",[147,159185,101831],{"class":397},[147,159187,158168],{"class":504},[147,159189,159190],{"class":458},"  # False\n",[19,159192,159193],{},"可转换后再判断：",[138,159195,159197],{"className":30652,"code":159196,"language":30654,"meta":143,"style":143},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[51,159198,159199,159216,159229],{"__ignoreMap":143},[147,159200,159201,159204,159206,159208,159210,159213],{"class":149,"line":150},[147,159202,159203],{"class":157},"answer ",[147,159205,445],{"class":397},[147,159207,60878],{"class":448},[147,159209,401],{"class":157},[147,159211,159212],{"class":504},"\"是否继续(y\u002Fn):\"",[147,159214,159215],{"class":157},").lower()\n",[147,159217,159218,159220,159223,159225,159227],{"class":149,"line":312},[147,159219,1805],{"class":397},[147,159221,159222],{"class":157}," answer ",[147,159224,3223],{"class":397},[147,159226,158168],{"class":504},[147,159228,4013],{"class":157},[147,159230,159231,159233,159235,159238],{"class":149,"line":1454},[147,159232,31573],{"class":448},[147,159234,401],{"class":157},[147,159236,159237],{"class":504},"\"继续\"",[147,159239,407],{"class":157},[14,159241,159243],{"id":159242},"_313-本章练习","3.13 本章练习",[350,159245,159246,159249,159252,159255,159265],{},[353,159247,159248],{},"输入年龄，判断是否成年。",[353,159250,159251],{},"输入年份，判断是否为闰年。",[353,159253,159254],{},"输入三个数字，输出最大值。",[353,159256,159257,159258,159261,159262,159264],{},"写登录判断：用户名是 ",[51,159259,159260],{},"admin"," 且密码是 ",[51,159263,15357],{}," 才登录成功。",[353,159266,159267],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[308,159269,159270],{},"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":143,"searchDepth":312,"depth":312,"links":159272},[159273,159274,159275,159276,159277,159278,159283,159284,159285,159286,159287,159288,159289],{"id":157661,"depth":312,"text":157662},{"id":157714,"depth":312,"text":157715},{"id":157818,"depth":312,"text":157819},{"id":157908,"depth":312,"text":157909},{"id":158098,"depth":312,"text":158099},{"id":158221,"depth":312,"text":158222,"children":159279},[159280,159281,159282],{"id":158225,"depth":1454,"text":158226},{"id":158282,"depth":1454,"text":158283},{"id":158339,"depth":1454,"text":158340},{"id":158384,"depth":312,"text":158385},{"id":158475,"depth":312,"text":158476},{"id":158602,"depth":312,"text":158603},{"id":158732,"depth":312,"text":158733},{"id":158917,"depth":312,"text":158918},{"id":159153,"depth":312,"text":159154},{"id":159242,"depth":312,"text":159243},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157653,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159296,"title":159297,"body":159298,"description":321,"extension":322,"meta":161067,"navigation":324,"path":161068,"seo":161069,"stem":161070,"__hash__":161071},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159299,"toc":161047},[159300,159303,159307,159313,159316,159333,159337,159339,159356,159358,159403,159405,159422,159426,159429,159495,159498,159516,159520,159681,159690,159694,159698,159703,159750,159752,159758,159762,159767,159814,159816,159822,159826,159831,159867,159870,159917,159921,159927,159985,159990,160021,160026,160030,160085,160088,160160,160163,160222,160226,160229,160304,160307,160311,160417,160420,160446,160450,160462,160531,160534,160626,160630,160632,160643,160645,160775,160779,160981,160989,160993,161023,161027,161044],[10,159301,159297],{"id":159302},"_4-循环语句",[14,159304,159306],{"id":159305},"_41-为什么需要循环","4.1 为什么需要循环",[19,159308,159309,159310,159312],{},"如果要输出 1 到 100，不应该写 100 行 ",[51,159311,146635],{},"，而应该用循环。",[19,159314,159315],{},"循环适合处理重复任务：",[350,159317,159318,159321,159324,159327,159330],{},[353,159319,159320],{},"重复输出。",[353,159322,159323],{},"重复输入。",[353,159325,159326],{},"遍历数据。",[353,159328,159329],{},"持续执行菜单。",[353,159331,159332],{},"批量处理文件或数据。",[14,159334,159336],{"id":159335},"_42-while循环","4.2 while循环",[19,159338,5455],{},[138,159340,159342],{"className":30652,"code":159341,"language":30654,"meta":143,"style":143},"while 条件:\n    循环体\n",[51,159343,159344,159351],{"__ignoreMap":143},[147,159345,159346,159348],{"class":149,"line":150},[147,159347,108933],{"class":397},[147,159349,159350],{"class":157}," 条件:\n",[147,159352,159353],{"class":149,"line":312},[147,159354,159355],{"class":157},"    循环体\n",[19,159357,15408],{},[138,159359,159361],{"className":30652,"code":159360,"language":30654,"meta":143,"style":143},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[51,159362,159363,159371,159375,159387,159394],{"__ignoreMap":143},[147,159364,159365,159367,159369],{"class":149,"line":150},[147,159366,100420],{"class":157},[147,159368,445],{"class":397},[147,159370,55972],{"class":448},[147,159372,159373],{"class":149,"line":312},[147,159374,2674],{"emptyLinePlaceholder":324},[147,159376,159377,159379,159381,159383,159385],{"class":149,"line":1454},[147,159378,108933],{"class":397},[147,159380,9712],{"class":157},[147,159382,1862],{"class":397},[147,159384,2422],{"class":448},[147,159386,4013],{"class":157},[147,159388,159389,159391],{"class":149,"line":1469},[147,159390,31573],{"class":448},[147,159392,159393],{"class":157},"(i)\n",[147,159395,159396,159399,159401],{"class":149,"line":1475},[147,159397,159398],{"class":157},"    i ",[147,159400,9751],{"class":397},[147,159402,55972],{"class":448},[19,159404,81201],{},[350,159406,159407,159413,159416,159419],{},[353,159408,159409,159410,28659],{},"判断条件 ",[51,159411,159412],{},"i \u003C= 5",[353,159414,159415],{},"条件成立，执行循环体。",[353,159417,159418],{},"执行完后回到条件判断。",[353,159420,159421],{},"条件不成立，退出循环。",[14,159423,159425],{"id":159424},"_43-while累加","4.3 while累加",[19,159427,159428],{},"计算 1 到 100 的和：",[138,159430,159432],{"className":30652,"code":159431,"language":30654,"meta":143,"style":143},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[51,159433,159434,159442,159450,159454,159466,159476,159484,159488],{"__ignoreMap":143},[147,159435,159436,159438,159440],{"class":149,"line":150},[147,159437,100420],{"class":157},[147,159439,445],{"class":397},[147,159441,55972],{"class":448},[147,159443,159444,159446,159448],{"class":149,"line":312},[147,159445,157423],{"class":157},[147,159447,445],{"class":397},[147,159449,47607],{"class":448},[147,159451,159452],{"class":149,"line":1454},[147,159453,2674],{"emptyLinePlaceholder":324},[147,159455,159456,159458,159460,159462,159464],{"class":149,"line":1469},[147,159457,108933],{"class":397},[147,159459,9712],{"class":157},[147,159461,1862],{"class":397},[147,159463,6028],{"class":448},[147,159465,4013],{"class":157},[147,159467,159468,159471,159473],{"class":149,"line":1475},[147,159469,159470],{"class":157},"    total ",[147,159472,9751],{"class":397},[147,159474,159475],{"class":157}," i\n",[147,159477,159478,159480,159482],{"class":149,"line":1489},[147,159479,159398],{"class":157},[147,159481,9751],{"class":397},[147,159483,55972],{"class":448},[147,159485,159486],{"class":149,"line":1495},[147,159487,2674],{"emptyLinePlaceholder":324},[147,159489,159490,159492],{"class":149,"line":1586},[147,159491,30689],{"class":448},[147,159493,159494],{"class":157},"(total)\n",[19,159496,159497],{},"核心思想：",[350,159499,159500,159505,159510],{},[353,159501,159502,159504],{},[51,159503,840],{}," 控制循环次数。",[353,159506,159507,159509],{},[51,159508,157524],{}," 保存累加结果。",[353,159511,159512,159513,159515],{},"每轮循环都要更新 ",[51,159514,840],{},"，否则可能死循环。",[14,159517,159519],{"id":159518},"_44-while猜数字","4.4 while猜数字",[138,159521,159523],{"className":30652,"code":159522,"language":30654,"meta":143,"style":143},"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",[51,159524,159525,159531,159535,159552,159560,159564,159572,159592,159601,159605,159617,159628,159638,159649,159655,159677],{"__ignoreMap":143},[147,159526,159527,159529],{"class":149,"line":150},[147,159528,30666],{"class":397},[147,159530,45602],{"class":157},[147,159532,159533],{"class":149,"line":312},[147,159534,2674],{"emptyLinePlaceholder":324},[147,159536,159537,159539,159541,159544,159546,159548,159550],{"class":149,"line":1454},[147,159538,159203],{"class":157},[147,159540,445],{"class":397},[147,159542,159543],{"class":157}," random.randint(",[147,159545,616],{"class":448},[147,159547,12709],{"class":157},[147,159549,710],{"class":448},[147,159551,407],{"class":157},[147,159553,159554,159556,159558],{"class":149,"line":1469},[147,159555,146854],{"class":157},[147,159557,445],{"class":397},[147,159559,47607],{"class":448},[147,159561,159562],{"class":149,"line":1475},[147,159563,2674],{"emptyLinePlaceholder":324},[147,159565,159566,159568,159570],{"class":149,"line":1489},[147,159567,108933],{"class":397},[147,159569,95564],{"class":448},[147,159571,4013],{"class":157},[147,159573,159574,159577,159579,159581,159583,159585,159587,159590],{"class":149,"line":1495},[147,159575,159576],{"class":157},"    guess ",[147,159578,445],{"class":397},[147,159580,2656],{"class":448},[147,159582,401],{"class":157},[147,159584,54094],{"class":448},[147,159586,401],{"class":157},[147,159588,159589],{"class":504},"\"请输入1到100之间的数字:\"",[147,159591,30771],{"class":157},[147,159593,159594,159597,159599],{"class":149,"line":1586},[147,159595,159596],{"class":157},"    count ",[147,159598,9751],{"class":397},[147,159600,55972],{"class":448},[147,159602,159603],{"class":149,"line":1592},[147,159604,2674],{"emptyLinePlaceholder":324},[147,159606,159607,159609,159612,159614],{"class":149,"line":1604},[147,159608,3375],{"class":397},[147,159610,159611],{"class":157}," guess ",[147,159613,1359],{"class":397},[147,159615,159616],{"class":157}," answer:\n",[147,159618,159619,159621,159623,159626],{"class":149,"line":1886},[147,159620,32725],{"class":448},[147,159622,401],{"class":157},[147,159624,159625],{"class":504},"\"猜大了\"",[147,159627,407],{"class":157},[147,159629,159630,159632,159634,159636],{"class":149,"line":1891},[147,159631,39567],{"class":397},[147,159633,159611],{"class":157},[147,159635,1309],{"class":397},[147,159637,159616],{"class":157},[147,159639,159640,159642,159644,159647],{"class":149,"line":1897},[147,159641,32725],{"class":448},[147,159643,401],{"class":157},[147,159645,159646],{"class":504},"\"猜小了\"",[147,159648,407],{"class":157},[147,159650,159651,159653],{"class":149,"line":1902},[147,159652,158185],{"class":397},[147,159654,4013],{"class":157},[147,159656,159657,159659,159661,159663,159666,159668,159670,159672,159675],{"class":149,"line":1916},[147,159658,32725],{"class":448},[147,159660,401],{"class":157},[147,159662,452],{"class":397},[147,159664,159665],{"class":504},"\"猜对了，一共猜了",[147,159667,1295],{"class":448},[147,159669,84706],{"class":157},[147,159671,1345],{"class":448},[147,159673,159674],{"class":504},"次\"",[147,159676,407],{"class":157},[147,159678,159679],{"class":149,"line":1921},[147,159680,31901],{"class":397},[19,159682,159683,159686,159687,159689],{},[51,159684,159685],{},"while True"," 表示无限循环，通常配合 ",[51,159688,2327],{}," 使用。",[14,159691,159693],{"id":159692},"_45-break和continue","4.5 break和continue",[367,159695,159697],{"id":159696},"_451-break","4.5.1 break",[19,159699,159700,159702],{},[51,159701,2327],{}," 直接结束整个循环。",[138,159704,159706],{"className":30652,"code":159705,"language":30654,"meta":143,"style":143},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[51,159707,159708,159728,159740,159744],{"__ignoreMap":143},[147,159709,159710,159712,159714,159716,159718,159720,159722,159724,159726],{"class":149,"line":150},[147,159711,3299],{"class":397},[147,159713,9712],{"class":157},[147,159715,26317],{"class":397},[147,159717,32717],{"class":448},[147,159719,401],{"class":157},[147,159721,616],{"class":448},[147,159723,12709],{"class":157},[147,159725,743],{"class":448},[147,159727,31060],{"class":157},[147,159729,159730,159732,159734,159736,159738],{"class":149,"line":312},[147,159731,3375],{"class":397},[147,159733,9712],{"class":157},[147,159735,3223],{"class":397},[147,159737,78342],{"class":448},[147,159739,4013],{"class":157},[147,159741,159742],{"class":149,"line":1454},[147,159743,31901],{"class":397},[147,159745,159746,159748],{"class":149,"line":1469},[147,159747,31573],{"class":448},[147,159749,159393],{"class":157},[19,159751,146620],{},[138,159753,159756],{"className":159754,"code":159755,"language":5461,"meta":143},[5459],"1\n2\n",[51,159757,159755],{"__ignoreMap":143},[367,159759,159761],{"id":159760},"_452-continue","4.5.2 continue",[19,159763,159764,159766],{},[51,159765,154835],{}," 跳过本轮剩余代码，进入下一轮循环。",[138,159768,159770],{"className":30652,"code":159769,"language":30654,"meta":143,"style":143},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[51,159771,159772,159792,159804,159808],{"__ignoreMap":143},[147,159773,159774,159776,159778,159780,159782,159784,159786,159788,159790],{"class":149,"line":150},[147,159775,3299],{"class":397},[147,159777,9712],{"class":157},[147,159779,26317],{"class":397},[147,159781,32717],{"class":448},[147,159783,401],{"class":157},[147,159785,616],{"class":448},[147,159787,12709],{"class":157},[147,159789,743],{"class":448},[147,159791,31060],{"class":157},[147,159793,159794,159796,159798,159800,159802],{"class":149,"line":312},[147,159795,3375],{"class":397},[147,159797,9712],{"class":157},[147,159799,3223],{"class":397},[147,159801,78342],{"class":448},[147,159803,4013],{"class":157},[147,159805,159806],{"class":149,"line":1454},[147,159807,148675],{"class":397},[147,159809,159810,159812],{"class":149,"line":1469},[147,159811,31573],{"class":448},[147,159813,159393],{"class":157},[19,159815,146620],{},[138,159817,159820],{"className":159818,"code":159819,"language":5461,"meta":143},[5459],"1\n2\n4\n5\n",[51,159821,159819],{"__ignoreMap":143},[14,159823,159825],{"id":159824},"_46-for循环","4.6 for循环",[19,159827,159828,159830],{},[51,159829,3299],{}," 常用于遍历序列。",[138,159832,159834],{"className":30652,"code":159833,"language":30654,"meta":143,"style":143},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[51,159835,159836,159845,159849,159860],{"__ignoreMap":143},[147,159837,159838,159840,159842],{"class":149,"line":150},[147,159839,146699],{"class":157},[147,159841,445],{"class":397},[147,159843,159844],{"class":504}," \"python\"\n",[147,159846,159847],{"class":149,"line":312},[147,159848,2674],{"emptyLinePlaceholder":324},[147,159850,159851,159853,159856,159858],{"class":149,"line":1454},[147,159852,3299],{"class":397},[147,159854,159855],{"class":157}," ch ",[147,159857,26317],{"class":397},[147,159859,158562],{"class":157},[147,159861,159862,159864],{"class":149,"line":1469},[147,159863,31573],{"class":448},[147,159865,159866],{"class":157},"(ch)\n",[19,159868,159869],{},"遍历列表：",[138,159871,159873],{"className":30652,"code":159872,"language":30654,"meta":143,"style":143},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[51,159874,159875,159897,159901,159911],{"__ignoreMap":143},[147,159876,159877,159880,159882,159884,159886,159888,159890,159892,159895],{"class":149,"line":150},[147,159878,159879],{"class":157},"students ",[147,159881,445],{"class":397},[147,159883,52499],{"class":157},[147,159885,150051],{"class":504},[147,159887,12709],{"class":157},[147,159889,151099],{"class":504},[147,159891,12709],{"class":157},[147,159893,159894],{"class":504},"\"小刚\"",[147,159896,33520],{"class":157},[147,159898,159899],{"class":149,"line":312},[147,159900,2674],{"emptyLinePlaceholder":324},[147,159902,159903,159905,159907,159909],{"class":149,"line":1454},[147,159904,3299],{"class":397},[147,159906,152300],{"class":157},[147,159908,26317],{"class":397},[147,159910,152305],{"class":157},[147,159912,159913,159915],{"class":149,"line":1469},[147,159914,31573],{"class":448},[147,159916,150205],{"class":157},[14,159918,159920],{"id":159919},"_47-range函数","4.7 range函数",[19,159922,159923,159926],{},[51,159924,159925],{},"range()"," 用于生成整数序列。",[138,159928,159930],{"className":30652,"code":159929,"language":30654,"meta":143,"style":143},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[51,159931,159932,159946,159964],{"__ignoreMap":143},[147,159933,159934,159936,159938,159940,159943],{"class":149,"line":150},[147,159935,33690],{"class":448},[147,159937,401],{"class":157},[147,159939,718],{"class":448},[147,159941,159942],{"class":157},")          ",[147,159944,159945],{"class":458},"# 0,1,2,3,4\n",[147,159947,159948,159950,159952,159954,159956,159958,159961],{"class":149,"line":312},[147,159949,33690],{"class":448},[147,159951,401],{"class":157},[147,159953,616],{"class":448},[147,159955,12709],{"class":157},[147,159957,718],{"class":448},[147,159959,159960],{"class":157},")       ",[147,159962,159963],{"class":458},"# 1,2,3,4\n",[147,159965,159966,159968,159970,159972,159974,159976,159978,159980,159982],{"class":149,"line":1454},[147,159967,33690],{"class":448},[147,159969,401],{"class":157},[147,159971,616],{"class":448},[147,159973,12709],{"class":157},[147,159975,845],{"class":448},[147,159977,12709],{"class":157},[147,159979,477],{"class":448},[147,159981,155824],{"class":157},[147,159983,159984],{"class":458},"# 1,3,5,7,9\n",[19,159986,159987,159988,24892],{},"配合 ",[51,159989,3299],{},[138,159991,159993],{"className":30652,"code":159992,"language":30654,"meta":143,"style":143},"for i in range(1, 6):\n    print(i)\n",[51,159994,159995,160015],{"__ignoreMap":143},[147,159996,159997,159999,160001,160003,160005,160007,160009,160011,160013],{"class":149,"line":150},[147,159998,3299],{"class":397},[147,160000,9712],{"class":157},[147,160002,26317],{"class":397},[147,160004,32717],{"class":448},[147,160006,401],{"class":157},[147,160008,616],{"class":448},[147,160010,12709],{"class":157},[147,160012,743],{"class":448},[147,160014,31060],{"class":157},[147,160016,160017,160019],{"class":149,"line":312},[147,160018,31573],{"class":448},[147,160020,159393],{"class":157},[19,160022,9299,160023,160025],{},[51,160024,33690],{}," 的结束值不包含在内。",[14,160027,160029],{"id":160028},"_48-for循环求和","4.8 for循环求和",[138,160031,160033],{"className":30652,"code":160032,"language":30654,"meta":143,"style":143},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[51,160034,160035,160043,160047,160067,160075,160079],{"__ignoreMap":143},[147,160036,160037,160039,160041],{"class":149,"line":150},[147,160038,157423],{"class":157},[147,160040,445],{"class":397},[147,160042,47607],{"class":448},[147,160044,160045],{"class":149,"line":312},[147,160046,2674],{"emptyLinePlaceholder":324},[147,160048,160049,160051,160053,160055,160057,160059,160061,160063,160065],{"class":149,"line":1454},[147,160050,3299],{"class":397},[147,160052,9712],{"class":157},[147,160054,26317],{"class":397},[147,160056,32717],{"class":448},[147,160058,401],{"class":157},[147,160060,616],{"class":448},[147,160062,12709],{"class":157},[147,160064,736],{"class":448},[147,160066,31060],{"class":157},[147,160068,160069,160071,160073],{"class":149,"line":1469},[147,160070,159470],{"class":157},[147,160072,9751],{"class":397},[147,160074,159475],{"class":157},[147,160076,160077],{"class":149,"line":1475},[147,160078,2674],{"emptyLinePlaceholder":324},[147,160080,160081,160083],{"class":149,"line":1489},[147,160082,30689],{"class":448},[147,160084,159494],{"class":157},[19,160086,160087],{},"求偶数和：",[138,160089,160091],{"className":30652,"code":160090,"language":30654,"meta":143,"style":143},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[51,160092,160093,160101,160105,160125,160141,160150,160154],{"__ignoreMap":143},[147,160094,160095,160097,160099],{"class":149,"line":150},[147,160096,157423],{"class":157},[147,160098,445],{"class":397},[147,160100,47607],{"class":448},[147,160102,160103],{"class":149,"line":312},[147,160104,2674],{"emptyLinePlaceholder":324},[147,160106,160107,160109,160111,160113,160115,160117,160119,160121,160123],{"class":149,"line":1454},[147,160108,3299],{"class":397},[147,160110,9712],{"class":157},[147,160112,26317],{"class":397},[147,160114,32717],{"class":448},[147,160116,401],{"class":157},[147,160118,616],{"class":448},[147,160120,12709],{"class":157},[147,160122,736],{"class":448},[147,160124,31060],{"class":157},[147,160126,160127,160129,160131,160133,160135,160137,160139],{"class":149,"line":1469},[147,160128,3375],{"class":397},[147,160130,9712],{"class":157},[147,160132,727],{"class":397},[147,160134,15028],{"class":448},[147,160136,101831],{"class":397},[147,160138,4367],{"class":448},[147,160140,4013],{"class":157},[147,160142,160143,160146,160148],{"class":149,"line":1475},[147,160144,160145],{"class":157},"        total ",[147,160147,9751],{"class":397},[147,160149,159475],{"class":157},[147,160151,160152],{"class":149,"line":1489},[147,160153,2674],{"emptyLinePlaceholder":324},[147,160155,160156,160158],{"class":149,"line":1495},[147,160157,30689],{"class":448},[147,160159,159494],{"class":157},[19,160161,160162],{},"也可以：",[138,160164,160166],{"className":30652,"code":160165,"language":30654,"meta":143,"style":143},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[51,160167,160168,160176,160180,160204,160212,160216],{"__ignoreMap":143},[147,160169,160170,160172,160174],{"class":149,"line":150},[147,160171,157423],{"class":157},[147,160173,445],{"class":397},[147,160175,47607],{"class":448},[147,160177,160178],{"class":149,"line":312},[147,160179,2674],{"emptyLinePlaceholder":324},[147,160181,160182,160184,160186,160188,160190,160192,160194,160196,160198,160200,160202],{"class":149,"line":1454},[147,160183,3299],{"class":397},[147,160185,9712],{"class":157},[147,160187,26317],{"class":397},[147,160189,32717],{"class":448},[147,160191,401],{"class":157},[147,160193,477],{"class":448},[147,160195,12709],{"class":157},[147,160197,736],{"class":448},[147,160199,12709],{"class":157},[147,160201,477],{"class":448},[147,160203,31060],{"class":157},[147,160205,160206,160208,160210],{"class":149,"line":1469},[147,160207,159470],{"class":157},[147,160209,9751],{"class":397},[147,160211,159475],{"class":157},[147,160213,160214],{"class":149,"line":1475},[147,160215,2674],{"emptyLinePlaceholder":324},[147,160217,160218,160220],{"class":149,"line":1489},[147,160219,30689],{"class":448},[147,160221,159494],{"class":157},[14,160223,160225],{"id":160224},"_49-循环嵌套","4.9 循环嵌套",[19,160227,160228],{},"嵌套循环就是循环里面再写循环。",[138,160230,160232],{"className":30652,"code":160231,"language":30654,"meta":143,"style":143},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[51,160233,160234,160254,160274],{"__ignoreMap":143},[147,160235,160236,160238,160240,160242,160244,160246,160248,160250,160252],{"class":149,"line":150},[147,160237,3299],{"class":397},[147,160239,9712],{"class":157},[147,160241,26317],{"class":397},[147,160243,32717],{"class":448},[147,160245,401],{"class":157},[147,160247,616],{"class":448},[147,160249,12709],{"class":157},[147,160251,692],{"class":448},[147,160253,31060],{"class":157},[147,160255,160256,160258,160260,160262,160264,160266,160268,160270,160272],{"class":149,"line":312},[147,160257,3475],{"class":397},[147,160259,9774],{"class":157},[147,160261,26317],{"class":397},[147,160263,32717],{"class":448},[147,160265,401],{"class":157},[147,160267,616],{"class":448},[147,160269,12709],{"class":157},[147,160271,692],{"class":448},[147,160273,31060],{"class":157},[147,160275,160276,160278,160280,160282,160285,160287,160289,160291,160294,160296,160298,160300,160302],{"class":149,"line":1454},[147,160277,32725],{"class":448},[147,160279,401],{"class":157},[147,160281,452],{"class":397},[147,160283,160284],{"class":504},"\"i=",[147,160286,1295],{"class":448},[147,160288,840],{"class":157},[147,160290,1345],{"class":448},[147,160292,160293],{"class":504},", j=",[147,160295,1295],{"class":448},[147,160297,866],{"class":157},[147,160299,1345],{"class":448},[147,160301,650],{"class":504},[147,160303,407],{"class":157},[19,160305,160306],{},"外层循环执行一次，内层循环执行完整一轮。",[14,160308,160310],{"id":160309},"_410-九九乘法表","4.10 九九乘法表",[138,160312,160314],{"className":30652,"code":160313,"language":30654,"meta":143,"style":143},"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",[51,160315,160316,160336,160359,160411],{"__ignoreMap":143},[147,160317,160318,160320,160322,160324,160326,160328,160330,160332,160334],{"class":149,"line":150},[147,160319,3299],{"class":397},[147,160321,9712],{"class":157},[147,160323,26317],{"class":397},[147,160325,32717],{"class":448},[147,160327,401],{"class":157},[147,160329,616],{"class":448},[147,160331,12709],{"class":157},[147,160333,845],{"class":448},[147,160335,31060],{"class":157},[147,160337,160338,160340,160342,160344,160346,160348,160350,160353,160355,160357],{"class":149,"line":312},[147,160339,3475],{"class":397},[147,160341,9774],{"class":157},[147,160343,26317],{"class":397},[147,160345,32717],{"class":448},[147,160347,401],{"class":157},[147,160349,616],{"class":448},[147,160351,160352],{"class":157},", i ",[147,160354,880],{"class":397},[147,160356,25392],{"class":448},[147,160358,31060],{"class":157},[147,160360,160361,160363,160365,160367,160369,160371,160373,160375,160377,160379,160381,160383,160385,160387,160389,160391,160393,160395,160397,160399,160401,160403,160405,160407,160409],{"class":149,"line":1454},[147,160362,32725],{"class":448},[147,160364,401],{"class":157},[147,160366,452],{"class":397},[147,160368,650],{"class":504},[147,160370,1295],{"class":448},[147,160372,866],{"class":157},[147,160374,1345],{"class":448},[147,160376,854],{"class":504},[147,160378,1295],{"class":448},[147,160380,840],{"class":157},[147,160382,1345],{"class":448},[147,160384,445],{"class":504},[147,160386,1295],{"class":448},[147,160388,100420],{"class":157},[147,160390,854],{"class":397},[147,160392,3684],{"class":157},[147,160394,1345],{"class":448},[147,160396,650],{"class":504},[147,160398,12709],{"class":157},[147,160400,46075],{"class":5490},[147,160402,445],{"class":397},[147,160404,650],{"class":504},[147,160406,1505],{"class":448},[147,160408,650],{"class":504},[147,160410,407],{"class":157},[147,160412,160413,160415],{"class":149,"line":1469},[147,160414,31573],{"class":448},[147,160416,2250],{"class":157},[19,160418,160419],{},"关键点：",[350,160421,160422,160428,160434,160440],{},[353,160423,160424,160425,160427],{},"外层 ",[51,160426,840],{}," 控制行。",[353,160429,160430,160431,160433],{},"内层 ",[51,160432,866],{}," 控制列。",[353,160435,160436,160437,160439],{},"每行结束后用 ",[51,160438,146635],{}," 换行。",[353,160441,160442,160445],{},[51,160443,160444],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,160447,160449],{"id":160448},"_411-循环else","4.11 循环else",[19,160451,160452,160453,160455,160456,160458,160459,160461],{},"Python 的循环可以带 ",[51,160454,1975],{},"。当循环正常结束时执行 ",[51,160457,1975],{},"，如果被 ",[51,160460,2327],{}," 打断，则不执行。",[138,160463,160465],{"className":30652,"code":160464,"language":30654,"meta":143,"style":143},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[51,160466,160467,160487,160499,160510,160514,160520],{"__ignoreMap":143},[147,160468,160469,160471,160473,160475,160477,160479,160481,160483,160485],{"class":149,"line":150},[147,160470,3299],{"class":397},[147,160472,9712],{"class":157},[147,160474,26317],{"class":397},[147,160476,32717],{"class":448},[147,160478,401],{"class":157},[147,160480,616],{"class":448},[147,160482,12709],{"class":157},[147,160484,743],{"class":448},[147,160486,31060],{"class":157},[147,160488,160489,160491,160493,160495,160497],{"class":149,"line":312},[147,160490,3375],{"class":397},[147,160492,9712],{"class":157},[147,160494,3223],{"class":397},[147,160496,2312],{"class":448},[147,160498,4013],{"class":157},[147,160500,160501,160503,160505,160508],{"class":149,"line":1454},[147,160502,32725],{"class":448},[147,160504,401],{"class":157},[147,160506,160507],{"class":504},"\"找到了\"",[147,160509,407],{"class":157},[147,160511,160512],{"class":149,"line":1469},[147,160513,31901],{"class":397},[147,160515,160516,160518],{"class":149,"line":1475},[147,160517,1975],{"class":397},[147,160519,4013],{"class":157},[147,160521,160522,160524,160526,160529],{"class":149,"line":1489},[147,160523,31573],{"class":448},[147,160525,401],{"class":157},[147,160527,160528],{"class":504},"\"没找到\"",[147,160530,407],{"class":157},[19,160532,160533],{},"常用于搜索。",[138,160535,160537],{"className":30652,"code":160536,"language":30654,"meta":143,"style":143},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[51,160538,160539,160560,160569,160573,160585,160596,160606,160610,160616],{"__ignoreMap":143},[147,160540,160541,160544,160546,160548,160550,160552,160554,160556,160558],{"class":149,"line":150},[147,160542,160543],{"class":157},"names ",[147,160545,445],{"class":397},[147,160547,52499],{"class":157},[147,160549,150051],{"class":504},[147,160551,12709],{"class":157},[147,160553,151099],{"class":504},[147,160555,12709],{"class":157},[147,160557,159894],{"class":504},[147,160559,33520],{"class":157},[147,160561,160562,160564,160566],{"class":149,"line":312},[147,160563,111848],{"class":157},[147,160565,445],{"class":397},[147,160567,160568],{"class":504}," \"小李\"\n",[147,160570,160571],{"class":149,"line":1454},[147,160572,2674],{"emptyLinePlaceholder":324},[147,160574,160575,160577,160580,160582],{"class":149,"line":1469},[147,160576,3299],{"class":397},[147,160578,160579],{"class":157}," name ",[147,160581,26317],{"class":397},[147,160583,160584],{"class":157}," names:\n",[147,160586,160587,160589,160591,160593],{"class":149,"line":1475},[147,160588,3375],{"class":397},[147,160590,160579],{"class":157},[147,160592,3223],{"class":397},[147,160594,160595],{"class":157}," target:\n",[147,160597,160598,160600,160602,160604],{"class":149,"line":1489},[147,160599,32725],{"class":448},[147,160601,401],{"class":157},[147,160603,160507],{"class":504},[147,160605,407],{"class":157},[147,160607,160608],{"class":149,"line":1495},[147,160609,31901],{"class":397},[147,160611,160612,160614],{"class":149,"line":1586},[147,160613,1975],{"class":397},[147,160615,4013],{"class":157},[147,160617,160618,160620,160622,160624],{"class":149,"line":1592},[147,160619,31573],{"class":448},[147,160621,401],{"class":157},[147,160623,160528],{"class":504},[147,160625,407],{"class":157},[14,160627,160629],{"id":160628},"_412-小案例登录重试","4.12 小案例：登录重试",[19,160631,123562],{},[350,160633,160634,160637,160640],{},[353,160635,160636],{},"用户最多输入 3 次密码。",[353,160638,160639],{},"密码正确则登录成功。",[353,160641,160642],{},"3 次都错误则锁定账号。",[19,160644,10309],{},[138,160646,160648],{"className":30652,"code":160647,"language":30654,"meta":143,"style":143},"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",[51,160649,160650,160660,160664,160680,160696,160700,160712,160723,160727,160733,160758,160764],{"__ignoreMap":143},[147,160651,160652,160655,160657],{"class":149,"line":150},[147,160653,160654],{"class":157},"password ",[147,160656,445],{"class":397},[147,160658,160659],{"class":504}," \"123456\"\n",[147,160661,160662],{"class":149,"line":312},[147,160663,2674],{"emptyLinePlaceholder":324},[147,160665,160666,160668,160670,160672,160674,160676,160678],{"class":149,"line":1454},[147,160667,3299],{"class":397},[147,160669,9712],{"class":157},[147,160671,26317],{"class":397},[147,160673,32717],{"class":448},[147,160675,401],{"class":157},[147,160677,471],{"class":448},[147,160679,31060],{"class":157},[147,160681,160682,160685,160687,160689,160691,160694],{"class":149,"line":1469},[147,160683,160684],{"class":157},"    user_password ",[147,160686,445],{"class":397},[147,160688,60878],{"class":448},[147,160690,401],{"class":157},[147,160692,160693],{"class":504},"\"请输入密码:\"",[147,160695,407],{"class":157},[147,160697,160698],{"class":149,"line":1475},[147,160699,2674],{"emptyLinePlaceholder":324},[147,160701,160702,160704,160707,160709],{"class":149,"line":1489},[147,160703,3375],{"class":397},[147,160705,160706],{"class":157}," user_password ",[147,160708,3223],{"class":397},[147,160710,160711],{"class":157}," password:\n",[147,160713,160714,160716,160718,160721],{"class":149,"line":1495},[147,160715,32725],{"class":448},[147,160717,401],{"class":157},[147,160719,160720],{"class":504},"\"登录成功\"",[147,160722,407],{"class":157},[147,160724,160725],{"class":149,"line":1586},[147,160726,31901],{"class":397},[147,160728,160729,160731],{"class":149,"line":1592},[147,160730,158185],{"class":397},[147,160732,4013],{"class":157},[147,160734,160735,160737,160739,160741,160744,160747,160749,160751,160753,160756],{"class":149,"line":1604},[147,160736,32725],{"class":448},[147,160738,401],{"class":157},[147,160740,452],{"class":397},[147,160742,160743],{"class":504},"\"密码错误，还剩",[147,160745,160746],{"class":448},"{2",[147,160748,52544],{"class":397},[147,160750,3306],{"class":157},[147,160752,1345],{"class":448},[147,160754,160755],{"class":504},"次机会\"",[147,160757,407],{"class":157},[147,160759,160760,160762],{"class":149,"line":1886},[147,160761,1975],{"class":397},[147,160763,4013],{"class":157},[147,160765,160766,160768,160770,160773],{"class":149,"line":1891},[147,160767,31573],{"class":448},[147,160769,401],{"class":157},[147,160771,160772],{"class":504},"\"账号已锁定\"",[147,160774,407],{"class":157},[14,160776,160778],{"id":160777},"_413-小案例菜单程序","4.13 小案例：菜单程序",[138,160780,160782],{"className":30652,"code":160781,"language":30654,"meta":143,"style":143},"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",[51,160783,160784,160792,160803,160814,160825,160836,160847,160851,160866,160870,160882,160893,160905,160916,160928,160939,160951,160961,160965,160971],{"__ignoreMap":143},[147,160785,160786,160788,160790],{"class":149,"line":150},[147,160787,108933],{"class":397},[147,160789,95564],{"class":448},[147,160791,4013],{"class":157},[147,160793,160794,160796,160798,160801],{"class":149,"line":312},[147,160795,31573],{"class":448},[147,160797,401],{"class":157},[147,160799,160800],{"class":504},"\"====== 菜单 ======\"",[147,160802,407],{"class":157},[147,160804,160805,160807,160809,160812],{"class":149,"line":1454},[147,160806,31573],{"class":448},[147,160808,401],{"class":157},[147,160810,160811],{"class":504},"\"1. 查询余额\"",[147,160813,407],{"class":157},[147,160815,160816,160818,160820,160823],{"class":149,"line":1469},[147,160817,31573],{"class":448},[147,160819,401],{"class":157},[147,160821,160822],{"class":504},"\"2. 存款\"",[147,160824,407],{"class":157},[147,160826,160827,160829,160831,160834],{"class":149,"line":1475},[147,160828,31573],{"class":448},[147,160830,401],{"class":157},[147,160832,160833],{"class":504},"\"3. 取款\"",[147,160835,407],{"class":157},[147,160837,160838,160840,160842,160845],{"class":149,"line":1489},[147,160839,31573],{"class":448},[147,160841,401],{"class":157},[147,160843,160844],{"class":504},"\"0. 退出\"",[147,160846,407],{"class":157},[147,160848,160849],{"class":149,"line":1495},[147,160850,2674],{"emptyLinePlaceholder":324},[147,160852,160853,160856,160858,160860,160862,160864],{"class":149,"line":1586},[147,160854,160855],{"class":157},"    choice ",[147,160857,445],{"class":397},[147,160859,60878],{"class":448},[147,160861,401],{"class":157},[147,160863,153236],{"class":504},[147,160865,407],{"class":157},[147,160867,160868],{"class":149,"line":1592},[147,160869,2674],{"emptyLinePlaceholder":324},[147,160871,160872,160874,160876,160878,160880],{"class":149,"line":1604},[147,160873,3375],{"class":397},[147,160875,153249],{"class":157},[147,160877,3223],{"class":397},[147,160879,153254],{"class":504},[147,160881,4013],{"class":157},[147,160883,160884,160886,160888,160891],{"class":149,"line":1886},[147,160885,32725],{"class":448},[147,160887,401],{"class":157},[147,160889,160890],{"class":504},"\"余额为1000元\"",[147,160892,407],{"class":157},[147,160894,160895,160897,160899,160901,160903],{"class":149,"line":1891},[147,160896,39567],{"class":397},[147,160898,153249],{"class":157},[147,160900,3223],{"class":397},[147,160902,153273],{"class":504},[147,160904,4013],{"class":157},[147,160906,160907,160909,160911,160914],{"class":149,"line":1897},[147,160908,32725],{"class":448},[147,160910,401],{"class":157},[147,160912,160913],{"class":504},"\"存款功能\"",[147,160915,407],{"class":157},[147,160917,160918,160920,160922,160924,160926],{"class":149,"line":1902},[147,160919,39567],{"class":397},[147,160921,153249],{"class":157},[147,160923,3223],{"class":397},[147,160925,153291],{"class":504},[147,160927,4013],{"class":157},[147,160929,160930,160932,160934,160937],{"class":149,"line":1916},[147,160931,32725],{"class":448},[147,160933,401],{"class":157},[147,160935,160936],{"class":504},"\"取款功能\"",[147,160938,407],{"class":157},[147,160940,160941,160943,160945,160947,160949],{"class":149,"line":1921},[147,160942,39567],{"class":397},[147,160944,153249],{"class":157},[147,160946,3223],{"class":397},[147,160948,153345],{"class":504},[147,160950,4013],{"class":157},[147,160952,160953,160955,160957,160959],{"class":149,"line":1927},[147,160954,32725],{"class":448},[147,160956,401],{"class":157},[147,160958,153356],{"class":504},[147,160960,407],{"class":157},[147,160962,160963],{"class":149,"line":1948},[147,160964,31901],{"class":397},[147,160966,160967,160969],{"class":149,"line":1953},[147,160968,158185],{"class":397},[147,160970,4013],{"class":157},[147,160972,160973,160975,160977,160979],{"class":149,"line":1967},[147,160974,32725],{"class":448},[147,160976,401],{"class":157},[147,160978,153377],{"class":504},[147,160980,407],{"class":157},[19,160982,160983,160984,160986,160987,28659],{},"菜单类程序通常使用 ",[51,160985,159685],{},"，用户选择退出时 ",[51,160988,2327],{},[14,160990,160992],{"id":160991},"_414-易错点","4.14 易错点",[350,160994,160995,161000,161006,161014,161020],{},[353,160996,160997,160999],{},[51,160998,108933],{}," 循环必须更新控制变量。",[353,161001,161002,161005],{},[51,161003,161004],{},"range(1, 10)"," 不包含 10。",[353,161007,161008,161010,161011,161013],{},[51,161009,2327],{}," 结束整个循环，",[51,161012,154835],{}," 只跳过本轮。",[353,161015,161016,161017,161019],{},"嵌套循环中，",[51,161018,2327],{}," 只跳出当前所在的一层循环。",[353,161021,161022],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,161024,161026],{"id":161025},"_415-本章练习","4.15 本章练习",[350,161028,161029,161032,161035,161038,161041],{},[353,161030,161031],{},"输出 1 到 100。",[353,161033,161034],{},"计算 1 到 100 的偶数和。",[353,161036,161037],{},"输出 100 以内能被 3 和 5 同时整除的数。",[353,161039,161040],{},"编写猜数字游戏，限制最多猜 7 次。",[353,161042,161043],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[308,161045,161046],{},"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":143,"searchDepth":312,"depth":312,"links":161048},[161049,161050,161051,161052,161053,161057,161058,161059,161060,161061,161062,161063,161064,161065,161066],{"id":159305,"depth":312,"text":159306},{"id":159335,"depth":312,"text":159336},{"id":159424,"depth":312,"text":159425},{"id":159518,"depth":312,"text":159519},{"id":159692,"depth":312,"text":159693,"children":161054},[161055,161056],{"id":159696,"depth":1454,"text":159697},{"id":159760,"depth":1454,"text":159761},{"id":159824,"depth":312,"text":159825},{"id":159919,"depth":312,"text":159920},{"id":160028,"depth":312,"text":160029},{"id":160224,"depth":312,"text":160225},{"id":160309,"depth":312,"text":160310},{"id":160448,"depth":312,"text":160449},{"id":160628,"depth":312,"text":160629},{"id":160777,"depth":312,"text":160778},{"id":160991,"depth":312,"text":160992},{"id":161025,"depth":312,"text":161026},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159297,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":161073,"title":161074,"body":161075,"description":321,"extension":322,"meta":163080,"navigation":324,"path":163081,"seo":163082,"stem":163083,"__hash__":163084},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":161076,"toc":163060},[161077,161080,161084,161087,161090,161104,161107,161121,161125,161127,161146,161148,161195,161197,161211,161215,161289,161292,161296,161299,161358,161366,161369,161422,161425,161429,161434,161489,161497,161547,161551,161556,161564,161663,161669,161673,161678,161681,161692,161733,161746,161750,161753,161789,161792,161805,161808,161868,161872,161876,161879,161930,161934,161937,161984,161990,162056,162059,162063,162066,162182,162185,162189,162192,162298,162302,162305,162343,162346,162388,162391,162451,162454,162458,162922,162925,162929,162956,162962,163023,163027,163057],[10,161078,161074],{"id":161079},"_5-函数基础",[14,161081,161083],{"id":161082},"_51-为什么需要函数","5.1 为什么需要函数",[19,161085,161086],{},"函数用于封装一段可以重复使用的代码。",[19,161088,161089],{},"不使用函数的问题：",[350,161091,161092,161095,161098,161101],{},[353,161093,161094],{},"重复代码多。",[353,161096,161097],{},"修改逻辑时容易漏改。",[353,161099,161100],{},"主流程不清晰。",[353,161102,161103],{},"程序越写越长，难以维护。",[19,161105,161106],{},"使用函数后的好处：",[350,161108,161109,161112,161115,161118],{},[353,161110,161111],{},"提高复用性。",[353,161113,161114],{},"提高可读性。",[353,161116,161117],{},"便于调试。",[353,161119,161120],{},"便于分工。",[14,161122,161124],{"id":161123},"_52-函数定义","5.2 函数定义",[19,161126,5455],{},[138,161128,161130],{"className":30652,"code":161129,"language":30654,"meta":143,"style":143},"def 函数名():\n    函数体\n",[51,161131,161132,161141],{"__ignoreMap":143},[147,161133,161134,161136,161139],{"class":149,"line":150},[147,161135,32221],{"class":397},[147,161137,161138],{"class":2237}," 函数名",[147,161140,32227],{"class":157},[147,161142,161143],{"class":149,"line":312},[147,161144,161145],{"class":157},"    函数体\n",[19,161147,15408],{},[138,161149,161151],{"className":30652,"code":161150,"language":30654,"meta":143,"style":143},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[51,161152,161153,161162,161172,161182,161186,161190],{"__ignoreMap":143},[147,161154,161155,161157,161160],{"class":149,"line":150},[147,161156,32221],{"class":397},[147,161158,161159],{"class":2237}," say_hello",[147,161161,32227],{"class":157},[147,161163,161164,161166,161168,161170],{"class":149,"line":312},[147,161165,31573],{"class":448},[147,161167,401],{"class":157},[147,161169,6118],{"class":504},[147,161171,407],{"class":157},[147,161173,161174,161176,161178,161180],{"class":149,"line":1454},[147,161175,31573],{"class":448},[147,161177,401],{"class":157},[147,161179,146802],{"class":504},[147,161181,407],{"class":157},[147,161183,161184],{"class":149,"line":1469},[147,161185,2674],{"emptyLinePlaceholder":324},[147,161187,161188],{"class":149,"line":1475},[147,161189,2674],{"emptyLinePlaceholder":324},[147,161191,161192],{"class":149,"line":1489},[147,161193,161194],{"class":157},"say_hello()\n",[19,161196,9299],{},[350,161198,161199,161202,161205,161208],{},[353,161200,161201],{},"函数必须先定义，再调用。",[353,161203,161204],{},"函数名遵循变量命名规则。",[353,161206,161207],{},"函数体需要缩进。",[353,161209,161210],{},"函数不调用就不会执行。",[14,161212,161214],{"id":161213},"_53-函数调用","5.3 函数调用",[138,161216,161218],{"className":30652,"code":161217,"language":30654,"meta":143,"style":143},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[51,161219,161220,161229,161240,161251,161262,161272,161276,161280,161285],{"__ignoreMap":143},[147,161221,161222,161224,161227],{"class":149,"line":150},[147,161223,32221],{"class":397},[147,161225,161226],{"class":2237}," print_menu",[147,161228,32227],{"class":157},[147,161230,161231,161233,161235,161238],{"class":149,"line":312},[147,161232,31573],{"class":448},[147,161234,401],{"class":157},[147,161236,161237],{"class":504},"\"1. 查询\"",[147,161239,407],{"class":157},[147,161241,161242,161244,161246,161249],{"class":149,"line":1454},[147,161243,31573],{"class":448},[147,161245,401],{"class":157},[147,161247,161248],{"class":504},"\"2. 添加\"",[147,161250,407],{"class":157},[147,161252,161253,161255,161257,161260],{"class":149,"line":1469},[147,161254,31573],{"class":448},[147,161256,401],{"class":157},[147,161258,161259],{"class":504},"\"3. 删除\"",[147,161261,407],{"class":157},[147,161263,161264,161266,161268,161270],{"class":149,"line":1475},[147,161265,31573],{"class":448},[147,161267,401],{"class":157},[147,161269,160844],{"class":504},[147,161271,407],{"class":157},[147,161273,161274],{"class":149,"line":1489},[147,161275,2674],{"emptyLinePlaceholder":324},[147,161277,161278],{"class":149,"line":1495},[147,161279,2674],{"emptyLinePlaceholder":324},[147,161281,161282],{"class":149,"line":1586},[147,161283,161284],{"class":157},"print_menu()\n",[147,161286,161287],{"class":149,"line":1592},[147,161288,161284],{"class":157},[19,161290,161291],{},"函数可以多次调用，每次调用都会执行函数体。",[14,161293,161295],{"id":161294},"_54-参数","5.4 参数",[19,161297,161298],{},"参数用于向函数传递数据。",[138,161300,161302],{"className":30652,"code":161301,"language":30654,"meta":143,"style":143},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[51,161303,161304,161313,161333,161337,161341,161350],{"__ignoreMap":143},[147,161305,161306,161308,161310],{"class":149,"line":150},[147,161307,32221],{"class":397},[147,161309,161159],{"class":2237},[147,161311,161312],{"class":157},"(name):\n",[147,161314,161315,161317,161319,161321,161323,161325,161327,161329,161331],{"class":149,"line":312},[147,161316,31573],{"class":448},[147,161318,401],{"class":157},[147,161320,452],{"class":397},[147,161322,157217],{"class":504},[147,161324,1295],{"class":448},[147,161326,80082],{"class":157},[147,161328,1345],{"class":448},[147,161330,650],{"class":504},[147,161332,407],{"class":157},[147,161334,161335],{"class":149,"line":1454},[147,161336,2674],{"emptyLinePlaceholder":324},[147,161338,161339],{"class":149,"line":1469},[147,161340,2674],{"emptyLinePlaceholder":324},[147,161342,161343,161346,161348],{"class":149,"line":1475},[147,161344,161345],{"class":157},"say_hello(",[147,161347,150051],{"class":504},[147,161349,407],{"class":157},[147,161351,161352,161354,161356],{"class":149,"line":1489},[147,161353,161345],{"class":157},[147,161355,151099],{"class":504},[147,161357,407],{"class":157},[19,161359,161360,161362,161363,161365],{},[51,161361,80082],{}," 是形参，",[51,161364,150051],{}," 是实参。",[19,161367,161368],{},"多个参数：",[138,161370,161372],{"className":30652,"code":161371,"language":30654,"meta":143,"style":143},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[51,161373,161374,161382,161395,161401,161405,161409],{"__ignoreMap":143},[147,161375,161376,161378,161380],{"class":149,"line":150},[147,161377,32221],{"class":397},[147,161379,5483],{"class":2237},[147,161381,151256],{"class":157},[147,161383,161384,161387,161389,161391,161393],{"class":149,"line":312},[147,161385,161386],{"class":157},"    result ",[147,161388,445],{"class":397},[147,161390,11143],{"class":157},[147,161392,880],{"class":397},[147,161394,151267],{"class":157},[147,161396,161397,161399],{"class":149,"line":1454},[147,161398,31573],{"class":448},[147,161400,76858],{"class":157},[147,161402,161403],{"class":149,"line":1469},[147,161404,2674],{"emptyLinePlaceholder":324},[147,161406,161407],{"class":149,"line":1475},[147,161408,2674],{"emptyLinePlaceholder":324},[147,161410,161411,161414,161416,161418,161420],{"class":149,"line":1489},[147,161412,161413],{"class":157},"add(",[147,161415,845],{"class":448},[147,161417,12709],{"class":157},[147,161419,1099],{"class":448},[147,161421,407],{"class":157},[19,161423,161424],{},"调用时参数数量必须匹配。",[14,161426,161428],{"id":161427},"_55-返回值","5.5 返回值",[19,161430,161431,161433],{},[51,161432,17319],{}," 用于把函数内部的结果返回给调用者。",[138,161435,161437],{"className":30652,"code":161436,"language":30654,"meta":143,"style":143},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[51,161438,161439,161447,161457,161461,161465,161483],{"__ignoreMap":143},[147,161440,161441,161443,161445],{"class":149,"line":150},[147,161442,32221],{"class":397},[147,161444,5483],{"class":2237},[147,161446,151256],{"class":157},[147,161448,161449,161451,161453,161455],{"class":149,"line":312},[147,161450,4364],{"class":397},[147,161452,11143],{"class":157},[147,161454,880],{"class":397},[147,161456,151267],{"class":157},[147,161458,161459],{"class":149,"line":1454},[147,161460,2674],{"emptyLinePlaceholder":324},[147,161462,161463],{"class":149,"line":1469},[147,161464,2674],{"emptyLinePlaceholder":324},[147,161466,161467,161470,161472,161475,161477,161479,161481],{"class":149,"line":1475},[147,161468,161469],{"class":157},"result ",[147,161471,445],{"class":397},[147,161473,161474],{"class":157}," add(",[147,161476,845],{"class":448},[147,161478,12709],{"class":157},[147,161480,1099],{"class":448},[147,161482,407],{"class":157},[147,161484,161485,161487],{"class":149,"line":1489},[147,161486,30689],{"class":448},[147,161488,76858],{"class":157},[19,161490,161491,161492,161494,161495,28659],{},"如果函数没有写 ",[51,161493,17319],{},"，默认返回 ",[51,161496,95958],{},[138,161498,161500],{"className":30652,"code":161499,"language":30654,"meta":143,"style":143},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[51,161501,161502,161510,161520,161524,161528,161537],{"__ignoreMap":143},[147,161503,161504,161506,161508],{"class":149,"line":150},[147,161505,32221],{"class":397},[147,161507,161159],{"class":2237},[147,161509,32227],{"class":157},[147,161511,161512,161514,161516,161518],{"class":149,"line":312},[147,161513,31573],{"class":448},[147,161515,401],{"class":157},[147,161517,6118],{"class":504},[147,161519,407],{"class":157},[147,161521,161522],{"class":149,"line":1454},[147,161523,2674],{"emptyLinePlaceholder":324},[147,161525,161526],{"class":149,"line":1469},[147,161527,2674],{"emptyLinePlaceholder":324},[147,161529,161530,161532,161534],{"class":149,"line":1475},[147,161531,161469],{"class":157},[147,161533,445],{"class":397},[147,161535,161536],{"class":157}," say_hello()\n",[147,161538,161539,161541,161544],{"class":149,"line":1489},[147,161540,30689],{"class":448},[147,161542,161543],{"class":157},"(result)  ",[147,161545,161546],{"class":458},"# None\n",[14,161548,161550],{"id":161549},"_56-return的作用","5.6 return的作用",[19,161552,161553,161555],{},[51,161554,17319],{}," 有两个作用：",[350,161557,161558,161561],{},[353,161559,161560],{},"返回结果。",[353,161562,161563],{},"结束函数。",[138,161565,161567],{"className":30652,"code":161566,"language":30654,"meta":143,"style":143},"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",[51,161568,161569,161579,161591,161598,161602,161614,161621,161625,161632,161636,161640,161651],{"__ignoreMap":143},[147,161570,161571,161573,161576],{"class":149,"line":150},[147,161572,32221],{"class":397},[147,161574,161575],{"class":2237}," check_age",[147,161577,161578],{"class":157},"(age):\n",[147,161580,161581,161583,161585,161587,161589],{"class":149,"line":312},[147,161582,3375],{"class":397},[147,161584,15980],{"class":157},[147,161586,1309],{"class":397},[147,161588,4367],{"class":448},[147,161590,4013],{"class":157},[147,161592,161593,161595],{"class":149,"line":1454},[147,161594,15025],{"class":397},[147,161596,161597],{"class":504}," \"年龄不合法\"\n",[147,161599,161600],{"class":149,"line":1469},[147,161601,2674],{"emptyLinePlaceholder":324},[147,161603,161604,161606,161608,161610,161612],{"class":149,"line":1475},[147,161605,3375],{"class":397},[147,161607,15980],{"class":157},[147,161609,1984],{"class":397},[147,161611,156448],{"class":448},[147,161613,4013],{"class":157},[147,161615,161616,161618],{"class":149,"line":1489},[147,161617,15025],{"class":397},[147,161619,161620],{"class":504}," \"成年人\"\n",[147,161622,161623],{"class":149,"line":1495},[147,161624,2674],{"emptyLinePlaceholder":324},[147,161626,161627,161629],{"class":149,"line":1586},[147,161628,4364],{"class":397},[147,161630,161631],{"class":504}," \"未成年人\"\n",[147,161633,161634],{"class":149,"line":1592},[147,161635,2674],{"emptyLinePlaceholder":324},[147,161637,161638],{"class":149,"line":1604},[147,161639,2674],{"emptyLinePlaceholder":324},[147,161641,161642,161644,161647,161649],{"class":149,"line":1886},[147,161643,30689],{"class":448},[147,161645,161646],{"class":157},"(check_age(",[147,161648,1099],{"class":448},[147,161650,30771],{"class":157},[147,161652,161653,161655,161657,161659,161661],{"class":149,"line":1891},[147,161654,30689],{"class":448},[147,161656,161646],{"class":157},[147,161658,931],{"class":397},[147,161660,616],{"class":448},[147,161662,30771],{"class":157},[19,161664,161665,161666,161668],{},"函数执行到 ",[51,161667,17319],{}," 后，后面的代码不会继续执行。",[14,161670,161672],{"id":161671},"_57-none","5.7 None",[19,161674,161675,161677],{},[51,161676,95958],{}," 表示空值或没有结果。",[19,161679,161680],{},"常见使用场景：",[350,161682,161683,161686,161689],{},[353,161684,161685],{},"函数没有返回值。",[353,161687,161688],{},"变量暂时没有具体值。",[353,161690,161691],{},"表示查询不到结果。",[138,161693,161695],{"className":30652,"code":161694,"language":30654,"meta":143,"style":143},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[51,161696,161697,161705,161709,161722],{"__ignoreMap":143},[147,161698,161699,161701,161703],{"class":149,"line":150},[147,161700,161469],{"class":157},[147,161702,445],{"class":397},[147,161704,152335],{"class":448},[147,161706,161707],{"class":149,"line":312},[147,161708,2674],{"emptyLinePlaceholder":324},[147,161710,161711,161713,161716,161718,161720],{"class":149,"line":1454},[147,161712,1805],{"class":397},[147,161714,161715],{"class":157}," result ",[147,161717,39201],{"class":397},[147,161719,39207],{"class":448},[147,161721,4013],{"class":157},[147,161723,161724,161726,161728,161731],{"class":149,"line":1469},[147,161725,31573],{"class":448},[147,161727,401],{"class":157},[147,161729,161730],{"class":504},"\"没有数据\"",[147,161732,407],{"class":157},[19,161734,161735,161736,161738,161739,161742,161743,28659],{},"判断 ",[51,161737,95958],{}," 推荐使用 ",[51,161740,161741],{},"is None","，不要写成 ",[51,161744,161745],{},"== None",[14,161747,161749],{"id":161748},"_58-函数文档字符串","5.8 函数文档字符串",[19,161751,161752],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[138,161754,161756],{"className":30652,"code":161755,"language":30654,"meta":143,"style":143},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[51,161757,161758,161768,161773],{"__ignoreMap":143},[147,161759,161760,161762,161765],{"class":149,"line":150},[147,161761,32221],{"class":397},[147,161763,161764],{"class":2237}," calculate_bmi",[147,161766,161767],{"class":157},"(weight, height):\n",[147,161769,161770],{"class":149,"line":312},[147,161771,161772],{"class":504},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[147,161774,161775,161777,161780,161782,161785,161787],{"class":149,"line":1454},[147,161776,4364],{"class":397},[147,161778,161779],{"class":157}," weight ",[147,161781,983],{"class":397},[147,161783,161784],{"class":157}," height ",[147,161786,10935],{"class":397},[147,161788,47997],{"class":448},[19,161790,161791],{},"查看说明：",[138,161793,161795],{"className":30652,"code":161794,"language":30654,"meta":143,"style":143},"help(calculate_bmi)\n",[51,161796,161797],{"__ignoreMap":143},[147,161798,161799,161802],{"class":149,"line":150},[147,161800,161801],{"class":448},"help",[147,161803,161804],{"class":157},"(calculate_bmi)\n",[19,161806,161807],{},"较完整的写法：",[138,161809,161811],{"className":30652,"code":161810,"language":30654,"meta":143,"style":143},"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",[51,161812,161813,161821,161826,161831,161835,161840,161845,161850,161854],{"__ignoreMap":143},[147,161814,161815,161817,161819],{"class":149,"line":150},[147,161816,32221],{"class":397},[147,161818,161764],{"class":2237},[147,161820,161767],{"class":157},[147,161822,161823],{"class":149,"line":312},[147,161824,161825],{"class":504},"    \"\"\"\n",[147,161827,161828],{"class":149,"line":1454},[147,161829,161830],{"class":504},"    计算BMI。\n",[147,161832,161833],{"class":149,"line":1469},[147,161834,2674],{"emptyLinePlaceholder":324},[147,161836,161837],{"class":149,"line":1475},[147,161838,161839],{"class":504},"    :param weight: 体重，单位kg\n",[147,161841,161842],{"class":149,"line":1489},[147,161843,161844],{"class":504},"    :param height: 身高，单位m\n",[147,161846,161847],{"class":149,"line":1495},[147,161848,161849],{"class":504},"    :return: BMI数值\n",[147,161851,161852],{"class":149,"line":1586},[147,161853,161825],{"class":504},[147,161855,161856,161858,161860,161862,161864,161866],{"class":149,"line":1592},[147,161857,4364],{"class":397},[147,161859,161779],{"class":157},[147,161861,983],{"class":397},[147,161863,161784],{"class":157},[147,161865,10935],{"class":397},[147,161867,47997],{"class":448},[14,161869,161871],{"id":161870},"_59-变量作用域","5.9 变量作用域",[367,161873,161875],{"id":161874},"_591-局部变量","5.9.1 局部变量",[19,161877,161878],{},"在函数内部定义的变量，只能在函数内部使用。",[138,161880,161882],{"className":30652,"code":161881,"language":30654,"meta":143,"style":143},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[51,161883,161884,161893,161901,161907,161911,161915,161920],{"__ignoreMap":143},[147,161885,161886,161888,161891],{"class":149,"line":150},[147,161887,32221],{"class":397},[147,161889,161890],{"class":2237}," test",[147,161892,32227],{"class":157},[147,161894,161895,161897,161899],{"class":149,"line":312},[147,161896,45867],{"class":157},[147,161898,445],{"class":397},[147,161900,58701],{"class":448},[147,161902,161903,161905],{"class":149,"line":1454},[147,161904,31573],{"class":448},[147,161906,414],{"class":157},[147,161908,161909],{"class":149,"line":1469},[147,161910,2674],{"emptyLinePlaceholder":324},[147,161912,161913],{"class":149,"line":1475},[147,161914,2674],{"emptyLinePlaceholder":324},[147,161916,161917],{"class":149,"line":1489},[147,161918,161919],{"class":157},"test()\n",[147,161921,161922,161924,161927],{"class":149,"line":1495},[147,161923,30689],{"class":448},[147,161925,161926],{"class":157},"(num)  ",[147,161928,161929],{"class":458},"# 报错\n",[367,161931,161933],{"id":161932},"_592-全局变量","5.9.2 全局变量",[19,161935,161936],{},"在函数外部定义的变量，可以在函数内部读取。",[138,161938,161940],{"className":30652,"code":161939,"language":30654,"meta":143,"style":143},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[51,161941,161942,161950,161954,161958,161966,161972,161976,161980],{"__ignoreMap":143},[147,161943,161944,161946,161948],{"class":149,"line":150},[147,161945,146699],{"class":157},[147,161947,445],{"class":397},[147,161949,149516],{"class":504},[147,161951,161952],{"class":149,"line":312},[147,161953,2674],{"emptyLinePlaceholder":324},[147,161955,161956],{"class":149,"line":1454},[147,161957,2674],{"emptyLinePlaceholder":324},[147,161959,161960,161962,161964],{"class":149,"line":1469},[147,161961,32221],{"class":397},[147,161963,161159],{"class":2237},[147,161965,32227],{"class":157},[147,161967,161968,161970],{"class":149,"line":1475},[147,161969,31573],{"class":448},[147,161971,150823],{"class":157},[147,161973,161974],{"class":149,"line":1489},[147,161975,2674],{"emptyLinePlaceholder":324},[147,161977,161978],{"class":149,"line":1495},[147,161979,2674],{"emptyLinePlaceholder":324},[147,161981,161982],{"class":149,"line":1586},[147,161983,161194],{"class":157},[19,161985,161986,161987,28659],{},"如果要在函数内部修改全局变量，需要 ",[51,161988,161989],{},"global",[138,161991,161993],{"className":30652,"code":161992,"language":30654,"meta":143,"style":143},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[51,161994,161995,162003,162007,162011,162020,162028,162036,162040,162044,162049],{"__ignoreMap":143},[147,161996,161997,161999,162001],{"class":149,"line":150},[147,161998,146854],{"class":157},[147,162000,445],{"class":397},[147,162002,47607],{"class":448},[147,162004,162005],{"class":149,"line":312},[147,162006,2674],{"emptyLinePlaceholder":324},[147,162008,162009],{"class":149,"line":1454},[147,162010,2674],{"emptyLinePlaceholder":324},[147,162012,162013,162015,162018],{"class":149,"line":1469},[147,162014,32221],{"class":397},[147,162016,162017],{"class":2237}," add_count",[147,162019,32227],{"class":157},[147,162021,162022,162025],{"class":149,"line":1475},[147,162023,162024],{"class":397},"    global",[147,162026,162027],{"class":157}," count\n",[147,162029,162030,162032,162034],{"class":149,"line":1489},[147,162031,159596],{"class":157},[147,162033,9751],{"class":397},[147,162035,55972],{"class":448},[147,162037,162038],{"class":149,"line":1495},[147,162039,2674],{"emptyLinePlaceholder":324},[147,162041,162042],{"class":149,"line":1586},[147,162043,2674],{"emptyLinePlaceholder":324},[147,162045,162046],{"class":149,"line":1592},[147,162047,162048],{"class":157},"add_count()\n",[147,162050,162051,162053],{"class":149,"line":1604},[147,162052,30689],{"class":448},[147,162054,162055],{"class":157},"(count)\n",[19,162057,162058],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,162060,162062],{"id":162061},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,162064,162065],{},"一个函数中可以调用另一个函数。",[138,162067,162069],{"className":30652,"code":162068,"language":30654,"meta":143,"style":143},"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",[51,162070,162071,162080,162094,162098,162102,162111,162116,162136,162157,162161,162165,162169],{"__ignoreMap":143},[147,162072,162073,162075,162078],{"class":149,"line":150},[147,162074,32221],{"class":397},[147,162076,162077],{"class":2237}," print_line",[147,162079,32227],{"class":157},[147,162081,162082,162084,162086,162088,162090,162092],{"class":149,"line":312},[147,162083,31573],{"class":448},[147,162085,401],{"class":157},[147,162087,32757],{"class":504},[147,162089,6792],{"class":397},[147,162091,78937],{"class":448},[147,162093,407],{"class":157},[147,162095,162096],{"class":149,"line":1454},[147,162097,2674],{"emptyLinePlaceholder":324},[147,162099,162100],{"class":149,"line":1469},[147,162101,2674],{"emptyLinePlaceholder":324},[147,162103,162104,162106,162109],{"class":149,"line":1475},[147,162105,32221],{"class":397},[147,162107,162108],{"class":2237}," print_info",[147,162110,149538],{"class":157},[147,162112,162113],{"class":149,"line":1489},[147,162114,162115],{"class":157},"    print_line()\n",[147,162117,162118,162120,162122,162124,162126,162128,162130,162132,162134],{"class":149,"line":1495},[147,162119,31573],{"class":448},[147,162121,401],{"class":157},[147,162123,452],{"class":397},[147,162125,156845],{"class":504},[147,162127,1295],{"class":448},[147,162129,80082],{"class":157},[147,162131,1345],{"class":448},[147,162133,650],{"class":504},[147,162135,407],{"class":157},[147,162137,162138,162140,162142,162144,162147,162149,162151,162153,162155],{"class":149,"line":1586},[147,162139,31573],{"class":448},[147,162141,401],{"class":157},[147,162143,452],{"class":397},[147,162145,162146],{"class":504},"\"年龄:",[147,162148,1295],{"class":448},[147,162150,70494],{"class":157},[147,162152,1345],{"class":448},[147,162154,650],{"class":504},[147,162156,407],{"class":157},[147,162158,162159],{"class":149,"line":1592},[147,162160,162115],{"class":157},[147,162162,162163],{"class":149,"line":1604},[147,162164,2674],{"emptyLinePlaceholder":324},[147,162166,162167],{"class":149,"line":1886},[147,162168,2674],{"emptyLinePlaceholder":324},[147,162170,162171,162174,162176,162178,162180],{"class":149,"line":1891},[147,162172,162173],{"class":157},"print_info(",[147,162175,150051],{"class":504},[147,162177,12709],{"class":157},[147,162179,1049],{"class":448},[147,162181,407],{"class":157},[19,162183,162184],{},"这种方式可以把小功能组合成大功能。",[14,162186,162188],{"id":162187},"_511-参数检查","5.11 参数检查",[19,162190,162191],{},"函数内部可以检查参数是否合法。",[138,162193,162195],{"className":30652,"code":162194,"language":30654,"meta":143,"style":143},"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",[51,162196,162197,162206,162218,162224,162234,162238,162242,162259,162263,162275,162286,162292],{"__ignoreMap":143},[147,162198,162199,162201,162204],{"class":149,"line":150},[147,162200,32221],{"class":397},[147,162202,162203],{"class":2237}," divide",[147,162205,151256],{"class":157},[147,162207,162208,162210,162212,162214,162216],{"class":149,"line":312},[147,162209,3375],{"class":397},[147,162211,11156],{"class":157},[147,162213,3223],{"class":397},[147,162215,4367],{"class":448},[147,162217,4013],{"class":157},[147,162219,162220,162222],{"class":149,"line":1454},[147,162221,15025],{"class":397},[147,162223,152335],{"class":448},[147,162225,162226,162228,162230,162232],{"class":149,"line":1469},[147,162227,4364],{"class":397},[147,162229,11143],{"class":157},[147,162231,983],{"class":397},[147,162233,151267],{"class":157},[147,162235,162236],{"class":149,"line":1475},[147,162237,2674],{"emptyLinePlaceholder":324},[147,162239,162240],{"class":149,"line":1489},[147,162241,2674],{"emptyLinePlaceholder":324},[147,162243,162244,162246,162248,162251,162253,162255,162257],{"class":149,"line":1495},[147,162245,161469],{"class":157},[147,162247,445],{"class":397},[147,162249,162250],{"class":157}," divide(",[147,162252,845],{"class":448},[147,162254,12709],{"class":157},[147,162256,590],{"class":448},[147,162258,407],{"class":157},[147,162260,162261],{"class":149,"line":1586},[147,162262,2674],{"emptyLinePlaceholder":324},[147,162264,162265,162267,162269,162271,162273],{"class":149,"line":1592},[147,162266,1805],{"class":397},[147,162268,161715],{"class":157},[147,162270,39201],{"class":397},[147,162272,39207],{"class":448},[147,162274,4013],{"class":157},[147,162276,162277,162279,162281,162284],{"class":149,"line":1604},[147,162278,31573],{"class":448},[147,162280,401],{"class":157},[147,162282,162283],{"class":504},"\"除数不能为0\"",[147,162285,407],{"class":157},[147,162287,162288,162290],{"class":149,"line":1886},[147,162289,1975],{"class":397},[147,162291,4013],{"class":157},[147,162293,162294,162296],{"class":149,"line":1891},[147,162295,31573],{"class":448},[147,162297,76858],{"class":157},[14,162299,162301],{"id":162300},"_512-类型提示","5.12 类型提示",[19,162303,162304],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[138,162306,162308],{"className":30652,"code":162307,"language":30654,"meta":143,"style":143},"def add(a: int, b: int) -> int:\n    return a + b\n",[51,162309,162310,162333],{"__ignoreMap":143},[147,162311,162312,162314,162316,162319,162321,162324,162326,162329,162331],{"class":149,"line":150},[147,162313,32221],{"class":397},[147,162315,5483],{"class":2237},[147,162317,162318],{"class":157},"(a: ",[147,162320,404],{"class":448},[147,162322,162323],{"class":157},", b: ",[147,162325,404],{"class":448},[147,162327,162328],{"class":157},") -> ",[147,162330,404],{"class":448},[147,162332,4013],{"class":157},[147,162334,162335,162337,162339,162341],{"class":149,"line":312},[147,162336,4364],{"class":397},[147,162338,11143],{"class":157},[147,162340,880],{"class":397},[147,162342,151267],{"class":157},[19,162344,162345],{},"字符串参数：",[138,162347,162349],{"className":30652,"code":162348,"language":30654,"meta":143,"style":143},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[51,162350,162351,162368],{"__ignoreMap":143},[147,162352,162353,162355,162357,162360,162362,162364,162366],{"class":149,"line":150},[147,162354,32221],{"class":397},[147,162356,161159],{"class":2237},[147,162358,162359],{"class":157},"(name: ",[147,162361,1574],{"class":448},[147,162363,162328],{"class":157},[147,162365,95958],{"class":448},[147,162367,4013],{"class":157},[147,162369,162370,162372,162374,162376,162378,162380,162382,162384,162386],{"class":149,"line":312},[147,162371,31573],{"class":448},[147,162373,401],{"class":157},[147,162375,452],{"class":397},[147,162377,157217],{"class":504},[147,162379,1295],{"class":448},[147,162381,80082],{"class":157},[147,162383,1345],{"class":448},[147,162385,650],{"class":504},[147,162387,407],{"class":157},[19,162389,162390],{},"列表参数：",[138,162392,162394],{"className":30652,"code":162393,"language":30654,"meta":143,"style":143},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[51,162395,162396,162415,162423,162435,162444],{"__ignoreMap":143},[147,162397,162398,162400,162403,162406,162408,162411,162413],{"class":149,"line":150},[147,162399,32221],{"class":397},[147,162401,162402],{"class":2237}," get_total",[147,162404,162405],{"class":157},"(numbers: list[",[147,162407,404],{"class":448},[147,162409,162410],{"class":157},"]) -> ",[147,162412,404],{"class":448},[147,162414,4013],{"class":157},[147,162416,162417,162419,162421],{"class":149,"line":312},[147,162418,159470],{"class":157},[147,162420,445],{"class":397},[147,162422,47607],{"class":448},[147,162424,162425,162427,162430,162432],{"class":149,"line":1454},[147,162426,3475],{"class":397},[147,162428,162429],{"class":157}," number ",[147,162431,26317],{"class":397},[147,162433,162434],{"class":157}," numbers:\n",[147,162436,162437,162439,162441],{"class":149,"line":1469},[147,162438,160145],{"class":157},[147,162440,9751],{"class":397},[147,162442,162443],{"class":157}," number\n",[147,162445,162446,162448],{"class":149,"line":1475},[147,162447,4364],{"class":397},[147,162449,162450],{"class":157}," total\n",[19,162452,162453],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,162455,162457],{"id":162456},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[138,162459,162461],{"className":30652,"code":162460,"language":30654,"meta":143,"style":143},"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",[51,162462,162463,162473,162477,162481,162489,162500,162510,162520,162530,162540,162544,162548,162557,162579,162583,162587,162596,162602,162622,162634,162645,162649,162658,162669,162674,162678,162682,162691,162697,162716,162728,162738,162742,162753,162763,162767,162775,162786,162790,162794,162798,162806,162811,162825,162829,162841,162846,162858,162863,162875,162880,162892,162902,162906,162912],{"__ignoreMap":143},[147,162464,162465,162468,162470],{"class":149,"line":150},[147,162466,162467],{"class":157},"balance ",[147,162469,445],{"class":397},[147,162471,162472],{"class":448}," 1000\n",[147,162474,162475],{"class":149,"line":312},[147,162476,2674],{"emptyLinePlaceholder":324},[147,162478,162479],{"class":149,"line":1454},[147,162480,2674],{"emptyLinePlaceholder":324},[147,162482,162483,162485,162487],{"class":149,"line":1469},[147,162484,32221],{"class":397},[147,162486,152196],{"class":2237},[147,162488,32227],{"class":157},[147,162490,162491,162493,162495,162498],{"class":149,"line":1475},[147,162492,31573],{"class":448},[147,162494,401],{"class":157},[147,162496,162497],{"class":504},"\"====== ATM ======\"",[147,162499,407],{"class":157},[147,162501,162502,162504,162506,162508],{"class":149,"line":1489},[147,162503,31573],{"class":448},[147,162505,401],{"class":157},[147,162507,160811],{"class":504},[147,162509,407],{"class":157},[147,162511,162512,162514,162516,162518],{"class":149,"line":1495},[147,162513,31573],{"class":448},[147,162515,401],{"class":157},[147,162517,160822],{"class":504},[147,162519,407],{"class":157},[147,162521,162522,162524,162526,162528],{"class":149,"line":1586},[147,162523,31573],{"class":448},[147,162525,401],{"class":157},[147,162527,160833],{"class":504},[147,162529,407],{"class":157},[147,162531,162532,162534,162536,162538],{"class":149,"line":1592},[147,162533,31573],{"class":448},[147,162535,401],{"class":157},[147,162537,160844],{"class":504},[147,162539,407],{"class":157},[147,162541,162542],{"class":149,"line":1604},[147,162543,2674],{"emptyLinePlaceholder":324},[147,162545,162546],{"class":149,"line":1886},[147,162547,2674],{"emptyLinePlaceholder":324},[147,162549,162550,162552,162555],{"class":149,"line":1891},[147,162551,32221],{"class":397},[147,162553,162554],{"class":2237}," show_balance",[147,162556,32227],{"class":157},[147,162558,162559,162561,162563,162565,162568,162570,162573,162575,162577],{"class":149,"line":1897},[147,162560,31573],{"class":448},[147,162562,401],{"class":157},[147,162564,452],{"class":397},[147,162566,162567],{"class":504},"\"当前余额:",[147,162569,1295],{"class":448},[147,162571,162572],{"class":157},"balance",[147,162574,1345],{"class":448},[147,162576,157175],{"class":504},[147,162578,407],{"class":157},[147,162580,162581],{"class":149,"line":1902},[147,162582,2674],{"emptyLinePlaceholder":324},[147,162584,162585],{"class":149,"line":1916},[147,162586,2674],{"emptyLinePlaceholder":324},[147,162588,162589,162591,162594],{"class":149,"line":1921},[147,162590,32221],{"class":397},[147,162592,162593],{"class":2237}," save_money",[147,162595,32227],{"class":157},[147,162597,162598,162600],{"class":149,"line":1927},[147,162599,162024],{"class":397},[147,162601,150262],{"class":157},[147,162603,162604,162607,162609,162611,162613,162615,162617,162620],{"class":149,"line":1948},[147,162605,162606],{"class":157},"    money ",[147,162608,445],{"class":397},[147,162610,110067],{"class":448},[147,162612,401],{"class":157},[147,162614,54094],{"class":448},[147,162616,401],{"class":157},[147,162618,162619],{"class":504},"\"请输入存款金额:\"",[147,162621,30771],{"class":157},[147,162623,162624,162626,162628,162630,162632],{"class":149,"line":1953},[147,162625,3375],{"class":397},[147,162627,150305],{"class":157},[147,162629,1862],{"class":397},[147,162631,4367],{"class":448},[147,162633,4013],{"class":157},[147,162635,162636,162638,162640,162643],{"class":149,"line":1967},[147,162637,32725],{"class":448},[147,162639,401],{"class":157},[147,162641,162642],{"class":504},"\"金额必须大于0\"",[147,162644,407],{"class":157},[147,162646,162647],{"class":149,"line":1972},[147,162648,152524],{"class":397},[147,162650,162651,162654,162656],{"class":149,"line":2001},[147,162652,162653],{"class":157},"    balance ",[147,162655,9751],{"class":397},[147,162657,150338],{"class":157},[147,162659,162660,162662,162664,162667],{"class":149,"line":2006},[147,162661,31573],{"class":448},[147,162663,401],{"class":157},[147,162665,162666],{"class":504},"\"存款成功\"",[147,162668,407],{"class":157},[147,162670,162671],{"class":149,"line":2023},[147,162672,162673],{"class":157},"    show_balance()\n",[147,162675,162676],{"class":149,"line":2028},[147,162677,2674],{"emptyLinePlaceholder":324},[147,162679,162680],{"class":149,"line":2033},[147,162681,2674],{"emptyLinePlaceholder":324},[147,162683,162684,162686,162689],{"class":149,"line":2038},[147,162685,32221],{"class":397},[147,162687,162688],{"class":2237}," withdraw_money",[147,162690,32227],{"class":157},[147,162692,162693,162695],{"class":149,"line":2052},[147,162694,162024],{"class":397},[147,162696,150262],{"class":157},[147,162698,162699,162701,162703,162705,162707,162709,162711,162714],{"class":149,"line":2057},[147,162700,162606],{"class":157},[147,162702,445],{"class":397},[147,162704,110067],{"class":448},[147,162706,401],{"class":157},[147,162708,54094],{"class":448},[147,162710,401],{"class":157},[147,162712,162713],{"class":504},"\"请输入取款金额:\"",[147,162715,30771],{"class":157},[147,162717,162718,162720,162722,162724,162726],{"class":149,"line":2851},[147,162719,3375],{"class":397},[147,162721,150305],{"class":157},[147,162723,1862],{"class":397},[147,162725,4367],{"class":448},[147,162727,4013],{"class":157},[147,162729,162730,162732,162734,162736],{"class":149,"line":2865},[147,162731,32725],{"class":448},[147,162733,401],{"class":157},[147,162735,162642],{"class":504},[147,162737,407],{"class":157},[147,162739,162740],{"class":149,"line":2873},[147,162741,152524],{"class":397},[147,162743,162744,162746,162748,162750],{"class":149,"line":2878},[147,162745,3375],{"class":397},[147,162747,150305],{"class":157},[147,162749,1359],{"class":397},[147,162751,162752],{"class":157}," balance:\n",[147,162754,162755,162757,162759,162761],{"class":149,"line":2884},[147,162756,32725],{"class":448},[147,162758,401],{"class":157},[147,162760,150400],{"class":504},[147,162762,407],{"class":157},[147,162764,162765],{"class":149,"line":2890},[147,162766,152524],{"class":397},[147,162768,162769,162771,162773],{"class":149,"line":2895},[147,162770,162653],{"class":157},[147,162772,150415],{"class":397},[147,162774,150338],{"class":157},[147,162776,162777,162779,162781,162784],{"class":149,"line":8222},[147,162778,31573],{"class":448},[147,162780,401],{"class":157},[147,162782,162783],{"class":504},"\"取款成功\"",[147,162785,407],{"class":157},[147,162787,162788],{"class":149,"line":8246},[147,162789,162673],{"class":157},[147,162791,162792],{"class":149,"line":8251},[147,162793,2674],{"emptyLinePlaceholder":324},[147,162795,162796],{"class":149,"line":8257},[147,162797,2674],{"emptyLinePlaceholder":324},[147,162799,162800,162802,162804],{"class":149,"line":8284},[147,162801,108933],{"class":397},[147,162803,95564],{"class":448},[147,162805,4013],{"class":157},[147,162807,162808],{"class":149,"line":8289},[147,162809,162810],{"class":157},"    show_menu()\n",[147,162812,162813,162815,162817,162819,162821,162823],{"class":149,"line":8295},[147,162814,160855],{"class":157},[147,162816,445],{"class":397},[147,162818,60878],{"class":448},[147,162820,401],{"class":157},[147,162822,153236],{"class":504},[147,162824,407],{"class":157},[147,162826,162827],{"class":149,"line":8307},[147,162828,2674],{"emptyLinePlaceholder":324},[147,162830,162831,162833,162835,162837,162839],{"class":149,"line":8319},[147,162832,3375],{"class":397},[147,162834,153249],{"class":157},[147,162836,3223],{"class":397},[147,162838,153254],{"class":504},[147,162840,4013],{"class":157},[147,162842,162843],{"class":149,"line":8331},[147,162844,162845],{"class":157},"        show_balance()\n",[147,162847,162848,162850,162852,162854,162856],{"class":149,"line":9990},[147,162849,39567],{"class":397},[147,162851,153249],{"class":157},[147,162853,3223],{"class":397},[147,162855,153273],{"class":504},[147,162857,4013],{"class":157},[147,162859,162860],{"class":149,"line":10015},[147,162861,162862],{"class":157},"        save_money()\n",[147,162864,162865,162867,162869,162871,162873],{"class":149,"line":10038},[147,162866,39567],{"class":397},[147,162868,153249],{"class":157},[147,162870,3223],{"class":397},[147,162872,153291],{"class":504},[147,162874,4013],{"class":157},[147,162876,162877],{"class":149,"line":10062},[147,162878,162879],{"class":157},"        withdraw_money()\n",[147,162881,162882,162884,162886,162888,162890],{"class":149,"line":10067},[147,162883,39567],{"class":397},[147,162885,153249],{"class":157},[147,162887,3223],{"class":397},[147,162889,153345],{"class":504},[147,162891,4013],{"class":157},[147,162893,162894,162896,162898,162900],{"class":149,"line":10072},[147,162895,32725],{"class":448},[147,162897,401],{"class":157},[147,162899,153356],{"class":504},[147,162901,407],{"class":157},[147,162903,162904],{"class":149,"line":10077},[147,162905,31901],{"class":397},[147,162907,162908,162910],{"class":149,"line":10086},[147,162909,158185],{"class":397},[147,162911,4013],{"class":157},[147,162913,162914,162916,162918,162920],{"class":149,"line":10091},[147,162915,32725],{"class":448},[147,162917,401],{"class":157},[147,162919,153377],{"class":504},[147,162921,407],{"class":157},[19,162923,162924],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,162926,162928],{"id":162927},"_514-易错点","5.14 易错点",[350,162930,162931,162934,162937,162942,162947,162950],{},[353,162932,162933],{},"函数定义后必须调用才会执行。",[353,162935,162936],{},"函数名后面有括号才是调用。",[353,162938,162939,162941],{},[51,162940,17319],{}," 后面的代码不会执行。",[353,162943,162944,162945,28659],{},"没有返回值的函数默认返回 ",[51,162946,95958],{},[353,162948,162949],{},"局部变量不能在函数外部访问。",[353,162951,162952,162953,162955],{},"不要滥用 ",[51,162954,161989],{},"，更好的方式是让函数返回新值。",[19,162957,162958,162959,162961],{},"例如不用 ",[51,162960,161989],{}," 改写存款：",[138,162963,162965],{"className":30652,"code":162964,"language":30654,"meta":143,"style":143},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[51,162966,162967,162976,162987,162991,162995,163003,163016],{"__ignoreMap":143},[147,162968,162969,162971,162973],{"class":149,"line":150},[147,162970,32221],{"class":397},[147,162972,162593],{"class":2237},[147,162974,162975],{"class":157},"(balance, money):\n",[147,162977,162978,162980,162983,162985],{"class":149,"line":312},[147,162979,4364],{"class":397},[147,162981,162982],{"class":157}," balance ",[147,162984,880],{"class":397},[147,162986,150338],{"class":157},[147,162988,162989],{"class":149,"line":1454},[147,162990,2674],{"emptyLinePlaceholder":324},[147,162992,162993],{"class":149,"line":1469},[147,162994,2674],{"emptyLinePlaceholder":324},[147,162996,162997,162999,163001],{"class":149,"line":1475},[147,162998,162467],{"class":157},[147,163000,445],{"class":397},[147,163002,162472],{"class":448},[147,163004,163005,163007,163009,163012,163014],{"class":149,"line":1489},[147,163006,162467],{"class":157},[147,163008,445],{"class":397},[147,163010,163011],{"class":157}," save_money(balance, ",[147,163013,1996],{"class":448},[147,163015,407],{"class":157},[147,163017,163018,163020],{"class":149,"line":1495},[147,163019,30689],{"class":448},[147,163021,163022],{"class":157},"(balance)\n",[14,163024,163026],{"id":163025},"_515-本章练习","5.15 本章练习",[350,163028,163029,163036,163042,163048,163054],{},[353,163030,163031,163032,163035],{},"定义函数 ",[51,163033,163034],{},"print_student(name, age)","，输出学生信息。",[353,163037,163031,163038,163041],{},[51,163039,163040],{},"get_max(a, b, c)","，返回三个数中的最大值。",[353,163043,163031,163044,163047],{},[51,163045,163046],{},"is_even(num)","，判断一个数是否为偶数。",[353,163049,163031,163050,163053],{},[51,163051,163052],{},"calculate_bmi(weight, height)","，返回 BMI。",[353,163055,163056],{},"把第 4 章的菜单程序拆分成多个函数。",[308,163058,163059],{},"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":143,"searchDepth":312,"depth":312,"links":163061},[163062,163063,163064,163065,163066,163067,163068,163069,163070,163074,163075,163076,163077,163078,163079],{"id":161082,"depth":312,"text":161083},{"id":161123,"depth":312,"text":161124},{"id":161213,"depth":312,"text":161214},{"id":161294,"depth":312,"text":161295},{"id":161427,"depth":312,"text":161428},{"id":161549,"depth":312,"text":161550},{"id":161671,"depth":312,"text":161672},{"id":161748,"depth":312,"text":161749},{"id":161870,"depth":312,"text":161871,"children":163071},[163072,163073],{"id":161874,"depth":1454,"text":161875},{"id":161932,"depth":1454,"text":161933},{"id":162061,"depth":312,"text":162062},{"id":162187,"depth":312,"text":162188},{"id":162300,"depth":312,"text":162301},{"id":162456,"depth":312,"text":162457},{"id":162927,"depth":312,"text":162928},{"id":163025,"depth":312,"text":163026},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":161074,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":163086,"title":163087,"body":163088,"description":321,"extension":322,"meta":166132,"navigation":324,"path":166133,"seo":166134,"stem":166135,"__hash__":166136},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":163089,"toc":166113},[163090,163093,163097,163100,163103,163207,163210,163214,163217,163297,163300,163304,163307,163367,163370,163406,163409,163424,163428,163501,163504,163559,163562,163632,163635,163719,163729,163787,163791,163836,163839,163865,163868,163974,163978,163981,164023,164026,164090,164093,164097,164100,164161,164164,164194,164197,164235,164239,164242,164251,164254,164378,164381,164422,164426,164429,164440,164480,164483,164498,164503,164506,164573,164576,164666,164670,164673,164721,164724,164751,164753,164783,164786,164806,164809,164840,164843,164876,164880,164883,164907,164910,164934,164937,164961,164965,164968,165098,165101,165181,165184,165259,165263,165266,165316,165319,165361,165364,165388,165390,165414,165417,165472,165475,165541,165545,165548,165551,165589,165592,165645,165648,165694,165697,165730,165733,165737,166056,166060,166089,166093,166110],[10,163091,163087],{"id":163092},"_6-数据容器",[14,163094,163096],{"id":163095},"_61-什么是数据容器","6.1 什么是数据容器",[19,163098,163099],{},"数据容器用于一次保存多个数据。",[19,163101,163102],{},"常见容器：",[537,163104,163105,163122],{},[540,163106,163107],{},[543,163108,163109,163111,163114,163117,163120],{},[546,163110,26045],{},[546,163112,163113],{},"是否有序",[546,163115,163116],{},"是否可变",[546,163118,163119],{},"是否允许重复",[546,163121,27766],{},[583,163123,163124,163142,163158,163173,163190],{},[543,163125,163126,163129,163132,163135,163138],{},[588,163127,163128],{},"list列表",[588,163130,163131],{},"有序",[588,163133,163134],{},"可变",[588,163136,163137],{},"允许",[588,163139,163140],{},[51,163141,155420],{},[543,163143,163144,163147,163149,163152,163154],{},[588,163145,163146],{},"tuple元组",[588,163148,163131],{},[588,163150,163151],{},"不可变",[588,163153,163137],{},[588,163155,163156],{},[51,163157,155433],{},[543,163159,163160,163163,163165,163167,163169],{},[588,163161,163162],{},"str字符串",[588,163164,163131],{},[588,163166,163151],{},[588,163168,163137],{},[588,163170,163171],{},[51,163172,156043],{},[543,163174,163175,163178,163181,163183,163186],{},[588,163176,163177],{},"set集合",[588,163179,163180],{},"无序",[588,163182,163134],{},[588,163184,163185],{},"不允许",[588,163187,163188],{},[51,163189,155458],{},[543,163191,163192,163195,163197,163199,163202],{},[588,163193,163194],{},"dict字典",[588,163196,163131],{},[588,163198,163134],{},[588,163200,163201],{},"key不允许重复",[588,163203,163204],{},[51,163205,163206],{},"{\"name\": \"小明\"}",[19,163208,163209],{},"Python 3.7 之后，字典保持插入顺序。",[14,163211,163213],{"id":163212},"_62-列表list","6.2 列表list",[19,163215,163216],{},"列表用于保存一组有顺序的数据。",[138,163218,163220],{"className":30652,"code":163219,"language":30654,"meta":143,"style":143},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[51,163221,163222,163242,163267,163288],{"__ignoreMap":143},[147,163223,163224,163226,163228,163230,163232,163234,163236,163238,163240],{"class":149,"line":150},[147,163225,160543],{"class":157},[147,163227,445],{"class":397},[147,163229,52499],{"class":157},[147,163231,150051],{"class":504},[147,163233,12709],{"class":157},[147,163235,151099],{"class":504},[147,163237,12709],{"class":157},[147,163239,159894],{"class":504},[147,163241,33520],{"class":157},[147,163243,163244,163247,163249,163251,163253,163255,163257,163259,163261,163263,163265],{"class":149,"line":312},[147,163245,163246],{"class":157},"numbers ",[147,163248,445],{"class":397},[147,163250,52499],{"class":157},[147,163252,616],{"class":448},[147,163254,12709],{"class":157},[147,163256,477],{"class":448},[147,163258,12709],{"class":157},[147,163260,471],{"class":448},[147,163262,12709],{"class":157},[147,163264,692],{"class":448},[147,163266,33520],{"class":157},[147,163268,163269,163272,163274,163276,163278,163280,163282,163284,163286],{"class":149,"line":1454},[147,163270,163271],{"class":157},"mixed ",[147,163273,445],{"class":397},[147,163275,52499],{"class":157},[147,163277,150051],{"class":504},[147,163279,12709],{"class":157},[147,163281,1049],{"class":448},[147,163283,12709],{"class":157},[147,163285,31750],{"class":448},[147,163287,33520],{"class":157},[147,163289,163290,163293,163295],{"class":149,"line":1469},[147,163291,163292],{"class":157},"empty ",[147,163294,445],{"class":397},[147,163296,52111],{"class":157},[19,163298,163299],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,163301,163303],{"id":163302},"_63-列表索引","6.3 列表索引",[19,163305,163306],{},"正向索引从 0 开始：",[138,163308,163310],{"className":30652,"code":163309,"language":30654,"meta":143,"style":143},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[51,163311,163312,163332,163336,163347,163357],{"__ignoreMap":143},[147,163313,163314,163316,163318,163320,163322,163324,163326,163328,163330],{"class":149,"line":150},[147,163315,160543],{"class":157},[147,163317,445],{"class":397},[147,163319,52499],{"class":157},[147,163321,150051],{"class":504},[147,163323,12709],{"class":157},[147,163325,151099],{"class":504},[147,163327,12709],{"class":157},[147,163329,159894],{"class":504},[147,163331,33520],{"class":157},[147,163333,163334],{"class":149,"line":312},[147,163335,2674],{"emptyLinePlaceholder":324},[147,163337,163338,163340,163343,163345],{"class":149,"line":1454},[147,163339,30689],{"class":448},[147,163341,163342],{"class":157},"(names[",[147,163344,590],{"class":448},[147,163346,4931],{"class":157},[147,163348,163349,163351,163353,163355],{"class":149,"line":1469},[147,163350,30689],{"class":448},[147,163352,163342],{"class":157},[147,163354,616],{"class":448},[147,163356,4931],{"class":157},[147,163358,163359,163361,163363,163365],{"class":149,"line":1475},[147,163360,30689],{"class":448},[147,163362,163342],{"class":157},[147,163364,477],{"class":448},[147,163366,4931],{"class":157},[19,163368,163369],{},"反向索引从 -1 开始：",[138,163371,163373],{"className":30652,"code":163372,"language":30654,"meta":143,"style":143},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[51,163374,163375,163391],{"__ignoreMap":143},[147,163376,163377,163379,163381,163383,163385,163388],{"class":149,"line":150},[147,163378,30689],{"class":448},[147,163380,163342],{"class":157},[147,163382,931],{"class":397},[147,163384,616],{"class":448},[147,163386,163387],{"class":157},"])  ",[147,163389,163390],{"class":458},"# 小刚\n",[147,163392,163393,163395,163397,163399,163401,163403],{"class":149,"line":312},[147,163394,30689],{"class":448},[147,163396,163342],{"class":157},[147,163398,931],{"class":397},[147,163400,477],{"class":448},[147,163402,163387],{"class":157},[147,163404,163405],{"class":458},"# 小红\n",[19,163407,163408],{},"索引越界会报错：",[138,163410,163412],{"className":30652,"code":163411,"language":30654,"meta":143,"style":143},"print(names[3])\n",[51,163413,163414],{"__ignoreMap":143},[147,163415,163416,163418,163420,163422],{"class":149,"line":150},[147,163417,30689],{"class":448},[147,163419,163342],{"class":157},[147,163421,471],{"class":448},[147,163423,4931],{"class":157},[14,163425,163427],{"id":163426},"_64-列表常用方法","6.4 列表常用方法",[138,163429,163431],{"className":30652,"code":163430,"language":30654,"meta":143,"style":143},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[51,163432,163433,163449,163453,163462,163476,163490,163494],{"__ignoreMap":143},[147,163434,163435,163437,163439,163441,163443,163445,163447],{"class":149,"line":150},[147,163436,160543],{"class":157},[147,163438,445],{"class":397},[147,163440,52499],{"class":157},[147,163442,150051],{"class":504},[147,163444,12709],{"class":157},[147,163446,151099],{"class":504},[147,163448,33520],{"class":157},[147,163450,163451],{"class":149,"line":312},[147,163452,2674],{"emptyLinePlaceholder":324},[147,163454,163455,163458,163460],{"class":149,"line":1454},[147,163456,163457],{"class":157},"names.append(",[147,163459,159894],{"class":504},[147,163461,407],{"class":157},[147,163463,163464,163467,163469,163471,163474],{"class":149,"line":1469},[147,163465,163466],{"class":157},"names.insert(",[147,163468,616],{"class":448},[147,163470,12709],{"class":157},[147,163472,163473],{"class":504},"\"小李\"",[147,163475,407],{"class":157},[147,163477,163478,163481,163483,163485,163488],{"class":149,"line":1475},[147,163479,163480],{"class":157},"names.extend([",[147,163482,8957],{"class":504},[147,163484,12709],{"class":157},[147,163486,163487],{"class":504},"\"小赵\"",[147,163489,4931],{"class":157},[147,163491,163492],{"class":149,"line":1489},[147,163493,2674],{"emptyLinePlaceholder":324},[147,163495,163496,163498],{"class":149,"line":1495},[147,163497,30689],{"class":448},[147,163499,163500],{"class":157},"(names)\n",[19,163502,163503],{},"删除元素：",[138,163505,163507],{"className":30652,"code":163506,"language":30654,"meta":143,"style":143},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[51,163508,163509,163518,163528,163542,163554],{"__ignoreMap":143},[147,163510,163511,163514,163516],{"class":149,"line":150},[147,163512,163513],{"class":157},"names.remove(",[147,163515,151099],{"class":504},[147,163517,407],{"class":157},[147,163519,163520,163523,163525],{"class":149,"line":312},[147,163521,163522],{"class":157},"last ",[147,163524,445],{"class":397},[147,163526,163527],{"class":157}," names.pop()\n",[147,163529,163530,163533,163535,163538,163540],{"class":149,"line":1454},[147,163531,163532],{"class":157},"first ",[147,163534,445],{"class":397},[147,163536,163537],{"class":157}," names.pop(",[147,163539,590],{"class":448},[147,163541,407],{"class":157},[147,163543,163544,163547,163550,163552],{"class":149,"line":1469},[147,163545,163546],{"class":397},"del",[147,163548,163549],{"class":157}," names[",[147,163551,590],{"class":448},[147,163553,33520],{"class":157},[147,163555,163556],{"class":149,"line":1475},[147,163557,163558],{"class":157},"names.clear()\n",[19,163560,163561],{},"查询和统计：",[138,163563,163565],{"className":30652,"code":163564,"language":30654,"meta":143,"style":143},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[51,163566,163567,163595,163599,163610,163621],{"__ignoreMap":143},[147,163568,163569,163571,163573,163575,163577,163579,163581,163583,163585,163587,163589,163591,163593],{"class":149,"line":150},[147,163570,163246],{"class":157},[147,163572,445],{"class":397},[147,163574,52499],{"class":157},[147,163576,616],{"class":448},[147,163578,12709],{"class":157},[147,163580,477],{"class":448},[147,163582,12709],{"class":157},[147,163584,471],{"class":448},[147,163586,12709],{"class":157},[147,163588,477],{"class":448},[147,163590,12709],{"class":157},[147,163592,692],{"class":448},[147,163594,33520],{"class":157},[147,163596,163597],{"class":149,"line":312},[147,163598,2674],{"emptyLinePlaceholder":324},[147,163600,163601,163603,163606,163608],{"class":149,"line":1454},[147,163602,30689],{"class":448},[147,163604,163605],{"class":157},"(numbers.index(",[147,163607,471],{"class":448},[147,163609,30771],{"class":157},[147,163611,163612,163614,163617,163619],{"class":149,"line":1469},[147,163613,30689],{"class":448},[147,163615,163616],{"class":157},"(numbers.count(",[147,163618,477],{"class":448},[147,163620,30771],{"class":157},[147,163622,163623,163625,163627,163629],{"class":149,"line":1475},[147,163624,30689],{"class":448},[147,163626,401],{"class":157},[147,163628,7632],{"class":448},[147,163630,163631],{"class":157},"(numbers))\n",[19,163633,163634],{},"排序：",[138,163636,163638],{"className":30652,"code":163637,"language":30654,"meta":143,"style":143},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[51,163639,163640,163664,163668,163673,163680,163684,163698,163704,163708,163713],{"__ignoreMap":143},[147,163641,163642,163644,163646,163648,163650,163652,163654,163656,163658,163660,163662],{"class":149,"line":150},[147,163643,163246],{"class":157},[147,163645,445],{"class":397},[147,163647,52499],{"class":157},[147,163649,471],{"class":448},[147,163651,12709],{"class":157},[147,163653,616],{"class":448},[147,163655,12709],{"class":157},[147,163657,718],{"class":448},[147,163659,12709],{"class":157},[147,163661,477],{"class":448},[147,163663,33520],{"class":157},[147,163665,163666],{"class":149,"line":312},[147,163667,2674],{"emptyLinePlaceholder":324},[147,163669,163670],{"class":149,"line":1454},[147,163671,163672],{"class":157},"numbers.sort()\n",[147,163674,163675,163677],{"class":149,"line":1469},[147,163676,30689],{"class":448},[147,163678,163679],{"class":157},"(numbers)\n",[147,163681,163682],{"class":149,"line":1475},[147,163683,2674],{"emptyLinePlaceholder":324},[147,163685,163686,163689,163692,163694,163696],{"class":149,"line":1489},[147,163687,163688],{"class":157},"numbers.sort(",[147,163690,163691],{"class":5490},"reverse",[147,163693,445],{"class":397},[147,163695,31750],{"class":448},[147,163697,407],{"class":157},[147,163699,163700,163702],{"class":149,"line":1495},[147,163701,30689],{"class":448},[147,163703,163679],{"class":157},[147,163705,163706],{"class":149,"line":1586},[147,163707,2674],{"emptyLinePlaceholder":324},[147,163709,163710],{"class":149,"line":1592},[147,163711,163712],{"class":157},"numbers.reverse()\n",[147,163714,163715,163717],{"class":149,"line":1604},[147,163716,30689],{"class":448},[147,163718,163679],{"class":157},[19,163720,163721,163724,163725,163728],{},[51,163722,163723],{},"sort()"," 会修改原列表，",[51,163726,163727],{},"sorted()"," 返回新列表。",[138,163730,163732],{"className":30652,"code":163731,"language":30654,"meta":143,"style":143},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[51,163733,163734,163758,163770,163774,163780],{"__ignoreMap":143},[147,163735,163736,163738,163740,163742,163744,163746,163748,163750,163752,163754,163756],{"class":149,"line":150},[147,163737,163246],{"class":157},[147,163739,445],{"class":397},[147,163741,52499],{"class":157},[147,163743,471],{"class":448},[147,163745,12709],{"class":157},[147,163747,616],{"class":448},[147,163749,12709],{"class":157},[147,163751,718],{"class":448},[147,163753,12709],{"class":157},[147,163755,477],{"class":448},[147,163757,33520],{"class":157},[147,163759,163760,163763,163765,163768],{"class":149,"line":312},[147,163761,163762],{"class":157},"new_numbers ",[147,163764,445],{"class":397},[147,163766,163767],{"class":448}," sorted",[147,163769,163679],{"class":157},[147,163771,163772],{"class":149,"line":1454},[147,163773,2674],{"emptyLinePlaceholder":324},[147,163775,163776,163778],{"class":149,"line":1469},[147,163777,30689],{"class":448},[147,163779,163679],{"class":157},[147,163781,163782,163784],{"class":149,"line":1475},[147,163783,30689],{"class":448},[147,163785,163786],{"class":157},"(new_numbers)\n",[14,163788,163790],{"id":163789},"_65-列表遍历","6.5 列表遍历",[138,163792,163794],{"className":30652,"code":163793,"language":30654,"meta":143,"style":143},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[51,163795,163796,163816,163820,163830],{"__ignoreMap":143},[147,163797,163798,163800,163802,163804,163806,163808,163810,163812,163814],{"class":149,"line":150},[147,163799,160543],{"class":157},[147,163801,445],{"class":397},[147,163803,52499],{"class":157},[147,163805,150051],{"class":504},[147,163807,12709],{"class":157},[147,163809,151099],{"class":504},[147,163811,12709],{"class":157},[147,163813,159894],{"class":504},[147,163815,33520],{"class":157},[147,163817,163818],{"class":149,"line":312},[147,163819,2674],{"emptyLinePlaceholder":324},[147,163821,163822,163824,163826,163828],{"class":149,"line":1454},[147,163823,3299],{"class":397},[147,163825,160579],{"class":157},[147,163827,26317],{"class":397},[147,163829,160584],{"class":157},[147,163831,163832,163834],{"class":149,"line":1469},[147,163833,31573],{"class":448},[147,163835,150823],{"class":157},[19,163837,163838],{},"需要索引时：",[138,163840,163842],{"className":30652,"code":163841,"language":30654,"meta":143,"style":143},"for index, name in enumerate(names):\n    print(index, name)\n",[51,163843,163844,163858],{"__ignoreMap":143},[147,163845,163846,163848,163851,163853,163855],{"class":149,"line":150},[147,163847,3299],{"class":397},[147,163849,163850],{"class":157}," index, name ",[147,163852,26317],{"class":397},[147,163854,31880],{"class":448},[147,163856,163857],{"class":157},"(names):\n",[147,163859,163860,163862],{"class":149,"line":312},[147,163861,31573],{"class":448},[147,163863,163864],{"class":157},"(index, name)\n",[19,163866,163867],{},"统计总分：",[138,163869,163871],{"className":30652,"code":163870,"language":30654,"meta":143,"style":143},"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",[51,163872,163873,163898,163906,163910,163921,163929,163933,163950],{"__ignoreMap":143},[147,163874,163875,163878,163880,163882,163884,163886,163888,163890,163892,163894,163896],{"class":149,"line":150},[147,163876,163877],{"class":157},"scores ",[147,163879,445],{"class":397},[147,163881,52499],{"class":157},[147,163883,1261],{"class":448},[147,163885,12709],{"class":157},[147,163887,1135],{"class":448},[147,163889,12709],{"class":157},[147,163891,653],{"class":448},[147,163893,12709],{"class":157},[147,163895,960],{"class":448},[147,163897,33520],{"class":157},[147,163899,163900,163902,163904],{"class":149,"line":312},[147,163901,157423],{"class":157},[147,163903,445],{"class":397},[147,163905,47607],{"class":448},[147,163907,163908],{"class":149,"line":1454},[147,163909,2674],{"emptyLinePlaceholder":324},[147,163911,163912,163914,163916,163918],{"class":149,"line":1469},[147,163913,3299],{"class":397},[147,163915,157946],{"class":157},[147,163917,26317],{"class":397},[147,163919,163920],{"class":157}," scores:\n",[147,163922,163923,163925,163927],{"class":149,"line":1475},[147,163924,159470],{"class":157},[147,163926,9751],{"class":397},[147,163928,1853],{"class":157},[147,163930,163931],{"class":149,"line":1489},[147,163932,2674],{"emptyLinePlaceholder":324},[147,163934,163935,163938,163940,163943,163945,163947],{"class":149,"line":1495},[147,163936,163937],{"class":157},"avg ",[147,163939,445],{"class":397},[147,163941,163942],{"class":157}," total ",[147,163944,983],{"class":397},[147,163946,7605],{"class":448},[147,163948,163949],{"class":157},"(scores)\n",[147,163951,163952,163954,163956,163958,163961,163963,163966,163968,163970,163972],{"class":149,"line":1586},[147,163953,30689],{"class":448},[147,163955,401],{"class":157},[147,163957,452],{"class":397},[147,163959,163960],{"class":504},"\"平均分:",[147,163962,1295],{"class":448},[147,163964,163965],{"class":157},"avg",[147,163967,157322],{"class":397},[147,163969,1345],{"class":448},[147,163971,650],{"class":504},[147,163973,407],{"class":157},[14,163975,163977],{"id":163976},"_66-元组tuple","6.6 元组tuple",[19,163979,163980],{},"元组和列表类似，但不可修改。",[138,163982,163984],{"className":30652,"code":163983,"language":30654,"meta":143,"style":143},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[51,163985,163986,164003],{"__ignoreMap":143},[147,163987,163988,163991,163993,163995,163997,163999,164001],{"class":149,"line":150},[147,163989,163990],{"class":157},"point ",[147,163992,445],{"class":397},[147,163994,1932],{"class":157},[147,163996,845],{"class":448},[147,163998,12709],{"class":157},[147,164000,1099],{"class":448},[147,164002,407],{"class":157},[147,164004,164005,164007,164009,164011,164013,164015,164017,164019,164021],{"class":149,"line":312},[147,164006,116584],{"class":157},[147,164008,445],{"class":397},[147,164010,1932],{"class":157},[147,164012,150051],{"class":504},[147,164014,12709],{"class":157},[147,164016,1049],{"class":448},[147,164018,12709],{"class":157},[147,164020,69542],{"class":504},[147,164022,407],{"class":157},[19,164024,164025],{},"单元素元组必须加逗号：",[138,164027,164029],{"className":30652,"code":164028,"language":30654,"meta":143,"style":143},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[51,164030,164031,164045,164058,164062,164076],{"__ignoreMap":143},[147,164032,164033,164036,164038,164040,164042],{"class":149,"line":150},[147,164034,164035],{"class":157},"t1 ",[147,164037,445],{"class":397},[147,164039,1932],{"class":157},[147,164041,845],{"class":448},[147,164043,164044],{"class":157},",)\n",[147,164046,164047,164050,164052,164054,164056],{"class":149,"line":312},[147,164048,164049],{"class":157},"t2 ",[147,164051,445],{"class":397},[147,164053,1932],{"class":157},[147,164055,845],{"class":448},[147,164057,407],{"class":157},[147,164059,164060],{"class":149,"line":1454},[147,164061,2674],{"emptyLinePlaceholder":324},[147,164063,164064,164066,164068,164070,164073],{"class":149,"line":1469},[147,164065,30689],{"class":448},[147,164067,401],{"class":157},[147,164069,103377],{"class":448},[147,164071,164072],{"class":157},"(t1))  ",[147,164074,164075],{"class":458},"# tuple\n",[147,164077,164078,164080,164082,164084,164087],{"class":149,"line":1475},[147,164079,30689],{"class":448},[147,164081,401],{"class":157},[147,164083,103377],{"class":448},[147,164085,164086],{"class":157},"(t2))  ",[147,164088,164089],{"class":458},"# int\n",[19,164091,164092],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,164094,164096],{"id":164095},"_67-字符串str","6.7 字符串str",[19,164098,164099],{},"字符串也是序列，可以索引、切片和遍历。",[138,164101,164103],{"className":30652,"code":164102,"language":30654,"meta":143,"style":143},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[51,164104,164105,164113,164117,164128,164140,164144,164155],{"__ignoreMap":143},[147,164106,164107,164109,164111],{"class":149,"line":150},[147,164108,156607],{"class":157},[147,164110,445],{"class":397},[147,164112,159844],{"class":504},[147,164114,164115],{"class":149,"line":312},[147,164116,2674],{"emptyLinePlaceholder":324},[147,164118,164119,164121,164124,164126],{"class":149,"line":1454},[147,164120,30689],{"class":448},[147,164122,164123],{"class":157},"(text[",[147,164125,590],{"class":448},[147,164127,4931],{"class":157},[147,164129,164130,164132,164134,164136,164138],{"class":149,"line":1469},[147,164131,30689],{"class":448},[147,164133,164123],{"class":157},[147,164135,931],{"class":397},[147,164137,616],{"class":448},[147,164139,4931],{"class":157},[147,164141,164142],{"class":149,"line":1475},[147,164143,2674],{"emptyLinePlaceholder":324},[147,164145,164146,164148,164150,164152],{"class":149,"line":1489},[147,164147,3299],{"class":397},[147,164149,159855],{"class":157},[147,164151,26317],{"class":397},[147,164153,164154],{"class":157}," text:\n",[147,164156,164157,164159],{"class":149,"line":1495},[147,164158,31573],{"class":448},[147,164160,159866],{"class":157},[19,164162,164163],{},"字符串不可变：",[138,164165,164167],{"className":30652,"code":164166,"language":30654,"meta":143,"style":143},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[51,164168,164169,164177],{"__ignoreMap":143},[147,164170,164171,164173,164175],{"class":149,"line":150},[147,164172,156607],{"class":157},[147,164174,445],{"class":397},[147,164176,159844],{"class":504},[147,164178,164179,164182,164184,164186,164188,164191],{"class":149,"line":312},[147,164180,164181],{"class":157},"text[",[147,164183,590],{"class":448},[147,164185,4717],{"class":157},[147,164187,445],{"class":397},[147,164189,164190],{"class":504}," \"P\"",[147,164192,164193],{"class":458},"  # 报错\n",[19,164195,164196],{},"如果要得到新字符串：",[138,164198,164200],{"className":30652,"code":164199,"language":30654,"meta":143,"style":143},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[51,164201,164202,164210,164228],{"__ignoreMap":143},[147,164203,164204,164206,164208],{"class":149,"line":150},[147,164205,156607],{"class":157},[147,164207,445],{"class":397},[147,164209,159844],{"class":504},[147,164211,164212,164214,164216,164218,164220,164223,164225],{"class":149,"line":312},[147,164213,156607],{"class":157},[147,164215,445],{"class":397},[147,164217,164190],{"class":504},[147,164219,45840],{"class":397},[147,164221,164222],{"class":157}," text[",[147,164224,616],{"class":448},[147,164226,164227],{"class":157},":]\n",[147,164229,164230,164232],{"class":149,"line":1454},[147,164231,30689],{"class":448},[147,164233,164234],{"class":157},"(text)\n",[14,164236,164238],{"id":164237},"_68-切片","6.8 切片",[19,164240,164241],{},"切片用于从序列中取一部分。",[138,164243,164245],{"className":30652,"code":164244,"language":30654,"meta":143,"style":143},"序列[开始:结束:步长]\n",[51,164246,164247],{"__ignoreMap":143},[147,164248,164249],{"class":149,"line":150},[147,164250,164244],{"class":157},[19,164252,164253],{},"结束位置不包含。",[138,164255,164257],{"className":30652,"code":164256,"language":30654,"meta":143,"style":143},"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",[51,164258,164259,164296,164300,164319,164334,164348,164362],{"__ignoreMap":143},[147,164260,164261,164264,164266,164268,164270,164272,164274,164276,164278,164280,164282,164284,164286,164288,164290,164292,164294],{"class":149,"line":150},[147,164262,164263],{"class":157},"nums ",[147,164265,445],{"class":397},[147,164267,52499],{"class":157},[147,164269,590],{"class":448},[147,164271,12709],{"class":157},[147,164273,616],{"class":448},[147,164275,12709],{"class":157},[147,164277,477],{"class":448},[147,164279,12709],{"class":157},[147,164281,471],{"class":448},[147,164283,12709],{"class":157},[147,164285,692],{"class":448},[147,164287,12709],{"class":157},[147,164289,718],{"class":448},[147,164291,12709],{"class":157},[147,164293,743],{"class":448},[147,164295,33520],{"class":157},[147,164297,164298],{"class":149,"line":312},[147,164299,2674],{"emptyLinePlaceholder":324},[147,164301,164302,164304,164307,164309,164311,164313,164316],{"class":149,"line":1454},[147,164303,30689],{"class":448},[147,164305,164306],{"class":157},"(nums[",[147,164308,616],{"class":448},[147,164310,1258],{"class":157},[147,164312,692],{"class":448},[147,164314,164315],{"class":157},"])    ",[147,164317,164318],{"class":458},"# [1, 2, 3]\n",[147,164320,164321,164323,164326,164328,164331],{"class":149,"line":1469},[147,164322,30689],{"class":448},[147,164324,164325],{"class":157},"(nums[:",[147,164327,471],{"class":448},[147,164329,164330],{"class":157},"])     ",[147,164332,164333],{"class":458},"# [0, 1, 2]\n",[147,164335,164336,164338,164340,164342,164345],{"class":149,"line":1475},[147,164337,30689],{"class":448},[147,164339,164306],{"class":157},[147,164341,471],{"class":448},[147,164343,164344],{"class":157},":])     ",[147,164346,164347],{"class":458},"# [3, 4, 5, 6]\n",[147,164349,164350,164352,164355,164357,164359],{"class":149,"line":1489},[147,164351,30689],{"class":448},[147,164353,164354],{"class":157},"(nums[::",[147,164356,477],{"class":448},[147,164358,164315],{"class":157},[147,164360,164361],{"class":458},"# [0, 2, 4, 6]\n",[147,164363,164364,164366,164368,164370,164372,164375],{"class":149,"line":1495},[147,164365,30689],{"class":448},[147,164367,164354],{"class":157},[147,164369,931],{"class":397},[147,164371,616],{"class":448},[147,164373,164374],{"class":157},"])   ",[147,164376,164377],{"class":458},"# 反转\n",[19,164379,164380],{},"字符串切片：",[138,164382,164384],{"className":30652,"code":164383,"language":30654,"meta":143,"style":143},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[51,164385,164386,164395,164409],{"__ignoreMap":143},[147,164387,164388,164390,164392],{"class":149,"line":150},[147,164389,156607],{"class":157},[147,164391,445],{"class":397},[147,164393,164394],{"class":504}," \"abcdef\"\n",[147,164396,164397,164399,164401,164403,164405,164407],{"class":149,"line":312},[147,164398,30689],{"class":448},[147,164400,164123],{"class":157},[147,164402,616],{"class":448},[147,164404,1258],{"class":157},[147,164406,692],{"class":448},[147,164408,4931],{"class":157},[147,164410,164411,164413,164416,164418,164420],{"class":149,"line":1454},[147,164412,30689],{"class":448},[147,164414,164415],{"class":157},"(text[::",[147,164417,931],{"class":397},[147,164419,616],{"class":448},[147,164421,4931],{"class":157},[14,164423,164425],{"id":164424},"_69-集合set","6.9 集合set",[19,164427,164428],{},"集合特点：",[350,164430,164431,164434,164437],{},[353,164432,164433],{},"无序。",[353,164435,164436],{},"元素不重复。",[353,164438,164439],{},"可以做交集、并集、差集。",[138,164441,164443],{"className":30652,"code":164442,"language":30654,"meta":143,"style":143},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[51,164444,164445,164473],{"__ignoreMap":143},[147,164446,164447,164449,164451,164453,164455,164457,164459,164461,164463,164465,164467,164469,164471],{"class":149,"line":150},[147,164448,164263],{"class":157},[147,164450,445],{"class":397},[147,164452,4722],{"class":157},[147,164454,616],{"class":448},[147,164456,12709],{"class":157},[147,164458,477],{"class":448},[147,164460,12709],{"class":157},[147,164462,471],{"class":448},[147,164464,12709],{"class":157},[147,164466,471],{"class":448},[147,164468,12709],{"class":157},[147,164470,692],{"class":448},[147,164472,1839],{"class":157},[147,164474,164475,164477],{"class":149,"line":312},[147,164476,30689],{"class":448},[147,164478,164479],{"class":157},"(nums)\n",[19,164481,164482],{},"创建空集合：",[138,164484,164486],{"className":30652,"code":164485,"language":30654,"meta":143,"style":143},"s = set()\n",[51,164487,164488],{"__ignoreMap":143},[147,164489,164490,164492,164494,164496],{"class":149,"line":150},[147,164491,10853],{"class":157},[147,164493,445],{"class":397},[147,164495,119992],{"class":448},[147,164497,2250],{"class":157},[19,164499,9299,164500,164502],{},[51,164501,32733],{}," 是空字典，不是空集合。",[19,164504,164505],{},"集合常用操作：",[138,164507,164509],{"className":30652,"code":164508,"language":30654,"meta":143,"style":143},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[51,164510,164511,164531,164535,164544,164553,164562],{"__ignoreMap":143},[147,164512,164513,164515,164517,164519,164521,164523,164525,164527,164529],{"class":149,"line":150},[147,164514,10853],{"class":157},[147,164516,445],{"class":397},[147,164518,4722],{"class":157},[147,164520,616],{"class":448},[147,164522,12709],{"class":157},[147,164524,477],{"class":448},[147,164526,12709],{"class":157},[147,164528,471],{"class":448},[147,164530,1839],{"class":157},[147,164532,164533],{"class":149,"line":312},[147,164534,2674],{"emptyLinePlaceholder":324},[147,164536,164537,164540,164542],{"class":149,"line":1454},[147,164538,164539],{"class":157},"s.add(",[147,164541,692],{"class":448},[147,164543,407],{"class":157},[147,164545,164546,164549,164551],{"class":149,"line":1469},[147,164547,164548],{"class":157},"s.remove(",[147,164550,477],{"class":448},[147,164552,407],{"class":157},[147,164554,164555,164558,164560],{"class":149,"line":1475},[147,164556,164557],{"class":157},"s.discard(",[147,164559,845],{"class":448},[147,164561,407],{"class":157},[147,164563,164564,164566,164568,164570],{"class":149,"line":1489},[147,164565,30689],{"class":448},[147,164567,401],{"class":157},[147,164569,7632],{"class":448},[147,164571,164572],{"class":157},"(s))\n",[19,164574,164575],{},"交并差：",[138,164577,164579],{"className":30652,"code":164578,"language":30654,"meta":143,"style":143},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[51,164580,164581,164601,164621,164625,164640,164653],{"__ignoreMap":143},[147,164582,164583,164585,164587,164589,164591,164593,164595,164597,164599],{"class":149,"line":150},[147,164584,11193],{"class":157},[147,164586,445],{"class":397},[147,164588,4722],{"class":157},[147,164590,616],{"class":448},[147,164592,12709],{"class":157},[147,164594,477],{"class":448},[147,164596,12709],{"class":157},[147,164598,471],{"class":448},[147,164600,1839],{"class":157},[147,164602,164603,164605,164607,164609,164611,164613,164615,164617,164619],{"class":149,"line":312},[147,164604,11219],{"class":157},[147,164606,445],{"class":397},[147,164608,4722],{"class":157},[147,164610,471],{"class":448},[147,164612,12709],{"class":157},[147,164614,692],{"class":448},[147,164616,12709],{"class":157},[147,164618,718],{"class":448},[147,164620,1839],{"class":157},[147,164622,164623],{"class":149,"line":1454},[147,164624,2674],{"emptyLinePlaceholder":324},[147,164626,164627,164629,164632,164634,164637],{"class":149,"line":1469},[147,164628,30689],{"class":448},[147,164630,164631],{"class":157},"(a ",[147,164633,752],{"class":397},[147,164635,164636],{"class":157}," b)  ",[147,164638,164639],{"class":458},"# 交集\n",[147,164641,164642,164644,164646,164648,164650],{"class":149,"line":1475},[147,164643,30689],{"class":448},[147,164645,164631],{"class":157},[147,164647,1320],{"class":397},[147,164649,164636],{"class":157},[147,164651,164652],{"class":458},"# 并集\n",[147,164654,164655,164657,164659,164661,164663],{"class":149,"line":1489},[147,164656,30689],{"class":448},[147,164658,164631],{"class":157},[147,164660,931],{"class":397},[147,164662,164636],{"class":157},[147,164664,164665],{"class":458},"# 差集\n",[14,164667,164669],{"id":164668},"_610-字典dict","6.10 字典dict",[19,164671,164672],{},"字典通过 key-value 保存数据。",[138,164674,164676],{"className":30652,"code":164675,"language":30654,"meta":143,"style":143},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[51,164677,164678,164686,164696,164707,164717],{"__ignoreMap":143},[147,164679,164680,164682,164684],{"class":149,"line":150},[147,164681,149644],{"class":157},[147,164683,445],{"class":397},[147,164685,15845],{"class":157},[147,164687,164688,164690,164692,164694],{"class":149,"line":312},[147,164689,147183],{"class":504},[147,164691,51710],{"class":157},[147,164693,150051],{"class":504},[147,164695,31740],{"class":157},[147,164697,164698,164701,164703,164705],{"class":149,"line":1454},[147,164699,164700],{"class":504},"    \"age\"",[147,164702,51710],{"class":157},[147,164704,1049],{"class":448},[147,164706,31740],{"class":157},[147,164708,164709,164712,164714],{"class":149,"line":1469},[147,164710,164711],{"class":504},"    \"score\"",[147,164713,51710],{"class":157},[147,164715,164716],{"class":448},"95\n",[147,164718,164719],{"class":149,"line":1475},[147,164720,1839],{"class":157},[19,164722,164723],{},"获取值：",[138,164725,164727],{"className":30652,"code":164726,"language":30654,"meta":143,"style":143},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[51,164728,164729,164740],{"__ignoreMap":143},[147,164730,164731,164733,164736,164738],{"class":149,"line":150},[147,164732,30689],{"class":448},[147,164734,164735],{"class":157},"(student[",[147,164737,62952],{"class":504},[147,164739,4931],{"class":157},[147,164741,164742,164744,164747,164749],{"class":149,"line":312},[147,164743,30689],{"class":448},[147,164745,164746],{"class":157},"(student.get(",[147,164748,62952],{"class":504},[147,164750,30771],{"class":157},[19,164752,15661],{},[138,164754,164756],{"className":30652,"code":164755,"language":30654,"meta":143,"style":143},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[51,164757,164758,164771],{"__ignoreMap":143},[147,164759,164760,164762,164765,164768],{"class":149,"line":150},[147,164761,153022],{"class":157},[147,164763,164764],{"class":504},"\"address\"",[147,164766,164767],{"class":157},"]     ",[147,164769,164770],{"class":458},"# key不存在会报错\n",[147,164772,164773,164776,164778,164780],{"class":149,"line":312},[147,164774,164775],{"class":157},"student.get(",[147,164777,164764],{"class":504},[147,164779,13988],{"class":157},[147,164781,164782],{"class":458},"# key不存在返回None\n",[19,164784,164785],{},"设置默认值：",[138,164787,164789],{"className":30652,"code":164788,"language":30654,"meta":143,"style":143},"print(student.get(\"address\", \"未知\"))\n",[51,164790,164791],{"__ignoreMap":143},[147,164792,164793,164795,164797,164799,164801,164804],{"class":149,"line":150},[147,164794,30689],{"class":448},[147,164796,164746],{"class":157},[147,164798,164764],{"class":504},[147,164800,12709],{"class":157},[147,164802,164803],{"class":504},"\"未知\"",[147,164805,30771],{"class":157},[19,164807,164808],{},"新增和修改：",[138,164810,164812],{"className":30652,"code":164811,"language":30654,"meta":143,"style":143},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[51,164813,164814,164827],{"__ignoreMap":143},[147,164815,164816,164818,164820,164822,164824],{"class":149,"line":150},[147,164817,153022],{"class":157},[147,164819,69397],{"class":504},[147,164821,4717],{"class":157},[147,164823,445],{"class":397},[147,164825,164826],{"class":448}," 19\n",[147,164828,164829,164831,164833,164835,164837],{"class":149,"line":312},[147,164830,153022],{"class":157},[147,164832,164764],{"class":504},[147,164834,4717],{"class":157},[147,164836,445],{"class":397},[147,164838,164839],{"class":504}," \"北京\"\n",[19,164841,164842],{},"删除：",[138,164844,164846],{"className":30652,"code":164845,"language":30654,"meta":143,"style":143},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[51,164847,164848,164861,164871],{"__ignoreMap":143},[147,164849,164850,164852,164854,164857,164859],{"class":149,"line":150},[147,164851,155521],{"class":157},[147,164853,445],{"class":397},[147,164855,164856],{"class":157}," student.pop(",[147,164858,151635],{"class":504},[147,164860,407],{"class":157},[147,164862,164863,164865,164867,164869],{"class":149,"line":312},[147,164864,163546],{"class":397},[147,164866,152312],{"class":157},[147,164868,69397],{"class":504},[147,164870,33520],{"class":157},[147,164872,164873],{"class":149,"line":1454},[147,164874,164875],{"class":157},"student.clear()\n",[14,164877,164879],{"id":164878},"_611-字典遍历","6.11 字典遍历",[19,164881,164882],{},"遍历 key：",[138,164884,164886],{"className":30652,"code":164885,"language":30654,"meta":143,"style":143},"for key in student:\n    print(key, student[key])\n",[51,164887,164888,164900],{"__ignoreMap":143},[147,164889,164890,164892,164895,164897],{"class":149,"line":150},[147,164891,3299],{"class":397},[147,164893,164894],{"class":157}," key ",[147,164896,26317],{"class":397},[147,164898,164899],{"class":157}," student:\n",[147,164901,164902,164904],{"class":149,"line":312},[147,164903,31573],{"class":448},[147,164905,164906],{"class":157},"(key, student[key])\n",[19,164908,164909],{},"遍历 value：",[138,164911,164913],{"className":30652,"code":164912,"language":30654,"meta":143,"style":143},"for value in student.values():\n    print(value)\n",[51,164914,164915,164927],{"__ignoreMap":143},[147,164916,164917,164919,164922,164924],{"class":149,"line":150},[147,164918,3299],{"class":397},[147,164920,164921],{"class":157}," value ",[147,164923,26317],{"class":397},[147,164925,164926],{"class":157}," student.values():\n",[147,164928,164929,164931],{"class":149,"line":312},[147,164930,31573],{"class":448},[147,164932,164933],{"class":157},"(value)\n",[19,164935,164936],{},"遍历 key 和 value：",[138,164938,164940],{"className":30652,"code":164939,"language":30654,"meta":143,"style":143},"for key, value in student.items():\n    print(key, value)\n",[51,164941,164942,164954],{"__ignoreMap":143},[147,164943,164944,164946,164949,164951],{"class":149,"line":150},[147,164945,3299],{"class":397},[147,164947,164948],{"class":157}," key, value ",[147,164950,26317],{"class":397},[147,164952,164953],{"class":157}," student.items():\n",[147,164955,164956,164958],{"class":149,"line":312},[147,164957,31573],{"class":448},[147,164959,164960],{"class":157},"(key, value)\n",[14,164962,164964],{"id":164963},"_612-嵌套容器","6.12 嵌套容器",[19,164966,164967],{},"列表中保存字典，是项目中最常见的结构之一。",[138,164969,164971],{"className":30652,"code":164970,"language":30654,"meta":143,"style":143},"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",[51,164972,164973,164981,165009,165037,165065,165069,165073,165083],{"__ignoreMap":143},[147,164974,164975,164977,164979],{"class":149,"line":150},[147,164976,159879],{"class":157},[147,164978,445],{"class":397},[147,164980,55720],{"class":157},[147,164982,164983,164985,164987,164989,164991,164993,164995,164997,164999,165001,165003,165005,165007],{"class":149,"line":312},[147,164984,148548],{"class":157},[147,164986,62952],{"class":504},[147,164988,51710],{"class":157},[147,164990,150051],{"class":504},[147,164992,12709],{"class":157},[147,164994,69397],{"class":504},[147,164996,51710],{"class":157},[147,164998,1049],{"class":448},[147,165000,12709],{"class":157},[147,165002,151635],{"class":504},[147,165004,51710],{"class":157},[147,165006,1388],{"class":448},[147,165008,5204],{"class":157},[147,165010,165011,165013,165015,165017,165019,165021,165023,165025,165027,165029,165031,165033,165035],{"class":149,"line":1454},[147,165012,148548],{"class":157},[147,165014,62952],{"class":504},[147,165016,51710],{"class":157},[147,165018,151099],{"class":504},[147,165020,12709],{"class":157},[147,165022,69397],{"class":504},[147,165024,51710],{"class":157},[147,165026,1024],{"class":448},[147,165028,12709],{"class":157},[147,165030,151635],{"class":504},[147,165032,51710],{"class":157},[147,165034,1210],{"class":448},[147,165036,5204],{"class":157},[147,165038,165039,165041,165043,165045,165047,165049,165051,165053,165055,165057,165059,165061,165063],{"class":149,"line":1469},[147,165040,148548],{"class":157},[147,165042,62952],{"class":504},[147,165044,51710],{"class":157},[147,165046,159894],{"class":504},[147,165048,12709],{"class":157},[147,165050,69397],{"class":504},[147,165052,51710],{"class":157},[147,165054,1074],{"class":448},[147,165056,12709],{"class":157},[147,165058,151635],{"class":504},[147,165060,51710],{"class":157},[147,165062,805],{"class":448},[147,165064,5204],{"class":157},[147,165066,165067],{"class":149,"line":1475},[147,165068,33520],{"class":157},[147,165070,165071],{"class":149,"line":1489},[147,165072,2674],{"emptyLinePlaceholder":324},[147,165074,165075,165077,165079,165081],{"class":149,"line":1495},[147,165076,3299],{"class":397},[147,165078,152300],{"class":157},[147,165080,26317],{"class":397},[147,165082,152305],{"class":157},[147,165084,165085,165087,165089,165091,165094,165096],{"class":149,"line":1586},[147,165086,31573],{"class":448},[147,165088,164735],{"class":157},[147,165090,62952],{"class":504},[147,165092,165093],{"class":157},"], student[",[147,165095,151635],{"class":504},[147,165097,4931],{"class":157},[19,165099,165100],{},"统计平均分：",[138,165102,165104],{"className":30652,"code":165103,"language":30654,"meta":143,"style":143},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[51,165105,165106,165114,165118,165128,165140,165144,165159],{"__ignoreMap":143},[147,165107,165108,165110,165112],{"class":149,"line":150},[147,165109,157423],{"class":157},[147,165111,445],{"class":397},[147,165113,47607],{"class":448},[147,165115,165116],{"class":149,"line":312},[147,165117,2674],{"emptyLinePlaceholder":324},[147,165119,165120,165122,165124,165126],{"class":149,"line":1454},[147,165121,3299],{"class":397},[147,165123,152300],{"class":157},[147,165125,26317],{"class":397},[147,165127,152305],{"class":157},[147,165129,165130,165132,165134,165136,165138],{"class":149,"line":1469},[147,165131,159470],{"class":157},[147,165133,9751],{"class":397},[147,165135,152312],{"class":157},[147,165137,151635],{"class":504},[147,165139,33520],{"class":157},[147,165141,165142],{"class":149,"line":1475},[147,165143,2674],{"emptyLinePlaceholder":324},[147,165145,165146,165148,165150,165152,165154,165156],{"class":149,"line":1489},[147,165147,163937],{"class":157},[147,165149,445],{"class":397},[147,165151,163942],{"class":157},[147,165153,983],{"class":397},[147,165155,7605],{"class":448},[147,165157,165158],{"class":157},"(students)\n",[147,165160,165161,165163,165165,165167,165169,165171,165173,165175,165177,165179],{"class":149,"line":1495},[147,165162,30689],{"class":448},[147,165164,401],{"class":157},[147,165166,452],{"class":397},[147,165168,163960],{"class":504},[147,165170,1295],{"class":448},[147,165172,163965],{"class":157},[147,165174,157322],{"class":397},[147,165176,1345],{"class":448},[147,165178,650],{"class":504},[147,165180,407],{"class":157},[19,165182,165183],{},"查找学生：",[138,165185,165187],{"className":30652,"code":165186,"language":30654,"meta":143,"style":143},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[51,165188,165189,165204,165208,165218,165232,165238,165242,165248],{"__ignoreMap":143},[147,165190,165191,165193,165195,165197,165199,165202],{"class":149,"line":150},[147,165192,111848],{"class":157},[147,165194,445],{"class":397},[147,165196,60878],{"class":448},[147,165198,401],{"class":157},[147,165200,165201],{"class":504},"\"请输入学生姓名:\"",[147,165203,407],{"class":157},[147,165205,165206],{"class":149,"line":312},[147,165207,2674],{"emptyLinePlaceholder":324},[147,165209,165210,165212,165214,165216],{"class":149,"line":1454},[147,165211,3299],{"class":397},[147,165213,152300],{"class":157},[147,165215,26317],{"class":397},[147,165217,152305],{"class":157},[147,165219,165220,165222,165224,165226,165228,165230],{"class":149,"line":1469},[147,165221,3375],{"class":397},[147,165223,152312],{"class":157},[147,165225,62952],{"class":504},[147,165227,4717],{"class":157},[147,165229,3223],{"class":397},[147,165231,160595],{"class":157},[147,165233,165234,165236],{"class":149,"line":1475},[147,165235,32725],{"class":448},[147,165237,150205],{"class":157},[147,165239,165240],{"class":149,"line":1489},[147,165241,31901],{"class":397},[147,165243,165244,165246],{"class":149,"line":1495},[147,165245,1975],{"class":397},[147,165247,4013],{"class":157},[147,165249,165250,165252,165254,165257],{"class":149,"line":1586},[147,165251,31573],{"class":448},[147,165253,401],{"class":157},[147,165255,165256],{"class":504},"\"没有找到\"",[147,165258,407],{"class":157},[14,165260,165262],{"id":165261},"_613-容器通用操作","6.13 容器通用操作",[19,165264,165265],{},"长度：",[138,165267,165269],{"className":30652,"code":165268,"language":30654,"meta":143,"style":143},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[51,165270,165271,165290,165300],{"__ignoreMap":143},[147,165272,165273,165275,165278,165280,165282,165284,165286,165288],{"class":149,"line":150},[147,165274,7632],{"class":448},[147,165276,165277],{"class":157},"([",[147,165279,616],{"class":448},[147,165281,12709],{"class":157},[147,165283,477],{"class":448},[147,165285,12709],{"class":157},[147,165287,471],{"class":448},[147,165289,4931],{"class":157},[147,165291,165292,165294,165296,165298],{"class":149,"line":312},[147,165293,7632],{"class":448},[147,165295,401],{"class":157},[147,165297,156043],{"class":504},[147,165299,407],{"class":157},[147,165301,165302,165304,165307,165309,165311,165313],{"class":149,"line":1454},[147,165303,7632],{"class":448},[147,165305,165306],{"class":157},"({",[147,165308,62952],{"class":504},[147,165310,51710],{"class":157},[147,165312,150051],{"class":504},[147,165314,165315],{"class":157},"})\n",[19,165317,165318],{},"最大最小：",[138,165320,165322],{"className":30652,"code":165321,"language":30654,"meta":143,"style":143},"max([1, 2, 3])\nmin([1, 2, 3])\n",[51,165323,165324,165342],{"__ignoreMap":143},[147,165325,165326,165328,165330,165332,165334,165336,165338,165340],{"class":149,"line":150},[147,165327,6289],{"class":448},[147,165329,165277],{"class":157},[147,165331,616],{"class":448},[147,165333,12709],{"class":157},[147,165335,477],{"class":448},[147,165337,12709],{"class":157},[147,165339,471],{"class":448},[147,165341,4931],{"class":157},[147,165343,165344,165347,165349,165351,165353,165355,165357,165359],{"class":149,"line":312},[147,165345,165346],{"class":448},"min",[147,165348,165277],{"class":157},[147,165350,616],{"class":448},[147,165352,12709],{"class":157},[147,165354,477],{"class":448},[147,165356,12709],{"class":157},[147,165358,471],{"class":448},[147,165360,4931],{"class":157},[19,165362,165363],{},"求和：",[138,165365,165367],{"className":30652,"code":165366,"language":30654,"meta":143,"style":143},"sum([1, 2, 3])\n",[51,165368,165369],{"__ignoreMap":143},[147,165370,165371,165374,165376,165378,165380,165382,165384,165386],{"class":149,"line":150},[147,165372,165373],{"class":448},"sum",[147,165375,165277],{"class":157},[147,165377,616],{"class":448},[147,165379,12709],{"class":157},[147,165381,477],{"class":448},[147,165383,12709],{"class":157},[147,165385,471],{"class":448},[147,165387,4931],{"class":157},[19,165389,163634],{},[138,165391,165393],{"className":30652,"code":165392,"language":30654,"meta":143,"style":143},"sorted([3, 1, 2])\n",[51,165394,165395],{"__ignoreMap":143},[147,165396,165397,165400,165402,165404,165406,165408,165410,165412],{"class":149,"line":150},[147,165398,165399],{"class":448},"sorted",[147,165401,165277],{"class":157},[147,165403,471],{"class":448},[147,165405,12709],{"class":157},[147,165407,616],{"class":448},[147,165409,12709],{"class":157},[147,165411,477],{"class":448},[147,165413,4931],{"class":157},[19,165415,165416],{},"类型转换：",[138,165418,165420],{"className":30652,"code":165419,"language":30654,"meta":143,"style":143},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[51,165421,165422,165432,165450],{"__ignoreMap":143},[147,165423,165424,165426,165428,165430],{"class":149,"line":150},[147,165425,154233],{"class":448},[147,165427,401],{"class":157},[147,165429,156043],{"class":504},[147,165431,407],{"class":157},[147,165433,165434,165436,165438,165440,165442,165444,165446,165448],{"class":149,"line":312},[147,165435,155428],{"class":448},[147,165437,165277],{"class":157},[147,165439,616],{"class":448},[147,165441,12709],{"class":157},[147,165443,477],{"class":448},[147,165445,12709],{"class":157},[147,165447,471],{"class":448},[147,165449,4931],{"class":157},[147,165451,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470],{"class":149,"line":1454},[147,165453,155453],{"class":448},[147,165455,165277],{"class":157},[147,165457,616],{"class":448},[147,165459,12709],{"class":157},[147,165461,616],{"class":448},[147,165463,12709],{"class":157},[147,165465,477],{"class":448},[147,165467,12709],{"class":157},[147,165469,471],{"class":448},[147,165471,4931],{"class":157},[19,165473,165474],{},"成员判断：",[138,165476,165478],{"className":30652,"code":165477,"language":30654,"meta":143,"style":143},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[51,165479,165480,165497,165521],{"__ignoreMap":143},[147,165481,165482,165484,165486,165489,165492,165495],{"class":149,"line":150},[147,165483,30689],{"class":448},[147,165485,401],{"class":157},[147,165487,165488],{"class":504},"\"a\"",[147,165490,165491],{"class":397}," in",[147,165493,165494],{"class":504}," \"abc\"",[147,165496,407],{"class":157},[147,165498,165499,165501,165503,165505,165507,165509,165511,165513,165515,165517,165519],{"class":149,"line":312},[147,165500,30689],{"class":448},[147,165502,401],{"class":157},[147,165504,616],{"class":448},[147,165506,165491],{"class":397},[147,165508,52499],{"class":157},[147,165510,616],{"class":448},[147,165512,12709],{"class":157},[147,165514,477],{"class":448},[147,165516,12709],{"class":157},[147,165518,471],{"class":448},[147,165520,4931],{"class":157},[147,165522,165523,165525,165527,165529,165531,165533,165535,165537,165539],{"class":149,"line":1454},[147,165524,30689],{"class":448},[147,165526,401],{"class":157},[147,165528,62952],{"class":504},[147,165530,165491],{"class":397},[147,165532,4722],{"class":157},[147,165534,62952],{"class":504},[147,165536,51710],{"class":157},[147,165538,150051],{"class":504},[147,165540,165315],{"class":157},[14,165542,165544],{"id":165543},"_614-推导式","6.14 推导式",[19,165546,165547],{},"推导式用于快速生成容器。",[19,165549,165550],{},"列表推导式：",[138,165552,165554],{"className":30652,"code":165553,"language":30654,"meta":143,"style":143},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[51,165555,165556,165583],{"__ignoreMap":143},[147,165557,165558,165560,165562,165565,165567,165569,165571,165573,165575,165577,165579,165581],{"class":149,"line":150},[147,165559,164263],{"class":157},[147,165561,445],{"class":397},[147,165563,165564],{"class":157}," [i ",[147,165566,3299],{"class":397},[147,165568,9712],{"class":157},[147,165570,26317],{"class":397},[147,165572,32717],{"class":448},[147,165574,401],{"class":157},[147,165576,616],{"class":448},[147,165578,12709],{"class":157},[147,165580,743],{"class":448},[147,165582,97572],{"class":157},[147,165584,165585,165587],{"class":149,"line":312},[147,165586,30689],{"class":448},[147,165588,164479],{"class":157},[19,165590,165591],{},"带条件：",[138,165593,165595],{"className":30652,"code":165594,"language":30654,"meta":143,"style":143},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[51,165596,165597,165638],{"__ignoreMap":143},[147,165598,165599,165602,165604,165606,165608,165610,165612,165614,165616,165618,165620,165622,165624,165626,165628,165630,165632,165634,165636],{"class":149,"line":150},[147,165600,165601],{"class":157},"even_nums ",[147,165603,445],{"class":397},[147,165605,165564],{"class":157},[147,165607,3299],{"class":397},[147,165609,9712],{"class":157},[147,165611,26317],{"class":397},[147,165613,32717],{"class":448},[147,165615,401],{"class":157},[147,165617,616],{"class":448},[147,165619,12709],{"class":157},[147,165621,736],{"class":448},[147,165623,13988],{"class":157},[147,165625,1805],{"class":397},[147,165627,9712],{"class":157},[147,165629,727],{"class":397},[147,165631,15028],{"class":448},[147,165633,101831],{"class":397},[147,165635,4367],{"class":448},[147,165637,33520],{"class":157},[147,165639,165640,165642],{"class":149,"line":312},[147,165641,30689],{"class":448},[147,165643,165644],{"class":157},"(even_nums)\n",[19,165646,165647],{},"字典推导式：",[138,165649,165651],{"className":30652,"code":165650,"language":30654,"meta":143,"style":143},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[51,165652,165653,165687],{"__ignoreMap":143},[147,165654,165655,165658,165660,165663,165665,165667,165670,165672,165674,165676,165678,165680,165682,165684],{"class":149,"line":150},[147,165656,165657],{"class":157},"squares ",[147,165659,445],{"class":397},[147,165661,165662],{"class":157}," {i: i ",[147,165664,10935],{"class":397},[147,165666,15028],{"class":448},[147,165668,165669],{"class":397}," for",[147,165671,9712],{"class":157},[147,165673,26317],{"class":397},[147,165675,32717],{"class":448},[147,165677,401],{"class":157},[147,165679,616],{"class":448},[147,165681,12709],{"class":157},[147,165683,743],{"class":448},[147,165685,165686],{"class":157},")}\n",[147,165688,165689,165691],{"class":149,"line":312},[147,165690,30689],{"class":448},[147,165692,165693],{"class":157},"(squares)\n",[19,165695,165696],{},"集合推导式：",[138,165698,165700],{"className":30652,"code":165699,"language":30654,"meta":143,"style":143},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[51,165701,165702,165723],{"__ignoreMap":143},[147,165703,165704,165707,165709,165712,165714,165716,165718,165721],{"class":149,"line":150},[147,165705,165706],{"class":157},"chars ",[147,165708,445],{"class":397},[147,165710,165711],{"class":157}," {ch ",[147,165713,3299],{"class":397},[147,165715,159855],{"class":157},[147,165717,26317],{"class":397},[147,165719,165720],{"class":504}," \"hello\"",[147,165722,1839],{"class":157},[147,165724,165725,165727],{"class":149,"line":312},[147,165726,30689],{"class":448},[147,165728,165729],{"class":157},"(chars)\n",[19,165731,165732],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,165734,165736],{"id":165735},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[138,165738,165740],{"className":30652,"code":165739,"language":30654,"meta":143,"style":143},"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",[51,165741,165742,165750,165770,165790,165810,165830,165834,165838,165846,165860,165869,165873,165883,165895,165899,165919,165928,165932,165948,165953,165957,165971,165975,165997,166033],{"__ignoreMap":143},[147,165743,165744,165746,165748],{"class":149,"line":150},[147,165745,159879],{"class":157},[147,165747,445],{"class":397},[147,165749,55720],{"class":157},[147,165751,165752,165754,165756,165758,165760,165762,165764,165766,165768],{"class":149,"line":312},[147,165753,148548],{"class":157},[147,165755,62952],{"class":504},[147,165757,51710],{"class":157},[147,165759,150051],{"class":504},[147,165761,12709],{"class":157},[147,165763,151635],{"class":504},[147,165765,51710],{"class":157},[147,165767,1388],{"class":448},[147,165769,5204],{"class":157},[147,165771,165772,165774,165776,165778,165780,165782,165784,165786,165788],{"class":149,"line":1454},[147,165773,148548],{"class":157},[147,165775,62952],{"class":504},[147,165777,51710],{"class":157},[147,165779,151099],{"class":504},[147,165781,12709],{"class":157},[147,165783,151635],{"class":504},[147,165785,51710],{"class":157},[147,165787,1210],{"class":448},[147,165789,5204],{"class":157},[147,165791,165792,165794,165796,165798,165800,165802,165804,165806,165808],{"class":149,"line":1469},[147,165793,148548],{"class":157},[147,165795,62952],{"class":504},[147,165797,51710],{"class":157},[147,165799,159894],{"class":504},[147,165801,12709],{"class":157},[147,165803,151635],{"class":504},[147,165805,51710],{"class":157},[147,165807,805],{"class":448},[147,165809,5204],{"class":157},[147,165811,165812,165814,165816,165818,165820,165822,165824,165826,165828],{"class":149,"line":1475},[147,165813,148548],{"class":157},[147,165815,62952],{"class":504},[147,165817,51710],{"class":157},[147,165819,163473],{"class":504},[147,165821,12709],{"class":157},[147,165823,151635],{"class":504},[147,165825,51710],{"class":157},[147,165827,1281],{"class":448},[147,165829,5204],{"class":157},[147,165831,165832],{"class":149,"line":1489},[147,165833,33520],{"class":157},[147,165835,165836],{"class":149,"line":1495},[147,165837,2674],{"emptyLinePlaceholder":324},[147,165839,165840,165842,165844],{"class":149,"line":1586},[147,165841,157423],{"class":157},[147,165843,445],{"class":397},[147,165845,47607],{"class":448},[147,165847,165848,165851,165853,165856,165858],{"class":149,"line":1592},[147,165849,165850],{"class":157},"max_student ",[147,165852,445],{"class":397},[147,165854,165855],{"class":157}," students[",[147,165857,590],{"class":448},[147,165859,33520],{"class":157},[147,165861,165862,165865,165867],{"class":149,"line":1604},[147,165863,165864],{"class":157},"passed ",[147,165866,445],{"class":397},[147,165868,52111],{"class":157},[147,165870,165871],{"class":149,"line":1886},[147,165872,2674],{"emptyLinePlaceholder":324},[147,165874,165875,165877,165879,165881],{"class":149,"line":1891},[147,165876,3299],{"class":397},[147,165878,152300],{"class":157},[147,165880,26317],{"class":397},[147,165882,152305],{"class":157},[147,165884,165885,165887,165889,165891,165893],{"class":149,"line":1897},[147,165886,159470],{"class":157},[147,165888,9751],{"class":397},[147,165890,152312],{"class":157},[147,165892,151635],{"class":504},[147,165894,33520],{"class":157},[147,165896,165897],{"class":149,"line":1902},[147,165898,2674],{"emptyLinePlaceholder":324},[147,165900,165901,165903,165905,165907,165909,165911,165914,165916],{"class":149,"line":1916},[147,165902,3375],{"class":397},[147,165904,152312],{"class":157},[147,165906,151635],{"class":504},[147,165908,4717],{"class":157},[147,165910,1359],{"class":397},[147,165912,165913],{"class":157}," max_student[",[147,165915,151635],{"class":504},[147,165917,165918],{"class":157},"]:\n",[147,165920,165921,165924,165926],{"class":149,"line":1921},[147,165922,165923],{"class":157},"        max_student ",[147,165925,445],{"class":397},[147,165927,152328],{"class":157},[147,165929,165930],{"class":149,"line":1927},[147,165931,2674],{"emptyLinePlaceholder":324},[147,165933,165934,165936,165938,165940,165942,165944,165946],{"class":149,"line":1948},[147,165935,3375],{"class":397},[147,165937,152312],{"class":157},[147,165939,151635],{"class":504},[147,165941,4717],{"class":157},[147,165943,1984],{"class":397},[147,165945,158000],{"class":448},[147,165947,4013],{"class":157},[147,165949,165950],{"class":149,"line":1953},[147,165951,165952],{"class":157},"        passed.append(student)\n",[147,165954,165955],{"class":149,"line":1967},[147,165956,2674],{"emptyLinePlaceholder":324},[147,165958,165959,165961,165963,165965,165967,165969],{"class":149,"line":1972},[147,165960,163937],{"class":157},[147,165962,445],{"class":397},[147,165964,163942],{"class":157},[147,165966,983],{"class":397},[147,165968,7605],{"class":448},[147,165970,165158],{"class":157},[147,165972,165973],{"class":149,"line":2001},[147,165974,2674],{"emptyLinePlaceholder":324},[147,165976,165977,165979,165981,165983,165985,165987,165989,165991,165993,165995],{"class":149,"line":2006},[147,165978,30689],{"class":448},[147,165980,401],{"class":157},[147,165982,452],{"class":397},[147,165984,163960],{"class":504},[147,165986,1295],{"class":448},[147,165988,163965],{"class":157},[147,165990,157322],{"class":397},[147,165992,1345],{"class":448},[147,165994,650],{"class":504},[147,165996,407],{"class":157},[147,165998,165999,166001,166003,166005,166008,166010,166013,166015,166017,166019,166021,166023,166025,166027,166029,166031],{"class":149,"line":2023},[147,166000,30689],{"class":448},[147,166002,401],{"class":157},[147,166004,452],{"class":397},[147,166006,166007],{"class":504},"\"最高分学生:",[147,166009,1295],{"class":448},[147,166011,166012],{"class":157},"max_student[",[147,166014,153045],{"class":504},[147,166016,1339],{"class":157},[147,166018,1345],{"class":448},[147,166020,4722],{"class":448},[147,166022,166012],{"class":157},[147,166024,153083],{"class":504},[147,166026,1339],{"class":157},[147,166028,1345],{"class":448},[147,166030,650],{"class":504},[147,166032,407],{"class":157},[147,166034,166035,166037,166039,166041,166044,166047,166050,166052,166054],{"class":149,"line":2028},[147,166036,30689],{"class":448},[147,166038,401],{"class":157},[147,166040,452],{"class":397},[147,166042,166043],{"class":504},"\"及格人数:",[147,166045,166046],{"class":448},"{len",[147,166048,166049],{"class":157},"(passed)",[147,166051,1345],{"class":448},[147,166053,650],{"class":504},[147,166055,407],{"class":157},[14,166057,166059],{"id":166058},"_616-易错点","6.16 易错点",[350,166061,166062,166065,166068,166071,166077,166086],{},[353,166063,166064],{},"列表可变，元组和字符串不可变。",[353,166066,166067],{},"切片结束位置不包含。",[353,166069,166070],{},"字典通过 key 取值，不是通过索引。",[353,166072,166073,166074,28659],{},"空集合要用 ",[51,166075,166076],{},"set()",[353,166078,104636,166079,166082,166083,28659],{},[51,166080,166081],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[51,166084,166085],{},"get()",[353,166087,166088],{},"嵌套容器要先看清楚每一层是什么类型。",[14,166090,166092],{"id":166091},"_617-本章练习","6.17 本章练习",[350,166094,166095,166098,166101,166104,166107],{},[353,166096,166097],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[353,166099,166100],{},"输入一句话，统计每个字符出现次数。",[353,166102,166103],{},"使用集合去除列表中的重复元素。",[353,166105,166106],{},"使用字典保存一个学生的信息，并实现修改成绩。",[353,166108,166109],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[308,166111,166112],{},"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":143,"searchDepth":312,"depth":312,"links":166114},[166115,166116,166117,166118,166119,166120,166121,166122,166123,166124,166125,166126,166127,166128,166129,166130,166131],{"id":163095,"depth":312,"text":163096},{"id":163212,"depth":312,"text":163213},{"id":163302,"depth":312,"text":163303},{"id":163426,"depth":312,"text":163427},{"id":163789,"depth":312,"text":163790},{"id":163976,"depth":312,"text":163977},{"id":164095,"depth":312,"text":164096},{"id":164237,"depth":312,"text":164238},{"id":164424,"depth":312,"text":164425},{"id":164668,"depth":312,"text":164669},{"id":164878,"depth":312,"text":164879},{"id":164963,"depth":312,"text":164964},{"id":165261,"depth":312,"text":165262},{"id":165543,"depth":312,"text":165544},{"id":165735,"depth":312,"text":165736},{"id":166058,"depth":312,"text":166059},{"id":166091,"depth":312,"text":166092},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":163087,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":166138,"title":166139,"body":166140,"description":321,"extension":322,"meta":168312,"navigation":324,"path":168313,"seo":168314,"stem":168315,"__hash__":168316},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":166141,"toc":168287},[166142,166145,166149,166152,166232,166235,166256,166259,166263,166266,166328,166331,166348,166352,166355,166400,166402,166410,166414,166417,166499,166502,166505,166530,166533,166556,166560,166563,166565,166627,166630,166632,166683,166687,166691,166697,166802,166806,166812,166883,166887,166890,166958,166961,167041,167045,167051,167087,167090,167093,167203,167209,167213,167216,167288,167291,167295,167299,167304,167366,167370,167375,167443,167447,167452,167568,167572,167575,167655,167658,167662,167665,167769,167771,167786,167789,167793,167931,167939,167943,167945,167956,167958,168216,168220,168252,168256,168284],[10,166143,166139],{"id":166144},"_7-函数进阶",[14,166146,166148],{"id":166147},"_71-多返回值","7.1 多返回值",[19,166150,166151],{},"Python 函数可以返回多个值，本质上返回的是元组。",[138,166153,166155],{"className":30652,"code":166154,"language":30654,"meta":143,"style":143},"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",[51,166156,166157,166166,166174,166182,166191,166198,166202,166206,166215,166221],{"__ignoreMap":143},[147,166158,166159,166161,166164],{"class":149,"line":150},[147,166160,32221],{"class":397},[147,166162,166163],{"class":2237}," get_info",[147,166165,32227],{"class":157},[147,166167,166168,166170,166172],{"class":149,"line":312},[147,166169,152533],{"class":157},[147,166171,445],{"class":397},[147,166173,149516],{"class":504},[147,166175,166176,166178,166180],{"class":149,"line":1454},[147,166177,152549],{"class":157},[147,166179,445],{"class":397},[147,166181,146714],{"class":448},[147,166183,166184,166186,166188],{"class":149,"line":1469},[147,166185,152564],{"class":157},[147,166187,445],{"class":397},[147,166189,166190],{"class":448}," 95\n",[147,166192,166193,166195],{"class":149,"line":1475},[147,166194,4364],{"class":397},[147,166196,166197],{"class":157}," name, age, score\n",[147,166199,166200],{"class":149,"line":1489},[147,166201,2674],{"emptyLinePlaceholder":324},[147,166203,166204],{"class":149,"line":1495},[147,166205,2674],{"emptyLinePlaceholder":324},[147,166207,166208,166210,166212],{"class":149,"line":1586},[147,166209,161469],{"class":157},[147,166211,445],{"class":397},[147,166213,166214],{"class":157}," get_info()\n",[147,166216,166217,166219],{"class":149,"line":1592},[147,166218,30689],{"class":448},[147,166220,76858],{"class":157},[147,166222,166223,166225,166227,166229],{"class":149,"line":1604},[147,166224,30689],{"class":448},[147,166226,401],{"class":157},[147,166228,103377],{"class":448},[147,166230,166231],{"class":157},"(result))\n",[19,166233,166234],{},"可以直接解包：",[138,166236,166238],{"className":30652,"code":166237,"language":30654,"meta":143,"style":143},"name, age, score = get_info()\nprint(name, age, score)\n",[51,166239,166240,166249],{"__ignoreMap":143},[147,166241,166242,166245,166247],{"class":149,"line":150},[147,166243,166244],{"class":157},"name, age, score ",[147,166246,445],{"class":397},[147,166248,166214],{"class":157},[147,166250,166251,166253],{"class":149,"line":312},[147,166252,30689],{"class":448},[147,166254,166255],{"class":157},"(name, age, score)\n",[19,166257,166258],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,166260,166262],{"id":166261},"_72-位置参数","7.2 位置参数",[19,166264,166265],{},"位置参数按顺序传递。",[138,166267,166269],{"className":30652,"code":166268,"language":30654,"meta":143,"style":143},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[51,166270,166271,166279,166307,166311,166315],{"__ignoreMap":143},[147,166272,166273,166275,166277],{"class":149,"line":150},[147,166274,32221],{"class":397},[147,166276,149535],{"class":2237},[147,166278,149538],{"class":157},[147,166280,166281,166283,166285,166287,166289,166291,166293,166295,166297,166299,166301,166303,166305],{"class":149,"line":312},[147,166282,31573],{"class":448},[147,166284,401],{"class":157},[147,166286,452],{"class":397},[147,166288,149549],{"class":504},[147,166290,1295],{"class":448},[147,166292,80082],{"class":157},[147,166294,1345],{"class":448},[147,166296,149558],{"class":504},[147,166298,1295],{"class":448},[147,166300,70494],{"class":157},[147,166302,1345],{"class":448},[147,166304,149567],{"class":504},[147,166306,407],{"class":157},[147,166308,166309],{"class":149,"line":1454},[147,166310,2674],{"emptyLinePlaceholder":324},[147,166312,166313],{"class":149,"line":1469},[147,166314,2674],{"emptyLinePlaceholder":324},[147,166316,166317,166320,166322,166324,166326],{"class":149,"line":1475},[147,166318,166319],{"class":157},"introduce(",[147,166321,150051],{"class":504},[147,166323,12709],{"class":157},[147,166325,1049],{"class":448},[147,166327,407],{"class":157},[19,166329,166330],{},"顺序错了就会得到错误含义：",[138,166332,166334],{"className":30652,"code":166333,"language":30654,"meta":143,"style":143},"introduce(18, \"小明\")\n",[51,166335,166336],{"__ignoreMap":143},[147,166337,166338,166340,166342,166344,166346],{"class":149,"line":150},[147,166339,166319],{"class":157},[147,166341,1049],{"class":448},[147,166343,12709],{"class":157},[147,166345,150051],{"class":504},[147,166347,407],{"class":157},[14,166349,166351],{"id":166350},"_73-关键字参数","7.3 关键字参数",[19,166353,166354],{},"关键字参数按参数名传递。",[138,166356,166358],{"className":30652,"code":166357,"language":30654,"meta":143,"style":143},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[51,166359,166360,166380],{"__ignoreMap":143},[147,166361,166362,166364,166366,166368,166370,166372,166374,166376,166378],{"class":149,"line":150},[147,166363,166319],{"class":157},[147,166365,80082],{"class":5490},[147,166367,445],{"class":397},[147,166369,150051],{"class":504},[147,166371,12709],{"class":157},[147,166373,70494],{"class":5490},[147,166375,445],{"class":397},[147,166377,1049],{"class":448},[147,166379,407],{"class":157},[147,166381,166382,166384,166386,166388,166390,166392,166394,166396,166398],{"class":149,"line":312},[147,166383,166319],{"class":157},[147,166385,70494],{"class":5490},[147,166387,445],{"class":397},[147,166389,1049],{"class":448},[147,166391,12709],{"class":157},[147,166393,80082],{"class":5490},[147,166395,445],{"class":397},[147,166397,150051],{"class":504},[147,166399,407],{"class":157},[19,166401,118204],{},[350,166403,166404,166407],{},[353,166405,166406],{},"顺序不容易错。",[353,166408,166409],{},"调用时可读性更强。",[14,166411,166413],{"id":166412},"_74-默认参数","7.4 默认参数",[19,166415,166416],{},"默认参数给参数设置默认值。",[138,166418,166420],{"className":30652,"code":166419,"language":30654,"meta":143,"style":143},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[51,166421,166422,166438,166468,166472,166476,166486],{"__ignoreMap":143},[147,166423,166424,166426,166428,166431,166433,166436],{"class":149,"line":150},[147,166425,32221],{"class":397},[147,166427,122363],{"class":2237},[147,166429,166430],{"class":157},"(host, port",[147,166432,445],{"class":397},[147,166434,166435],{"class":448},"3306",[147,166437,31060],{"class":157},[147,166439,166440,166442,166444,166446,166449,166451,166453,166455,166457,166459,166462,166464,166466],{"class":149,"line":312},[147,166441,31573],{"class":448},[147,166443,401],{"class":157},[147,166445,452],{"class":397},[147,166447,166448],{"class":504},"\"连接",[147,166450,1295],{"class":448},[147,166452,27669],{"class":157},[147,166454,1345],{"class":448},[147,166456,1258],{"class":504},[147,166458,1295],{"class":448},[147,166460,166461],{"class":157},"port",[147,166463,1345],{"class":448},[147,166465,650],{"class":504},[147,166467,407],{"class":157},[147,166469,166470],{"class":149,"line":1454},[147,166471,2674],{"emptyLinePlaceholder":324},[147,166473,166474],{"class":149,"line":1469},[147,166475,2674],{"emptyLinePlaceholder":324},[147,166477,166478,166481,166484],{"class":149,"line":1475},[147,166479,166480],{"class":157},"connect(",[147,166482,166483],{"class":504},"\"localhost\"",[147,166485,407],{"class":157},[147,166487,166488,166490,166492,166494,166497],{"class":149,"line":1489},[147,166489,166480],{"class":157},[147,166491,166483],{"class":504},[147,166493,12709],{"class":157},[147,166495,166496],{"class":448},"6379",[147,166498,407],{"class":157},[19,166500,166501],{},"注意：默认参数必须放在非默认参数后面。",[19,166503,166504],{},"错误：",[138,166506,166508],{"className":30652,"code":166507,"language":30654,"meta":143,"style":143},"def connect(port=3306, host):\n    pass\n",[51,166509,166510,166526],{"__ignoreMap":143},[147,166511,166512,166514,166516,166519,166521,166523],{"class":149,"line":150},[147,166513,32221],{"class":397},[147,166515,122363],{"class":2237},[147,166517,166518],{"class":157},"(port",[147,166520,445],{"class":397},[147,166522,166435],{"class":448},[147,166524,166525],{"class":157},", host):\n",[147,166527,166528],{"class":149,"line":312},[147,166529,149700],{"class":397},[19,166531,166532],{},"正确：",[138,166534,166536],{"className":30652,"code":166535,"language":30654,"meta":143,"style":143},"def connect(host, port=3306):\n    pass\n",[51,166537,166538,166552],{"__ignoreMap":143},[147,166539,166540,166542,166544,166546,166548,166550],{"class":149,"line":150},[147,166541,32221],{"class":397},[147,166543,122363],{"class":2237},[147,166545,166430],{"class":157},[147,166547,445],{"class":397},[147,166549,166435],{"class":448},[147,166551,31060],{"class":157},[147,166553,166554],{"class":149,"line":312},[147,166555,149700],{"class":397},[14,166557,166559],{"id":166558},"_75-默认参数的坑","7.5 默认参数的坑",[19,166561,166562],{},"不要使用可变对象作为默认参数。",[19,166564,157786],{},[138,166566,166568],{"className":30652,"code":166567,"language":30654,"meta":143,"style":143},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[51,166569,166570,166585,166590,166597,166601,166605,166616],{"__ignoreMap":143},[147,166571,166572,166574,166577,166580,166582],{"class":149,"line":150},[147,166573,32221],{"class":397},[147,166575,166576],{"class":2237}," add_item",[147,166578,166579],{"class":157},"(item, items",[147,166581,445],{"class":397},[147,166583,166584],{"class":157},"[]):\n",[147,166586,166587],{"class":149,"line":312},[147,166588,166589],{"class":157},"    items.append(item)\n",[147,166591,166592,166594],{"class":149,"line":1454},[147,166593,4364],{"class":397},[147,166595,166596],{"class":157}," items\n",[147,166598,166599],{"class":149,"line":1469},[147,166600,2674],{"emptyLinePlaceholder":324},[147,166602,166603],{"class":149,"line":1475},[147,166604,2674],{"emptyLinePlaceholder":324},[147,166606,166607,166609,166612,166614],{"class":149,"line":1489},[147,166608,30689],{"class":448},[147,166610,166611],{"class":157},"(add_item(",[147,166613,165488],{"class":504},[147,166615,30771],{"class":157},[147,166617,166618,166620,166622,166625],{"class":149,"line":1495},[147,166619,30689],{"class":448},[147,166621,166611],{"class":157},[147,166623,166624],{"class":504},"\"b\"",[147,166626,30771],{"class":157},[19,166628,166629],{},"第二次调用会复用第一次的列表。",[19,166631,156051],{},[138,166633,166635],{"className":30652,"code":166634,"language":30654,"meta":143,"style":143},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[51,166636,166637,166651,166664,166673,166677],{"__ignoreMap":143},[147,166638,166639,166641,166643,166645,166647,166649],{"class":149,"line":150},[147,166640,32221],{"class":397},[147,166642,166576],{"class":2237},[147,166644,166579],{"class":157},[147,166646,445],{"class":397},[147,166648,95958],{"class":448},[147,166650,31060],{"class":157},[147,166652,166653,166655,166658,166660,166662],{"class":149,"line":312},[147,166654,3375],{"class":397},[147,166656,166657],{"class":157}," items ",[147,166659,39201],{"class":397},[147,166661,39207],{"class":448},[147,166663,4013],{"class":157},[147,166665,166666,166669,166671],{"class":149,"line":1454},[147,166667,166668],{"class":157},"        items ",[147,166670,445],{"class":397},[147,166672,52111],{"class":157},[147,166674,166675],{"class":149,"line":1469},[147,166676,166589],{"class":157},[147,166678,166679,166681],{"class":149,"line":1475},[147,166680,4364],{"class":397},[147,166682,166596],{"class":157},[14,166684,166686],{"id":166685},"_76-不定长参数","7.6 不定长参数",[367,166688,166690],{"id":166689},"_761-args","7.6.1 *args",[19,166692,166693,166696],{},[51,166694,166695],{},"*args"," 接收任意数量的位置参数，得到元组。",[138,166698,166700],{"className":30652,"code":166699,"language":30654,"meta":143,"style":143},"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",[51,166701,166702,166715,166723,166734,166743,166749,166753,166757,166776],{"__ignoreMap":143},[147,166703,166704,166706,166708,166710,166712],{"class":149,"line":150},[147,166705,32221],{"class":397},[147,166707,5483],{"class":2237},[147,166709,401],{"class":157},[147,166711,854],{"class":397},[147,166713,166714],{"class":157},"args):\n",[147,166716,166717,166719,166721],{"class":149,"line":312},[147,166718,159470],{"class":157},[147,166720,445],{"class":397},[147,166722,47607],{"class":448},[147,166724,166725,166727,166729,166731],{"class":149,"line":1454},[147,166726,3475],{"class":397},[147,166728,156343],{"class":157},[147,166730,26317],{"class":397},[147,166732,166733],{"class":157}," args:\n",[147,166735,166736,166738,166740],{"class":149,"line":1469},[147,166737,160145],{"class":157},[147,166739,9751],{"class":397},[147,166741,166742],{"class":157}," num\n",[147,166744,166745,166747],{"class":149,"line":1475},[147,166746,4364],{"class":397},[147,166748,162450],{"class":157},[147,166750,166751],{"class":149,"line":1489},[147,166752,2674],{"emptyLinePlaceholder":324},[147,166754,166755],{"class":149,"line":1495},[147,166756,2674],{"emptyLinePlaceholder":324},[147,166758,166759,166761,166764,166766,166768,166770,166772,166774],{"class":149,"line":1586},[147,166760,30689],{"class":448},[147,166762,166763],{"class":157},"(add(",[147,166765,616],{"class":448},[147,166767,12709],{"class":157},[147,166769,477],{"class":448},[147,166771,12709],{"class":157},[147,166773,471],{"class":448},[147,166775,30771],{"class":157},[147,166777,166778,166780,166782,166784,166786,166788,166790,166792,166794,166796,166798,166800],{"class":149,"line":1592},[147,166779,30689],{"class":448},[147,166781,166763],{"class":157},[147,166783,616],{"class":448},[147,166785,12709],{"class":157},[147,166787,477],{"class":448},[147,166789,12709],{"class":157},[147,166791,471],{"class":448},[147,166793,12709],{"class":157},[147,166795,692],{"class":448},[147,166797,12709],{"class":157},[147,166799,718],{"class":448},[147,166801,30771],{"class":157},[367,166803,166805],{"id":166804},"_762-kwargs","7.6.2 **kwargs",[19,166807,166808,166811],{},[51,166809,166810],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[138,166813,166815],{"className":30652,"code":166814,"language":30654,"meta":143,"style":143},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[51,166816,166817,166830,166841,166847,166851,166855],{"__ignoreMap":143},[147,166818,166819,166821,166823,166825,166827],{"class":149,"line":150},[147,166820,32221],{"class":397},[147,166822,162108],{"class":2237},[147,166824,401],{"class":157},[147,166826,10935],{"class":397},[147,166828,166829],{"class":157},"kwargs):\n",[147,166831,166832,166834,166836,166838],{"class":149,"line":312},[147,166833,3475],{"class":397},[147,166835,164948],{"class":157},[147,166837,26317],{"class":397},[147,166839,166840],{"class":157}," kwargs.items():\n",[147,166842,166843,166845],{"class":149,"line":1454},[147,166844,32725],{"class":448},[147,166846,164960],{"class":157},[147,166848,166849],{"class":149,"line":1469},[147,166850,2674],{"emptyLinePlaceholder":324},[147,166852,166853],{"class":149,"line":1475},[147,166854,2674],{"emptyLinePlaceholder":324},[147,166856,166857,166859,166861,166863,166865,166867,166869,166871,166873,166875,166877,166879,166881],{"class":149,"line":1489},[147,166858,162173],{"class":157},[147,166860,80082],{"class":5490},[147,166862,445],{"class":397},[147,166864,150051],{"class":504},[147,166866,12709],{"class":157},[147,166868,70494],{"class":5490},[147,166870,445],{"class":397},[147,166872,1049],{"class":448},[147,166874,12709],{"class":157},[147,166876,70545],{"class":5490},[147,166878,445],{"class":397},[147,166880,69542],{"class":504},[147,166882,407],{"class":157},[14,166884,166886],{"id":166885},"_77-参数解包","7.7 参数解包",[19,166888,166889],{},"列表或元组解包为位置参数：",[138,166891,166893],{"className":30652,"code":166892,"language":30654,"meta":143,"style":143},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[51,166894,166895,166904,166919,166923,166927,166947],{"__ignoreMap":143},[147,166896,166897,166899,166901],{"class":149,"line":150},[147,166898,32221],{"class":397},[147,166900,5483],{"class":2237},[147,166902,166903],{"class":157},"(a, b, c):\n",[147,166905,166906,166908,166910,166912,166914,166916],{"class":149,"line":312},[147,166907,4364],{"class":397},[147,166909,11143],{"class":157},[147,166911,880],{"class":397},[147,166913,11156],{"class":157},[147,166915,880],{"class":397},[147,166917,166918],{"class":157}," c\n",[147,166920,166921],{"class":149,"line":1454},[147,166922,2674],{"emptyLinePlaceholder":324},[147,166924,166925],{"class":149,"line":1469},[147,166926,2674],{"emptyLinePlaceholder":324},[147,166928,166929,166931,166933,166935,166937,166939,166941,166943,166945],{"class":149,"line":1475},[147,166930,164263],{"class":157},[147,166932,445],{"class":397},[147,166934,52499],{"class":157},[147,166936,616],{"class":448},[147,166938,12709],{"class":157},[147,166940,477],{"class":448},[147,166942,12709],{"class":157},[147,166944,471],{"class":448},[147,166946,33520],{"class":157},[147,166948,166949,166951,166953,166955],{"class":149,"line":1489},[147,166950,30689],{"class":448},[147,166952,166763],{"class":157},[147,166954,854],{"class":397},[147,166956,166957],{"class":157},"nums))\n",[19,166959,166960],{},"字典解包为关键字参数：",[138,166962,166964],{"className":30652,"code":166963,"language":30654,"meta":143,"style":143},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[51,166965,166966,166974,167000,167004,167008,167032],{"__ignoreMap":143},[147,166967,166968,166970,166972],{"class":149,"line":150},[147,166969,32221],{"class":397},[147,166971,149535],{"class":2237},[147,166973,149538],{"class":157},[147,166975,166976,166978,166980,166982,166984,166986,166988,166990,166992,166994,166996,166998],{"class":149,"line":312},[147,166977,31573],{"class":448},[147,166979,401],{"class":157},[147,166981,452],{"class":397},[147,166983,650],{"class":504},[147,166985,1295],{"class":448},[147,166987,80082],{"class":157},[147,166989,1345],{"class":448},[147,166991,4722],{"class":448},[147,166993,70494],{"class":157},[147,166995,1345],{"class":448},[147,166997,650],{"class":504},[147,166999,407],{"class":157},[147,167001,167002],{"class":149,"line":1454},[147,167003,2674],{"emptyLinePlaceholder":324},[147,167005,167006],{"class":149,"line":1469},[147,167007,2674],{"emptyLinePlaceholder":324},[147,167009,167010,167012,167014,167016,167018,167020,167022,167024,167026,167028,167030],{"class":149,"line":1475},[147,167011,116584],{"class":157},[147,167013,445],{"class":397},[147,167015,4722],{"class":157},[147,167017,62952],{"class":504},[147,167019,51710],{"class":157},[147,167021,150051],{"class":504},[147,167023,12709],{"class":157},[147,167025,69397],{"class":504},[147,167027,51710],{"class":157},[147,167029,1049],{"class":448},[147,167031,1839],{"class":157},[147,167033,167034,167036,167038],{"class":149,"line":1489},[147,167035,166319],{"class":157},[147,167037,10935],{"class":397},[147,167039,167040],{"class":157},"info)\n",[14,167042,167044],{"id":167043},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,167046,167047,167050],{},[51,167048,167049],{},"lambda"," 用于定义简单匿名函数。",[138,167052,167054],{"className":30652,"code":167053,"language":30654,"meta":143,"style":143},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[51,167055,167056,167073],{"__ignoreMap":143},[147,167057,167058,167061,167063,167066,167069,167071],{"class":149,"line":150},[147,167059,167060],{"class":157},"add ",[147,167062,445],{"class":397},[147,167064,167065],{"class":397}," lambda",[147,167067,167068],{"class":157}," a, b: a ",[147,167070,880],{"class":397},[147,167072,151267],{"class":157},[147,167074,167075,167077,167079,167081,167083,167085],{"class":149,"line":312},[147,167076,30689],{"class":448},[147,167078,166763],{"class":157},[147,167080,616],{"class":448},[147,167082,12709],{"class":157},[147,167084,477],{"class":448},[147,167086,30771],{"class":157},[19,167088,167089],{},"常和排序、过滤等函数一起使用。",[19,167091,167092],{},"按分数排序：",[138,167094,167096],{"className":30652,"code":167095,"language":30654,"meta":143,"style":143},"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",[51,167097,167098,167106,167126,167146,167166,167170,167174,167197],{"__ignoreMap":143},[147,167099,167100,167102,167104],{"class":149,"line":150},[147,167101,159879],{"class":157},[147,167103,445],{"class":397},[147,167105,55720],{"class":157},[147,167107,167108,167110,167112,167114,167116,167118,167120,167122,167124],{"class":149,"line":312},[147,167109,148548],{"class":157},[147,167111,62952],{"class":504},[147,167113,51710],{"class":157},[147,167115,150051],{"class":504},[147,167117,12709],{"class":157},[147,167119,151635],{"class":504},[147,167121,51710],{"class":157},[147,167123,1388],{"class":448},[147,167125,5204],{"class":157},[147,167127,167128,167130,167132,167134,167136,167138,167140,167142,167144],{"class":149,"line":1454},[147,167129,148548],{"class":157},[147,167131,62952],{"class":504},[147,167133,51710],{"class":157},[147,167135,151099],{"class":504},[147,167137,12709],{"class":157},[147,167139,151635],{"class":504},[147,167141,51710],{"class":157},[147,167143,1210],{"class":448},[147,167145,5204],{"class":157},[147,167147,167148,167150,167152,167154,167156,167158,167160,167162,167164],{"class":149,"line":1469},[147,167149,148548],{"class":157},[147,167151,62952],{"class":504},[147,167153,51710],{"class":157},[147,167155,159894],{"class":504},[147,167157,12709],{"class":157},[147,167159,151635],{"class":504},[147,167161,51710],{"class":157},[147,167163,805],{"class":448},[147,167165,5204],{"class":157},[147,167167,167168],{"class":149,"line":1475},[147,167169,33520],{"class":157},[147,167171,167172],{"class":149,"line":1489},[147,167173,2674],{"emptyLinePlaceholder":324},[147,167175,167176,167179,167181,167183,167185,167187,167189,167191,167193,167195],{"class":149,"line":1495},[147,167177,167178],{"class":157},"students.sort(",[147,167180,154109],{"class":5490},[147,167182,154112],{"class":397},[147,167184,154115],{"class":157},[147,167186,151635],{"class":504},[147,167188,112472],{"class":157},[147,167190,163691],{"class":5490},[147,167192,445],{"class":397},[147,167194,31750],{"class":448},[147,167196,407],{"class":157},[147,167198,167199,167201],{"class":149,"line":1586},[147,167200,30689],{"class":448},[147,167202,165158],{"class":157},[19,167204,167205,167206,167208],{},"如果逻辑复杂，不要硬写 ",[51,167207,167049],{},"，定义普通函数更清晰。",[14,167210,167212],{"id":167211},"_79-函数作为参数","7.9 函数作为参数",[19,167214,167215],{},"函数可以作为参数传给另一个函数。",[138,167217,167219],{"className":30652,"code":167218,"language":30654,"meta":143,"style":143},"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",[51,167220,167221,167229,167239,167243,167247,167257,167264,167268,167272],{"__ignoreMap":143},[147,167222,167223,167225,167227],{"class":149,"line":150},[147,167224,32221],{"class":397},[147,167226,5483],{"class":2237},[147,167228,151256],{"class":157},[147,167230,167231,167233,167235,167237],{"class":149,"line":312},[147,167232,4364],{"class":397},[147,167234,11143],{"class":157},[147,167236,880],{"class":397},[147,167238,151267],{"class":157},[147,167240,167241],{"class":149,"line":1454},[147,167242,2674],{"emptyLinePlaceholder":324},[147,167244,167245],{"class":149,"line":1469},[147,167246,2674],{"emptyLinePlaceholder":324},[147,167248,167249,167251,167254],{"class":149,"line":1475},[147,167250,32221],{"class":397},[147,167252,167253],{"class":2237}," calculate",[147,167255,167256],{"class":157},"(a, b, func):\n",[147,167258,167259,167261],{"class":149,"line":1489},[147,167260,4364],{"class":397},[147,167262,167263],{"class":157}," func(a, b)\n",[147,167265,167266],{"class":149,"line":1495},[147,167267,2674],{"emptyLinePlaceholder":324},[147,167269,167270],{"class":149,"line":1586},[147,167271,2674],{"emptyLinePlaceholder":324},[147,167273,167274,167276,167279,167281,167283,167285],{"class":149,"line":1592},[147,167275,30689],{"class":448},[147,167277,167278],{"class":157},"(calculate(",[147,167280,845],{"class":448},[147,167282,12709],{"class":157},[147,167284,1099],{"class":448},[147,167286,167287],{"class":157},", add))\n",[19,167289,167290],{},"这种思想在排序、回调、框架中经常出现。",[14,167292,167294],{"id":167293},"_710-mapfiltersorted","7.10 map、filter、sorted",[367,167296,167298],{"id":167297},"_7101-map","7.10.1 map",[19,167300,167301,167303],{},[51,167302,74317],{}," 对每个元素执行函数。",[138,167305,167307],{"className":30652,"code":167306,"language":30654,"meta":143,"style":143},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[51,167308,167309,167333,167356],{"__ignoreMap":143},[147,167310,167311,167313,167315,167317,167319,167321,167323,167325,167327,167329,167331],{"class":149,"line":150},[147,167312,164263],{"class":157},[147,167314,445],{"class":397},[147,167316,52499],{"class":157},[147,167318,616],{"class":448},[147,167320,12709],{"class":157},[147,167322,477],{"class":448},[147,167324,12709],{"class":157},[147,167326,471],{"class":448},[147,167328,12709],{"class":157},[147,167330,692],{"class":448},[147,167332,33520],{"class":157},[147,167334,167335,167337,167339,167342,167344,167346,167349,167351,167353],{"class":149,"line":312},[147,167336,161469],{"class":157},[147,167338,445],{"class":397},[147,167340,167341],{"class":448}," map",[147,167343,401],{"class":157},[147,167345,167049],{"class":397},[147,167347,167348],{"class":157}," x: x ",[147,167350,854],{"class":397},[147,167352,15028],{"class":448},[147,167354,167355],{"class":157},", nums)\n",[147,167357,167358,167360,167362,167364],{"class":149,"line":1454},[147,167359,30689],{"class":448},[147,167361,401],{"class":157},[147,167363,154233],{"class":448},[147,167365,166231],{"class":157},[367,167367,167369],{"id":167368},"_7102-filter","7.10.2 filter",[19,167371,167372,167374],{},[51,167373,80323],{}," 保留满足条件的元素。",[138,167376,167378],{"className":30652,"code":167377,"language":30654,"meta":143,"style":143},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[51,167379,167380,167408,167433],{"__ignoreMap":143},[147,167381,167382,167384,167386,167388,167390,167392,167394,167396,167398,167400,167402,167404,167406],{"class":149,"line":150},[147,167383,164263],{"class":157},[147,167385,445],{"class":397},[147,167387,52499],{"class":157},[147,167389,616],{"class":448},[147,167391,12709],{"class":157},[147,167393,477],{"class":448},[147,167395,12709],{"class":157},[147,167397,471],{"class":448},[147,167399,12709],{"class":157},[147,167401,692],{"class":448},[147,167403,12709],{"class":157},[147,167405,718],{"class":448},[147,167407,33520],{"class":157},[147,167409,167410,167412,167414,167417,167419,167421,167423,167425,167427,167429,167431],{"class":149,"line":312},[147,167411,161469],{"class":157},[147,167413,445],{"class":397},[147,167415,167416],{"class":448}," filter",[147,167418,401],{"class":157},[147,167420,167049],{"class":397},[147,167422,167348],{"class":157},[147,167424,727],{"class":397},[147,167426,15028],{"class":448},[147,167428,101831],{"class":397},[147,167430,4367],{"class":448},[147,167432,167355],{"class":157},[147,167434,167435,167437,167439,167441],{"class":149,"line":1454},[147,167436,30689],{"class":448},[147,167438,401],{"class":157},[147,167440,154233],{"class":448},[147,167442,166231],{"class":157},[367,167444,167446],{"id":167445},"_7103-sorted","7.10.3 sorted",[19,167448,167449,167451],{},[51,167450,165399],{}," 返回排序后的新列表。",[138,167453,167455],{"className":30652,"code":167454,"language":30654,"meta":143,"style":143},"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",[51,167456,167457,167465,167485,167505,167525,167529,167533,167562],{"__ignoreMap":143},[147,167458,167459,167461,167463],{"class":149,"line":150},[147,167460,159879],{"class":157},[147,167462,445],{"class":397},[147,167464,55720],{"class":157},[147,167466,167467,167469,167471,167473,167475,167477,167479,167481,167483],{"class":149,"line":312},[147,167468,148548],{"class":157},[147,167470,62952],{"class":504},[147,167472,51710],{"class":157},[147,167474,150051],{"class":504},[147,167476,12709],{"class":157},[147,167478,151635],{"class":504},[147,167480,51710],{"class":157},[147,167482,1388],{"class":448},[147,167484,5204],{"class":157},[147,167486,167487,167489,167491,167493,167495,167497,167499,167501,167503],{"class":149,"line":1454},[147,167488,148548],{"class":157},[147,167490,62952],{"class":504},[147,167492,51710],{"class":157},[147,167494,151099],{"class":504},[147,167496,12709],{"class":157},[147,167498,151635],{"class":504},[147,167500,51710],{"class":157},[147,167502,1210],{"class":448},[147,167504,5204],{"class":157},[147,167506,167507,167509,167511,167513,167515,167517,167519,167521,167523],{"class":149,"line":1469},[147,167508,148548],{"class":157},[147,167510,62952],{"class":504},[147,167512,51710],{"class":157},[147,167514,159894],{"class":504},[147,167516,12709],{"class":157},[147,167518,151635],{"class":504},[147,167520,51710],{"class":157},[147,167522,805],{"class":448},[147,167524,5204],{"class":157},[147,167526,167527],{"class":149,"line":1475},[147,167528,33520],{"class":157},[147,167530,167531],{"class":149,"line":1489},[147,167532,2674],{"emptyLinePlaceholder":324},[147,167534,167535,167537,167539,167541,167544,167546,167548,167550,167552,167554,167556,167558,167560],{"class":149,"line":1495},[147,167536,161469],{"class":157},[147,167538,445],{"class":397},[147,167540,163767],{"class":448},[147,167542,167543],{"class":157},"(students, ",[147,167545,154109],{"class":5490},[147,167547,154112],{"class":397},[147,167549,154115],{"class":157},[147,167551,151635],{"class":504},[147,167553,112472],{"class":157},[147,167555,163691],{"class":5490},[147,167557,445],{"class":397},[147,167559,31750],{"class":448},[147,167561,407],{"class":157},[147,167563,167564,167566],{"class":149,"line":1586},[147,167565,30689],{"class":448},[147,167567,76858],{"class":157},[14,167569,167571],{"id":167570},"_711-闭包入门","7.11 闭包入门",[19,167573,167574],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[138,167576,167578],{"className":30652,"code":167577,"language":30654,"meta":143,"style":143},"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",[51,167579,167580,167590,167600,167611,167615,167622,167626,167630,167644],{"__ignoreMap":143},[147,167581,167582,167584,167587],{"class":149,"line":150},[147,167583,32221],{"class":397},[147,167585,167586],{"class":2237}," outer",[147,167588,167589],{"class":157},"(base):\n",[147,167591,167592,167594,167597],{"class":149,"line":312},[147,167593,31075],{"class":397},[147,167595,167596],{"class":2237}," inner",[147,167598,167599],{"class":157},"(num):\n",[147,167601,167602,167604,167607,167609],{"class":149,"line":1454},[147,167603,15025],{"class":397},[147,167605,167606],{"class":157}," base ",[147,167608,880],{"class":397},[147,167610,166742],{"class":157},[147,167612,167613],{"class":149,"line":1469},[147,167614,2674],{"emptyLinePlaceholder":324},[147,167616,167617,167619],{"class":149,"line":1475},[147,167618,4364],{"class":397},[147,167620,167621],{"class":157}," inner\n",[147,167623,167624],{"class":149,"line":1489},[147,167625,2674],{"emptyLinePlaceholder":324},[147,167627,167628],{"class":149,"line":1495},[147,167629,2674],{"emptyLinePlaceholder":324},[147,167631,167632,167635,167637,167640,167642],{"class":149,"line":1586},[147,167633,167634],{"class":157},"add_10 ",[147,167636,445],{"class":397},[147,167638,167639],{"class":157}," outer(",[147,167641,845],{"class":448},[147,167643,407],{"class":157},[147,167645,167646,167648,167651,167653],{"class":149,"line":1592},[147,167647,30689],{"class":448},[147,167649,167650],{"class":157},"(add_10(",[147,167652,718],{"class":448},[147,167654,30771],{"class":157},[19,167656,167657],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,167659,167661],{"id":167660},"_712-装饰器入门","7.12 装饰器入门",[19,167663,167664],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[138,167666,167668],{"className":30652,"code":167667,"language":30654,"meta":143,"style":143},"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",[51,167669,167670,167679,167688,167699,167704,167715,167719,167726,167730,167734,167739,167747,167757,167761,167765],{"__ignoreMap":143},[147,167671,167672,167674,167676],{"class":149,"line":150},[147,167673,32221],{"class":397},[147,167675,87463],{"class":2237},[147,167677,167678],{"class":157},"(func):\n",[147,167680,167681,167683,167686],{"class":149,"line":312},[147,167682,31075],{"class":397},[147,167684,167685],{"class":2237}," wrapper",[147,167687,32227],{"class":157},[147,167689,167690,167692,167694,167697],{"class":149,"line":1454},[147,167691,32725],{"class":448},[147,167693,401],{"class":157},[147,167695,167696],{"class":504},"\"函数开始执行\"",[147,167698,407],{"class":157},[147,167700,167701],{"class":149,"line":1469},[147,167702,167703],{"class":157},"        func()\n",[147,167705,167706,167708,167710,167713],{"class":149,"line":1475},[147,167707,32725],{"class":448},[147,167709,401],{"class":157},[147,167711,167712],{"class":504},"\"函数执行结束\"",[147,167714,407],{"class":157},[147,167716,167717],{"class":149,"line":1489},[147,167718,2674],{"emptyLinePlaceholder":324},[147,167720,167721,167723],{"class":149,"line":1495},[147,167722,4364],{"class":397},[147,167724,167725],{"class":157}," wrapper\n",[147,167727,167728],{"class":149,"line":1586},[147,167729,2674],{"emptyLinePlaceholder":324},[147,167731,167732],{"class":149,"line":1592},[147,167733,2674],{"emptyLinePlaceholder":324},[147,167735,167736],{"class":149,"line":1604},[147,167737,167738],{"class":2237},"@log\n",[147,167740,167741,167743,167745],{"class":149,"line":1886},[147,167742,32221],{"class":397},[147,167744,161159],{"class":2237},[147,167746,32227],{"class":157},[147,167748,167749,167751,167753,167755],{"class":149,"line":1891},[147,167750,31573],{"class":448},[147,167752,401],{"class":157},[147,167754,6118],{"class":504},[147,167756,407],{"class":157},[147,167758,167759],{"class":149,"line":1897},[147,167760,2674],{"emptyLinePlaceholder":324},[147,167762,167763],{"class":149,"line":1902},[147,167764,2674],{"emptyLinePlaceholder":324},[147,167766,167767],{"class":149,"line":1916},[147,167768,161194],{"class":157},[19,167770,158437],{},[138,167772,167774],{"className":30652,"code":167773,"language":30654,"meta":143,"style":143},"say_hello = log(say_hello)\n",[51,167775,167776],{"__ignoreMap":143},[147,167777,167778,167781,167783],{"class":149,"line":150},[147,167779,167780],{"class":157},"say_hello ",[147,167782,445],{"class":397},[147,167784,167785],{"class":157}," log(say_hello)\n",[19,167787,167788],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,167790,167792],{"id":167791},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[138,167794,167796],{"className":30652,"code":167795,"language":30654,"meta":143,"style":143},"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",[51,167797,167798,167806,167823,167833,167852,167862,167869,167873,167879,167883,167887,167891,167899,167909,167913,167917],{"__ignoreMap":143},[147,167799,167800,167802,167804],{"class":149,"line":150},[147,167801,32221],{"class":397},[147,167803,87463],{"class":2237},[147,167805,167678],{"class":157},[147,167807,167808,167810,167812,167814,167816,167819,167821],{"class":149,"line":312},[147,167809,31075],{"class":397},[147,167811,167685],{"class":2237},[147,167813,401],{"class":157},[147,167815,854],{"class":397},[147,167817,167818],{"class":157},"args, ",[147,167820,10935],{"class":397},[147,167822,166829],{"class":157},[147,167824,167825,167827,167829,167831],{"class":149,"line":1454},[147,167826,32725],{"class":448},[147,167828,401],{"class":157},[147,167830,167696],{"class":504},[147,167832,407],{"class":157},[147,167834,167835,167838,167840,167843,167845,167847,167849],{"class":149,"line":1469},[147,167836,167837],{"class":157},"        result ",[147,167839,445],{"class":397},[147,167841,167842],{"class":157}," func(",[147,167844,854],{"class":397},[147,167846,167818],{"class":157},[147,167848,10935],{"class":397},[147,167850,167851],{"class":157},"kwargs)\n",[147,167853,167854,167856,167858,167860],{"class":149,"line":1475},[147,167855,32725],{"class":448},[147,167857,401],{"class":157},[147,167859,167712],{"class":504},[147,167861,407],{"class":157},[147,167863,167864,167866],{"class":149,"line":1489},[147,167865,15025],{"class":397},[147,167867,167868],{"class":157}," result\n",[147,167870,167871],{"class":149,"line":1495},[147,167872,2674],{"emptyLinePlaceholder":324},[147,167874,167875,167877],{"class":149,"line":1586},[147,167876,4364],{"class":397},[147,167878,167725],{"class":157},[147,167880,167881],{"class":149,"line":1592},[147,167882,2674],{"emptyLinePlaceholder":324},[147,167884,167885],{"class":149,"line":1604},[147,167886,2674],{"emptyLinePlaceholder":324},[147,167888,167889],{"class":149,"line":1886},[147,167890,167738],{"class":2237},[147,167892,167893,167895,167897],{"class":149,"line":1891},[147,167894,32221],{"class":397},[147,167896,5483],{"class":2237},[147,167898,151256],{"class":157},[147,167900,167901,167903,167905,167907],{"class":149,"line":1897},[147,167902,4364],{"class":397},[147,167904,11143],{"class":157},[147,167906,880],{"class":397},[147,167908,151267],{"class":157},[147,167910,167911],{"class":149,"line":1902},[147,167912,2674],{"emptyLinePlaceholder":324},[147,167914,167915],{"class":149,"line":1916},[147,167916,2674],{"emptyLinePlaceholder":324},[147,167918,167919,167921,167923,167925,167927,167929],{"class":149,"line":1921},[147,167920,30689],{"class":448},[147,167922,166763],{"class":157},[147,167924,845],{"class":448},[147,167926,12709],{"class":157},[147,167928,1099],{"class":448},[147,167930,30771],{"class":157},[19,167932,167933,167934,101290,167936,167938],{},"这个写法使用 ",[51,167935,166695],{},[51,167937,166810],{}," 接收原函数的所有参数。",[14,167940,167942],{"id":167941},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,167944,123562],{},[350,167946,167947,167950,167953],{},[353,167948,167949],{},"给定一组学生数据。",[353,167951,167952],{},"封装函数，根据传入规则筛选学生。",[353,167954,167955],{},"筛选及格、优秀、未成年学生。",[19,167957,10309],{},[138,167959,167961],{"className":30652,"code":167960,"language":30654,"meta":143,"style":143},"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",[51,167962,167963,167971,167999,168027,168055,168059,168063,168067,168077,168085,168095,168102,168107,168113,168117,168121,168145,168168,168191,168195,168202,168209],{"__ignoreMap":143},[147,167964,167965,167967,167969],{"class":149,"line":150},[147,167966,159879],{"class":157},[147,167968,445],{"class":397},[147,167970,55720],{"class":157},[147,167972,167973,167975,167977,167979,167981,167983,167985,167987,167989,167991,167993,167995,167997],{"class":149,"line":312},[147,167974,148548],{"class":157},[147,167976,62952],{"class":504},[147,167978,51710],{"class":157},[147,167980,150051],{"class":504},[147,167982,12709],{"class":157},[147,167984,69397],{"class":504},[147,167986,51710],{"class":157},[147,167988,1049],{"class":448},[147,167990,12709],{"class":157},[147,167992,151635],{"class":504},[147,167994,51710],{"class":157},[147,167996,1388],{"class":448},[147,167998,5204],{"class":157},[147,168000,168001,168003,168005,168007,168009,168011,168013,168015,168017,168019,168021,168023,168025],{"class":149,"line":1454},[147,168002,148548],{"class":157},[147,168004,62952],{"class":504},[147,168006,51710],{"class":157},[147,168008,151099],{"class":504},[147,168010,12709],{"class":157},[147,168012,69397],{"class":504},[147,168014,51710],{"class":157},[147,168016,1024],{"class":448},[147,168018,12709],{"class":157},[147,168020,151635],{"class":504},[147,168022,51710],{"class":157},[147,168024,1210],{"class":448},[147,168026,5204],{"class":157},[147,168028,168029,168031,168033,168035,168037,168039,168041,168043,168045,168047,168049,168051,168053],{"class":149,"line":1469},[147,168030,148548],{"class":157},[147,168032,62952],{"class":504},[147,168034,51710],{"class":157},[147,168036,159894],{"class":504},[147,168038,12709],{"class":157},[147,168040,69397],{"class":504},[147,168042,51710],{"class":157},[147,168044,1074],{"class":448},[147,168046,12709],{"class":157},[147,168048,151635],{"class":504},[147,168050,51710],{"class":157},[147,168052,1281],{"class":448},[147,168054,5204],{"class":157},[147,168056,168057],{"class":149,"line":1475},[147,168058,33520],{"class":157},[147,168060,168061],{"class":149,"line":1489},[147,168062,2674],{"emptyLinePlaceholder":324},[147,168064,168065],{"class":149,"line":1495},[147,168066,2674],{"emptyLinePlaceholder":324},[147,168068,168069,168071,168074],{"class":149,"line":1586},[147,168070,32221],{"class":397},[147,168072,168073],{"class":2237}," filter_students",[147,168075,168076],{"class":157},"(students, condition):\n",[147,168078,168079,168081,168083],{"class":149,"line":1592},[147,168080,161386],{"class":157},[147,168082,445],{"class":397},[147,168084,52111],{"class":157},[147,168086,168087,168089,168091,168093],{"class":149,"line":1604},[147,168088,3475],{"class":397},[147,168090,152300],{"class":157},[147,168092,26317],{"class":397},[147,168094,152305],{"class":157},[147,168096,168097,168099],{"class":149,"line":1886},[147,168098,2771],{"class":397},[147,168100,168101],{"class":157}," condition(student):\n",[147,168103,168104],{"class":149,"line":1891},[147,168105,168106],{"class":157},"            result.append(student)\n",[147,168108,168109,168111],{"class":149,"line":1897},[147,168110,4364],{"class":397},[147,168112,167868],{"class":157},[147,168114,168115],{"class":149,"line":1902},[147,168116,2674],{"emptyLinePlaceholder":324},[147,168118,168119],{"class":149,"line":1916},[147,168120,2674],{"emptyLinePlaceholder":324},[147,168122,168123,168125,168127,168130,168132,168135,168137,168139,168141,168143],{"class":149,"line":1921},[147,168124,165864],{"class":157},[147,168126,445],{"class":397},[147,168128,168129],{"class":157}," filter_students(students, ",[147,168131,167049],{"class":397},[147,168133,168134],{"class":157}," s: s[",[147,168136,151635],{"class":504},[147,168138,4717],{"class":157},[147,168140,1984],{"class":397},[147,168142,158000],{"class":448},[147,168144,407],{"class":157},[147,168146,168147,168150,168152,168154,168156,168158,168160,168162,168164,168166],{"class":149,"line":1927},[147,168148,168149],{"class":157},"excellent ",[147,168151,445],{"class":397},[147,168153,168129],{"class":157},[147,168155,167049],{"class":397},[147,168157,168134],{"class":157},[147,168159,151635],{"class":504},[147,168161,4717],{"class":157},[147,168163,1984],{"class":397},[147,168165,157951],{"class":448},[147,168167,407],{"class":157},[147,168169,168170,168173,168175,168177,168179,168181,168183,168185,168187,168189],{"class":149,"line":1948},[147,168171,168172],{"class":157},"under_age ",[147,168174,445],{"class":397},[147,168176,168129],{"class":157},[147,168178,167049],{"class":397},[147,168180,168134],{"class":157},[147,168182,69397],{"class":504},[147,168184,4717],{"class":157},[147,168186,1309],{"class":397},[147,168188,156448],{"class":448},[147,168190,407],{"class":157},[147,168192,168193],{"class":149,"line":1953},[147,168194,2674],{"emptyLinePlaceholder":324},[147,168196,168197,168199],{"class":149,"line":1967},[147,168198,30689],{"class":448},[147,168200,168201],{"class":157},"(passed)\n",[147,168203,168204,168206],{"class":149,"line":1972},[147,168205,30689],{"class":448},[147,168207,168208],{"class":157},"(excellent)\n",[147,168210,168211,168213],{"class":149,"line":2001},[147,168212,30689],{"class":448},[147,168214,168215],{"class":157},"(under_age)\n",[14,168217,168219],{"id":168218},"_715-易错点","7.15 易错点",[350,168221,168222,168225,168233,168238,168249],{},[353,168223,168224],{},"默认参数不要写可变对象。",[353,168226,168227,168229,168230,168232],{},[51,168228,166695],{}," 是元组，",[51,168231,166810],{}," 是字典。",[353,168234,168235,168237],{},[51,168236,167049],{}," 只适合简单表达式。",[353,168239,168240,101290,168242,168244,168245,168248],{},[51,168241,74317],{},[51,168243,80323],{}," 的结果是迭代器，常用 ",[51,168246,168247],{},"list()"," 转换查看。",[353,168250,168251],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,168253,168255],{"id":168254},"_716-本章练习","7.16 本章练习",[350,168257,168258,168265,168271,168276,168281],{},[353,168259,168260,168261,168264],{},"写函数 ",[51,168262,168263],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[353,168266,168260,168267,168270],{},[51,168268,168269],{},"print_user(**kwargs)","，输出用户所有字段。",[353,168272,104636,168273,168275],{},[51,168274,167049],{}," 对学生列表按年龄排序。",[353,168277,104636,168278,168280],{},[51,168279,80323],{}," 找出成绩不及格的学生。",[353,168282,168283],{},"写一个装饰器，统计函数执行前后的提示信息。",[308,168285,168286],{},"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":143,"searchDepth":312,"depth":312,"links":168288},[168289,168290,168291,168292,168293,168294,168298,168299,168300,168301,168306,168307,168308,168309,168310,168311],{"id":166147,"depth":312,"text":166148},{"id":166261,"depth":312,"text":166262},{"id":166350,"depth":312,"text":166351},{"id":166412,"depth":312,"text":166413},{"id":166558,"depth":312,"text":166559},{"id":166685,"depth":312,"text":166686,"children":168295},[168296,168297],{"id":166689,"depth":1454,"text":166690},{"id":166804,"depth":1454,"text":166805},{"id":166885,"depth":312,"text":166886},{"id":167043,"depth":312,"text":167044},{"id":167211,"depth":312,"text":167212},{"id":167293,"depth":312,"text":167294,"children":168302},[168303,168304,168305],{"id":167297,"depth":1454,"text":167298},{"id":167368,"depth":1454,"text":167369},{"id":167445,"depth":1454,"text":167446},{"id":167570,"depth":312,"text":167571},{"id":167660,"depth":312,"text":167661},{"id":167791,"depth":312,"text":167792},{"id":167941,"depth":312,"text":167942},{"id":168218,"depth":312,"text":168219},{"id":168254,"depth":312,"text":168255},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":166139,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168318,"title":168319,"body":168320,"description":321,"extension":322,"meta":170839,"navigation":324,"path":170840,"seo":170841,"stem":170842,"__hash__":170843},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168321,"toc":170814},[168322,168325,168329,168332,168335,168366,168370,168374,168377,168404,168408,168411,168462,168465,168480,168483,168518,168522,168524,168548,168551,168611,168615,168619,168622,168679,168682,168702,168706,168709,168772,168776,168779,168835,168842,168866,168870,168873,168936,168940,168945,168996,168999,169003,169008,169075,169078,169160,169164,169169,169220,169223,169227,169230,169233,169241,169244,169290,169293,169339,169343,169349,169393,169396,169442,169445,169485,169488,169549,169553,169556,169646,169649,169791,169794,169861,169865,169868,169871,170012,170015,170093,170096,170272,170276,170278,170289,170291,170490,170494,170738,170742,170776,170780,170811],[10,168323,168319],{"id":168324},"_8-文件操作",[14,168326,168328],{"id":168327},"_81-文件操作的意义","8.1 文件操作的意义",[19,168330,168331],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,168333,168334],{},"常见文件类型：",[350,168336,168337,168343,168349,168355,168361],{},[353,168338,168339,168342],{},[51,168340,168341],{},".txt","：普通文本。",[353,168344,168345,168348],{},[51,168346,168347],{},".csv","：表格文本。",[353,168350,168351,168354],{},[51,168352,168353],{},".json","：结构化数据。",[353,168356,168357,168360],{},[51,168358,168359],{},".log","：日志文件。",[353,168362,168363,168365],{},[51,168364,146515],{},"：Python 源代码。",[14,168367,168369],{"id":168368},"_82-路径","8.2 路径",[367,168371,168373],{"id":168372},"_821-相对路径","8.2.1 相对路径",[19,168375,168376],{},"相对当前运行目录：",[138,168378,168380],{"className":30652,"code":168379,"language":30654,"meta":143,"style":143},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[51,168381,168382],{"__ignoreMap":143},[147,168383,168384,168386,168388,168390,168392,168394,168396,168398,168400,168402],{"class":149,"line":150},[147,168385,87187],{"class":448},[147,168387,401],{"class":157},[147,168389,146959],{"class":504},[147,168391,12709],{"class":157},[147,168393,146964],{"class":504},[147,168395,12709],{"class":157},[147,168397,146969],{"class":5490},[147,168399,445],{"class":397},[147,168401,146974],{"class":504},[147,168403,407],{"class":157},[367,168405,168407],{"id":168406},"_822-绝对路径","8.2.2 绝对路径",[19,168409,168410],{},"从根目录或盘符开始：",[138,168412,168414],{"className":30652,"code":168413,"language":30654,"meta":143,"style":143},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[51,168415,168416,168439],{"__ignoreMap":143},[147,168417,168418,168420,168422,168425,168427,168429,168431,168433,168435,168437],{"class":149,"line":150},[147,168419,87187],{"class":448},[147,168421,401],{"class":157},[147,168423,168424],{"class":504},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[147,168426,12709],{"class":157},[147,168428,146964],{"class":504},[147,168430,12709],{"class":157},[147,168432,146969],{"class":5490},[147,168434,445],{"class":397},[147,168436,146974],{"class":504},[147,168438,407],{"class":157},[147,168440,168441,168443,168445,168448,168450,168452,168454,168456,168458,168460],{"class":149,"line":312},[147,168442,87187],{"class":448},[147,168444,401],{"class":157},[147,168446,168447],{"class":504},"\"D:\u002Fdata\u002Fdata.txt\"",[147,168449,12709],{"class":157},[147,168451,146964],{"class":504},[147,168453,12709],{"class":157},[147,168455,146969],{"class":5490},[147,168457,445],{"class":397},[147,168459,146974],{"class":504},[147,168461,407],{"class":157},[19,168463,168464],{},"Windows 路径建议写成：",[138,168466,168468],{"className":30652,"code":168467,"language":30654,"meta":143,"style":143},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[51,168469,168470],{"__ignoreMap":143},[147,168471,168472,168475,168477],{"class":149,"line":150},[147,168473,168474],{"class":157},"path ",[147,168476,445],{"class":397},[147,168478,168479],{"class":504}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,168481,168482],{},"或原始字符串：",[138,168484,168486],{"className":30652,"code":168485,"language":30654,"meta":143,"style":143},"path = r\"D:\\data\\data.txt\"\n",[51,168487,168488],{"__ignoreMap":143},[147,168489,168490,168492,168494,168496,168498,168501,168504,168507,168509,168511,168513,168516],{"class":149,"line":150},[147,168491,168474],{"class":157},[147,168493,445],{"class":397},[147,168495,17394],{"class":397},[147,168497,650],{"class":504},[147,168499,168500],{"class":48251},"D:",[147,168502,168503],{"class":448},"\\d",[147,168505,168506],{"class":48251},"ata",[147,168508,168503],{"class":448},[147,168510,168506],{"class":48251},[147,168512,957],{"class":448},[147,168514,168515],{"class":48251},"txt",[147,168517,25407],{"class":504},[14,168519,168521],{"id":168520},"_83-open函数","8.3 open函数",[19,168523,5455],{},[138,168525,168527],{"className":30652,"code":168526,"language":30654,"meta":143,"style":143},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[51,168528,168529],{"__ignoreMap":143},[147,168530,168531,168533,168535,168537,168540,168542,168544,168546],{"class":149,"line":150},[147,168532,45628],{"class":5490},[147,168534,13838],{"class":397},[147,168536,146954],{"class":448},[147,168538,168539],{"class":157},"(文件路径, 打开模式, ",[147,168541,146969],{"class":5490},[147,168543,445],{"class":397},[147,168545,146974],{"class":504},[147,168547,407],{"class":157},[19,168549,168550],{},"常见模式：",[537,168552,168553,168562],{},[540,168554,168555],{},[543,168556,168557,168560],{},[546,168558,168559],{},"模式",[546,168561,26143],{},[583,168563,168564,168573,168582,168591,168601],{},[543,168565,168566,168570],{},[588,168567,168568],{},[51,168569,1069],{},[588,168571,168572],{},"只读，文件不存在会报错",[543,168574,168575,168579],{},[588,168576,168577],{},[51,168578,1194],{},[588,168580,168581],{},"只写，文件不存在会创建，存在会清空",[543,168583,168584,168588],{},[588,168585,168586],{},[51,168587,637],{},[588,168589,168590],{},"追加，文件不存在会创建",[543,168592,168593,168598],{},[588,168594,168595],{},[51,168596,168597],{},"rb",[588,168599,168600],{},"二进制只读",[543,168602,168603,168608],{},[588,168604,168605],{},[51,168606,168607],{},"wb",[588,168609,168610],{},"二进制只写",[14,168612,168614],{"id":168613},"_84-读取文件","8.4 读取文件",[367,168616,168618],{"id":168617},"_841-read","8.4.1 read",[19,168620,168621],{},"一次读取全部内容：",[138,168623,168625],{"className":30652,"code":168624,"language":30654,"meta":143,"style":143},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[51,168626,168627,168653,168665,168672],{"__ignoreMap":143},[147,168628,168629,168631,168633,168635,168637,168639,168641,168643,168645,168647,168649,168651],{"class":149,"line":150},[147,168630,45628],{"class":5490},[147,168632,13838],{"class":397},[147,168634,146954],{"class":448},[147,168636,401],{"class":157},[147,168638,146959],{"class":504},[147,168640,12709],{"class":157},[147,168642,146964],{"class":504},[147,168644,12709],{"class":157},[147,168646,146969],{"class":5490},[147,168648,445],{"class":397},[147,168650,146974],{"class":504},[147,168652,407],{"class":157},[147,168654,168655,168658,168660,168662],{"class":149,"line":312},[147,168656,168657],{"class":157},"content ",[147,168659,445],{"class":397},[147,168661,148316],{"class":5490},[147,168663,168664],{"class":157},".read()\n",[147,168666,168667,168669],{"class":149,"line":1454},[147,168668,30689],{"class":448},[147,168670,168671],{"class":157},"(content)\n",[147,168673,168674,168676],{"class":149,"line":1469},[147,168675,45628],{"class":5490},[147,168677,168678],{"class":157},".close()\n",[19,168680,168681],{},"可以指定读取字符数：",[138,168683,168685],{"className":30652,"code":168684,"language":30654,"meta":143,"style":143},"content = file.read(10)\n",[51,168686,168687],{"__ignoreMap":143},[147,168688,168689,168691,168693,168695,168698,168700],{"class":149,"line":150},[147,168690,168657],{"class":157},[147,168692,445],{"class":397},[147,168694,148316],{"class":5490},[147,168696,168697],{"class":157},".read(",[147,168699,845],{"class":448},[147,168701,407],{"class":157},[367,168703,168705],{"id":168704},"_842-readline","8.4.2 readline",[19,168707,168708],{},"一次读取一行：",[138,168710,168712],{"className":30652,"code":168711,"language":30654,"meta":143,"style":143},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[51,168713,168714,168740,168744,168755,168762,168766],{"__ignoreMap":143},[147,168715,168716,168718,168720,168722,168724,168726,168728,168730,168732,168734,168736,168738],{"class":149,"line":150},[147,168717,45628],{"class":5490},[147,168719,13838],{"class":397},[147,168721,146954],{"class":448},[147,168723,401],{"class":157},[147,168725,146959],{"class":504},[147,168727,12709],{"class":157},[147,168729,146964],{"class":504},[147,168731,12709],{"class":157},[147,168733,146969],{"class":5490},[147,168735,445],{"class":397},[147,168737,146974],{"class":504},[147,168739,407],{"class":157},[147,168741,168742],{"class":149,"line":312},[147,168743,2674],{"emptyLinePlaceholder":324},[147,168745,168746,168748,168750,168752],{"class":149,"line":1454},[147,168747,147415],{"class":157},[147,168749,445],{"class":397},[147,168751,148316],{"class":5490},[147,168753,168754],{"class":157},".readline()\n",[147,168756,168757,168759],{"class":149,"line":1469},[147,168758,30689],{"class":448},[147,168760,168761],{"class":157},"(line)\n",[147,168763,168764],{"class":149,"line":1475},[147,168765,2674],{"emptyLinePlaceholder":324},[147,168767,168768,168770],{"class":149,"line":1489},[147,168769,45628],{"class":5490},[147,168771,168678],{"class":157},[367,168773,168775],{"id":168774},"_843-readlines","8.4.3 readlines",[19,168777,168778],{},"读取所有行，返回列表：",[138,168780,168782],{"className":30652,"code":168781,"language":30654,"meta":143,"style":143},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[51,168783,168784,168810,168822,168829],{"__ignoreMap":143},[147,168785,168786,168788,168790,168792,168794,168796,168798,168800,168802,168804,168806,168808],{"class":149,"line":150},[147,168787,45628],{"class":5490},[147,168789,13838],{"class":397},[147,168791,146954],{"class":448},[147,168793,401],{"class":157},[147,168795,146959],{"class":504},[147,168797,12709],{"class":157},[147,168799,146964],{"class":504},[147,168801,12709],{"class":157},[147,168803,146969],{"class":5490},[147,168805,445],{"class":397},[147,168807,146974],{"class":504},[147,168809,407],{"class":157},[147,168811,168812,168815,168817,168819],{"class":149,"line":312},[147,168813,168814],{"class":157},"lines ",[147,168816,445],{"class":397},[147,168818,148316],{"class":5490},[147,168820,168821],{"class":157},".readlines()\n",[147,168823,168824,168826],{"class":149,"line":1454},[147,168825,30689],{"class":448},[147,168827,168828],{"class":157},"(lines)\n",[147,168830,168831,168833],{"class":149,"line":1469},[147,168832,45628],{"class":5490},[147,168834,168678],{"class":157},[19,168836,168837,168838,168841],{},"每一行通常带有换行符，可以用 ",[51,168839,168840],{},"strip()"," 去掉：",[138,168843,168845],{"className":30652,"code":168844,"language":30654,"meta":143,"style":143},"for line in lines:\n    print(line.strip())\n",[51,168846,168847,168859],{"__ignoreMap":143},[147,168848,168849,168851,168854,168856],{"class":149,"line":150},[147,168850,3299],{"class":397},[147,168852,168853],{"class":157}," line ",[147,168855,26317],{"class":397},[147,168857,168858],{"class":157}," lines:\n",[147,168860,168861,168863],{"class":149,"line":312},[147,168862,31573],{"class":448},[147,168864,168865],{"class":157},"(line.strip())\n",[367,168867,168869],{"id":168868},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,168871,168872],{},"推荐读取大文件时使用：",[138,168874,168876],{"className":30652,"code":168875,"language":30654,"meta":143,"style":143},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[51,168877,168878,168904,168908,168920,168926,168930],{"__ignoreMap":143},[147,168879,168880,168882,168884,168886,168888,168890,168892,168894,168896,168898,168900,168902],{"class":149,"line":150},[147,168881,45628],{"class":5490},[147,168883,13838],{"class":397},[147,168885,146954],{"class":448},[147,168887,401],{"class":157},[147,168889,146959],{"class":504},[147,168891,12709],{"class":157},[147,168893,146964],{"class":504},[147,168895,12709],{"class":157},[147,168897,146969],{"class":5490},[147,168899,445],{"class":397},[147,168901,146974],{"class":504},[147,168903,407],{"class":157},[147,168905,168906],{"class":149,"line":312},[147,168907,2674],{"emptyLinePlaceholder":324},[147,168909,168910,168912,168914,168916,168918],{"class":149,"line":1454},[147,168911,3299],{"class":397},[147,168913,168853],{"class":157},[147,168915,26317],{"class":397},[147,168917,148316],{"class":5490},[147,168919,4013],{"class":157},[147,168921,168922,168924],{"class":149,"line":1469},[147,168923,31573],{"class":448},[147,168925,168865],{"class":157},[147,168927,168928],{"class":149,"line":1475},[147,168929,2674],{"emptyLinePlaceholder":324},[147,168931,168932,168934],{"class":149,"line":1489},[147,168933,45628],{"class":5490},[147,168935,168678],{"class":157},[14,168937,168939],{"id":168938},"_85-with语句","8.5 with语句",[19,168941,168942,168944],{},[51,168943,108103],{}," 会自动关闭文件，推荐使用。",[138,168946,168948],{"className":30652,"code":168947,"language":30654,"meta":143,"style":143},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[51,168949,168950,168980,168990],{"__ignoreMap":143},[147,168951,168952,168954,168956,168958,168960,168962,168964,168966,168968,168970,168972,168974,168976,168978],{"class":149,"line":150},[147,168953,108103],{"class":397},[147,168955,146954],{"class":448},[147,168957,401],{"class":157},[147,168959,146959],{"class":504},[147,168961,12709],{"class":157},[147,168963,146964],{"class":504},[147,168965,12709],{"class":157},[147,168967,146969],{"class":5490},[147,168969,445],{"class":397},[147,168971,146974],{"class":504},[147,168973,13988],{"class":157},[147,168975,31657],{"class":397},[147,168977,148316],{"class":5490},[147,168979,4013],{"class":157},[147,168981,168982,168984,168986,168988],{"class":149,"line":312},[147,168983,146986],{"class":157},[147,168985,445],{"class":397},[147,168987,148316],{"class":5490},[147,168989,168664],{"class":157},[147,168991,168992,168994],{"class":149,"line":1454},[147,168993,31573],{"class":448},[147,168995,168671],{"class":157},[19,168997,168998],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,169000,169002],{"id":169001},"_86-写入文件","8.6 写入文件",[19,169004,169005,169007],{},[51,169006,1194],{}," 模式会清空原文件。",[138,169009,169011],{"className":30652,"code":169010,"language":30654,"meta":143,"style":143},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[51,169012,169013,169043,169060],{"__ignoreMap":143},[147,169014,169015,169017,169019,169021,169023,169025,169027,169029,169031,169033,169035,169037,169039,169041],{"class":149,"line":150},[147,169016,108103],{"class":397},[147,169018,146954],{"class":448},[147,169020,401],{"class":157},[147,169022,146959],{"class":504},[147,169024,12709],{"class":157},[147,169026,152139],{"class":504},[147,169028,12709],{"class":157},[147,169030,146969],{"class":5490},[147,169032,445],{"class":397},[147,169034,146974],{"class":504},[147,169036,13988],{"class":157},[147,169038,31657],{"class":397},[147,169040,148316],{"class":5490},[147,169042,4013],{"class":157},[147,169044,169045,169048,169051,169054,169056,169058],{"class":149,"line":312},[147,169046,169047],{"class":5490},"    file",[147,169049,169050],{"class":157},".write(",[147,169052,169053],{"class":504},"\"hello",[147,169055,156688],{"class":448},[147,169057,650],{"class":504},[147,169059,407],{"class":157},[147,169061,169062,169064,169066,169069,169071,169073],{"class":149,"line":1454},[147,169063,169047],{"class":5490},[147,169065,169050],{"class":157},[147,169067,169068],{"class":504},"\"python",[147,169070,156688],{"class":448},[147,169072,650],{"class":504},[147,169074,407],{"class":157},[19,169076,169077],{},"写入多行：",[138,169079,169081],{"className":30652,"code":169080,"language":30654,"meta":143,"style":143},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[51,169082,169083,169118,169122,169153],{"__ignoreMap":143},[147,169084,169085,169087,169089,169091,169094,169096,169098,169100,169103,169105,169107,169109,169112,169114,169116],{"class":149,"line":150},[147,169086,168814],{"class":157},[147,169088,445],{"class":397},[147,169090,52499],{"class":157},[147,169092,169093],{"class":504},"\"小明,18",[147,169095,156688],{"class":448},[147,169097,650],{"class":504},[147,169099,12709],{"class":157},[147,169101,169102],{"class":504},"\"小红,17",[147,169104,156688],{"class":448},[147,169106,650],{"class":504},[147,169108,12709],{"class":157},[147,169110,169111],{"class":504},"\"小刚,19",[147,169113,156688],{"class":448},[147,169115,650],{"class":504},[147,169117,33520],{"class":157},[147,169119,169120],{"class":149,"line":312},[147,169121,2674],{"emptyLinePlaceholder":324},[147,169123,169124,169126,169128,169130,169133,169135,169137,169139,169141,169143,169145,169147,169149,169151],{"class":149,"line":1454},[147,169125,108103],{"class":397},[147,169127,146954],{"class":448},[147,169129,401],{"class":157},[147,169131,169132],{"class":504},"\"students.txt\"",[147,169134,12709],{"class":157},[147,169136,152139],{"class":504},[147,169138,12709],{"class":157},[147,169140,146969],{"class":5490},[147,169142,445],{"class":397},[147,169144,146974],{"class":504},[147,169146,13988],{"class":157},[147,169148,31657],{"class":397},[147,169150,148316],{"class":5490},[147,169152,4013],{"class":157},[147,169154,169155,169157],{"class":149,"line":1469},[147,169156,169047],{"class":5490},[147,169158,169159],{"class":157},".writelines(lines)\n",[14,169161,169163],{"id":169162},"_87-追加文件","8.7 追加文件",[19,169165,169166,169168],{},[51,169167,637],{}," 模式不会清空原内容，而是在末尾追加。",[138,169170,169172],{"className":30652,"code":169171,"language":30654,"meta":143,"style":143},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[51,169173,169174,169205],{"__ignoreMap":143},[147,169175,169176,169178,169180,169182,169185,169187,169189,169191,169193,169195,169197,169199,169201,169203],{"class":149,"line":150},[147,169177,108103],{"class":397},[147,169179,146954],{"class":448},[147,169181,401],{"class":157},[147,169183,169184],{"class":504},"\"log.txt\"",[147,169186,12709],{"class":157},[147,169188,165488],{"class":504},[147,169190,12709],{"class":157},[147,169192,146969],{"class":5490},[147,169194,445],{"class":397},[147,169196,146974],{"class":504},[147,169198,13988],{"class":157},[147,169200,31657],{"class":397},[147,169202,148316],{"class":5490},[147,169204,4013],{"class":157},[147,169206,169207,169209,169211,169214,169216,169218],{"class":149,"line":312},[147,169208,169047],{"class":5490},[147,169210,169050],{"class":157},[147,169212,169213],{"class":504},"\"程序启动",[147,169215,156688],{"class":448},[147,169217,650],{"class":504},[147,169219,407],{"class":157},[19,169221,169222],{},"日志类文件常用追加模式。",[14,169224,169226],{"id":169225},"_88-文件编码","8.8 文件编码",[19,169228,169229],{},"编码决定文字如何保存为字节。",[19,169231,169232],{},"常见编码：",[350,169234,169235,169238],{},[353,169236,169237],{},"UTF-8：推荐。",[353,169239,169240],{},"GBK：部分 Windows 中文文件常见。",[19,169242,169243],{},"读取文件乱码时，可以尝试：",[138,169245,169247],{"className":30652,"code":169246,"language":30654,"meta":143,"style":143},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[51,169248,169249,169280],{"__ignoreMap":143},[147,169250,169251,169253,169255,169257,169259,169261,169263,169265,169267,169269,169272,169274,169276,169278],{"class":149,"line":150},[147,169252,108103],{"class":397},[147,169254,146954],{"class":448},[147,169256,401],{"class":157},[147,169258,146959],{"class":504},[147,169260,12709],{"class":157},[147,169262,146964],{"class":504},[147,169264,12709],{"class":157},[147,169266,146969],{"class":5490},[147,169268,445],{"class":397},[147,169270,169271],{"class":504},"\"gbk\"",[147,169273,13988],{"class":157},[147,169275,31657],{"class":397},[147,169277,148316],{"class":5490},[147,169279,4013],{"class":157},[147,169281,169282,169284,169286,169288],{"class":149,"line":312},[147,169283,146986],{"class":157},[147,169285,445],{"class":397},[147,169287,148316],{"class":5490},[147,169289,168664],{"class":157},[19,169291,169292],{},"写文件时建议统一 UTF-8：",[138,169294,169296],{"className":30652,"code":169295,"language":30654,"meta":143,"style":143},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[51,169297,169298,169328],{"__ignoreMap":143},[147,169299,169300,169302,169304,169306,169308,169310,169312,169314,169316,169318,169320,169322,169324,169326],{"class":149,"line":150},[147,169301,108103],{"class":397},[147,169303,146954],{"class":448},[147,169305,401],{"class":157},[147,169307,146959],{"class":504},[147,169309,12709],{"class":157},[147,169311,152139],{"class":504},[147,169313,12709],{"class":157},[147,169315,146969],{"class":5490},[147,169317,445],{"class":397},[147,169319,146974],{"class":504},[147,169321,13988],{"class":157},[147,169323,31657],{"class":397},[147,169325,148316],{"class":5490},[147,169327,4013],{"class":157},[147,169329,169330,169332,169334,169337],{"class":149,"line":312},[147,169331,169047],{"class":5490},[147,169333,169050],{"class":157},[147,169335,169336],{"class":504},"\"中文内容\"",[147,169338,407],{"class":157},[14,169340,169342],{"id":169341},"_89-pathlib","8.9 pathlib",[19,169344,169345,169348],{},[51,169346,169347],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[138,169350,169352],{"className":30652,"code":169351,"language":30654,"meta":143,"style":143},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[51,169353,169354,169364,169368,169386],{"__ignoreMap":143},[147,169355,169356,169358,169360,169362],{"class":149,"line":150},[147,169357,31011],{"class":397},[147,169359,108581],{"class":157},[147,169361,30666],{"class":397},[147,169363,108586],{"class":157},[147,169365,169366],{"class":149,"line":312},[147,169367,2674],{"emptyLinePlaceholder":324},[147,169369,169370,169372,169374,169376,169379,169381,169383],{"class":149,"line":1454},[147,169371,168474],{"class":157},[147,169373,445],{"class":397},[147,169375,108815],{"class":157},[147,169377,169378],{"class":504},"\"data\"",[147,169380,13988],{"class":157},[147,169382,983],{"class":397},[147,169384,169385],{"class":504}," \"students.txt\"\n",[147,169387,169388,169390],{"class":149,"line":1469},[147,169389,30689],{"class":448},[147,169391,169392],{"class":157},"(path)\n",[19,169394,169395],{},"创建目录：",[138,169397,169399],{"className":30652,"code":169398,"language":30654,"meta":143,"style":143},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[51,169400,169401,169411,169415,169428],{"__ignoreMap":143},[147,169402,169403,169405,169407,169409],{"class":149,"line":150},[147,169404,31011],{"class":397},[147,169406,108581],{"class":157},[147,169408,30666],{"class":397},[147,169410,108586],{"class":157},[147,169412,169413],{"class":149,"line":312},[147,169414,2674],{"emptyLinePlaceholder":324},[147,169416,169417,169420,169422,169424,169426],{"class":149,"line":1454},[147,169418,169419],{"class":157},"data_dir ",[147,169421,445],{"class":397},[147,169423,108815],{"class":157},[147,169425,169378],{"class":504},[147,169427,407],{"class":157},[147,169429,169430,169433,169436,169438,169440],{"class":149,"line":1469},[147,169431,169432],{"class":157},"data_dir.mkdir(",[147,169434,169435],{"class":5490},"exist_ok",[147,169437,445],{"class":397},[147,169439,31750],{"class":448},[147,169441,407],{"class":157},[19,169443,169444],{},"判断文件是否存在：",[138,169446,169448],{"className":30652,"code":169447,"language":30654,"meta":143,"style":143},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[51,169449,169450,169463,169467,169474],{"__ignoreMap":143},[147,169451,169452,169454,169456,169458,169461],{"class":149,"line":150},[147,169453,168474],{"class":157},[147,169455,445],{"class":397},[147,169457,108815],{"class":157},[147,169459,169460],{"class":504},"\"data\u002Fstudents.txt\"",[147,169462,407],{"class":157},[147,169464,169465],{"class":149,"line":312},[147,169466,2674],{"emptyLinePlaceholder":324},[147,169468,169469,169471],{"class":149,"line":1454},[147,169470,1805],{"class":397},[147,169472,169473],{"class":157}," path.exists():\n",[147,169475,169476,169478,169480,169483],{"class":149,"line":1469},[147,169477,31573],{"class":448},[147,169479,401],{"class":157},[147,169481,169482],{"class":504},"\"文件存在\"",[147,169484,407],{"class":157},[19,169486,169487],{},"读写文本：",[138,169489,169491],{"className":30652,"code":169490,"language":30654,"meta":143,"style":143},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[51,169492,169493,169505,169509,169526,169543],{"__ignoreMap":143},[147,169494,169495,169497,169499,169501,169503],{"class":149,"line":150},[147,169496,168474],{"class":157},[147,169498,445],{"class":397},[147,169500,108815],{"class":157},[147,169502,146959],{"class":504},[147,169504,407],{"class":157},[147,169506,169507],{"class":149,"line":312},[147,169508,2674],{"emptyLinePlaceholder":324},[147,169510,169511,169514,169516,169518,169520,169522,169524],{"class":149,"line":1454},[147,169512,169513],{"class":157},"path.write_text(",[147,169515,146039],{"class":504},[147,169517,12709],{"class":157},[147,169519,146969],{"class":5490},[147,169521,445],{"class":397},[147,169523,146974],{"class":504},[147,169525,407],{"class":157},[147,169527,169528,169530,169532,169535,169537,169539,169541],{"class":149,"line":1469},[147,169529,168657],{"class":157},[147,169531,445],{"class":397},[147,169533,169534],{"class":157}," path.read_text(",[147,169536,146969],{"class":5490},[147,169538,445],{"class":397},[147,169540,146974],{"class":504},[147,169542,407],{"class":157},[147,169544,169545,169547],{"class":149,"line":1475},[147,169546,30689],{"class":448},[147,169548,168671],{"class":157},[14,169550,169552],{"id":169551},"_810-json文件","8.10 JSON文件",[19,169554,169555],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[138,169557,169559],{"className":30652,"code":169558,"language":30654,"meta":143,"style":143},"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",[51,169560,169561,169567,169571,169579,169589,169599,169607,169611,169615,169640],{"__ignoreMap":143},[147,169562,169563,169565],{"class":149,"line":150},[147,169564,30666],{"class":397},[147,169566,147254],{"class":157},[147,169568,169569],{"class":149,"line":312},[147,169570,2674],{"emptyLinePlaceholder":324},[147,169572,169573,169575,169577],{"class":149,"line":1454},[147,169574,149644],{"class":157},[147,169576,445],{"class":397},[147,169578,15845],{"class":157},[147,169580,169581,169583,169585,169587],{"class":149,"line":1469},[147,169582,147183],{"class":504},[147,169584,51710],{"class":157},[147,169586,150051],{"class":504},[147,169588,31740],{"class":157},[147,169590,169591,169593,169595,169597],{"class":149,"line":1475},[147,169592,164700],{"class":504},[147,169594,51710],{"class":157},[147,169596,1049],{"class":448},[147,169598,31740],{"class":157},[147,169600,169601,169603,169605],{"class":149,"line":1489},[147,169602,164711],{"class":504},[147,169604,51710],{"class":157},[147,169606,164716],{"class":448},[147,169608,169609],{"class":149,"line":1495},[147,169610,1839],{"class":157},[147,169612,169613],{"class":149,"line":1586},[147,169614,2674],{"emptyLinePlaceholder":324},[147,169616,169617,169619,169621,169624,169626,169628,169630,169632,169634,169636,169638],{"class":149,"line":1592},[147,169618,156607],{"class":157},[147,169620,445],{"class":397},[147,169622,169623],{"class":157}," json.dumps(student, ",[147,169625,147300],{"class":5490},[147,169627,445],{"class":397},[147,169629,34261],{"class":448},[147,169631,12709],{"class":157},[147,169633,152175],{"class":5490},[147,169635,445],{"class":397},[147,169637,477],{"class":448},[147,169639,407],{"class":157},[147,169641,169642,169644],{"class":149,"line":1604},[147,169643,30689],{"class":448},[147,169645,164234],{"class":157},[19,169647,169648],{},"写入 JSON 文件：",[138,169650,169652],{"className":30652,"code":169651,"language":30654,"meta":143,"style":143},"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",[51,169653,169654,169660,169664,169672,169700,169728,169732,169736,169766],{"__ignoreMap":143},[147,169655,169656,169658],{"class":149,"line":150},[147,169657,30666],{"class":397},[147,169659,147254],{"class":157},[147,169661,169662],{"class":149,"line":312},[147,169663,2674],{"emptyLinePlaceholder":324},[147,169665,169666,169668,169670],{"class":149,"line":1454},[147,169667,159879],{"class":157},[147,169669,445],{"class":397},[147,169671,55720],{"class":157},[147,169673,169674,169676,169678,169680,169682,169684,169686,169688,169690,169692,169694,169696,169698],{"class":149,"line":1469},[147,169675,148548],{"class":157},[147,169677,62952],{"class":504},[147,169679,51710],{"class":157},[147,169681,150051],{"class":504},[147,169683,12709],{"class":157},[147,169685,69397],{"class":504},[147,169687,51710],{"class":157},[147,169689,1049],{"class":448},[147,169691,12709],{"class":157},[147,169693,151635],{"class":504},[147,169695,51710],{"class":157},[147,169697,1388],{"class":448},[147,169699,5204],{"class":157},[147,169701,169702,169704,169706,169708,169710,169712,169714,169716,169718,169720,169722,169724,169726],{"class":149,"line":1475},[147,169703,148548],{"class":157},[147,169705,62952],{"class":504},[147,169707,51710],{"class":157},[147,169709,151099],{"class":504},[147,169711,12709],{"class":157},[147,169713,69397],{"class":504},[147,169715,51710],{"class":157},[147,169717,1024],{"class":448},[147,169719,12709],{"class":157},[147,169721,151635],{"class":504},[147,169723,51710],{"class":157},[147,169725,1210],{"class":448},[147,169727,5204],{"class":157},[147,169729,169730],{"class":149,"line":1489},[147,169731,33520],{"class":157},[147,169733,169734],{"class":149,"line":1495},[147,169735,2674],{"emptyLinePlaceholder":324},[147,169737,169738,169740,169742,169744,169746,169748,169750,169752,169754,169756,169758,169760,169762,169764],{"class":149,"line":1586},[147,169739,108103],{"class":397},[147,169741,146954],{"class":448},[147,169743,401],{"class":157},[147,169745,151994],{"class":504},[147,169747,12709],{"class":157},[147,169749,152139],{"class":504},[147,169751,12709],{"class":157},[147,169753,146969],{"class":5490},[147,169755,445],{"class":397},[147,169757,146974],{"class":504},[147,169759,13988],{"class":157},[147,169761,31657],{"class":397},[147,169763,148316],{"class":5490},[147,169765,4013],{"class":157},[147,169767,169768,169771,169773,169775,169777,169779,169781,169783,169785,169787,169789],{"class":149,"line":1592},[147,169769,169770],{"class":157},"    json.dump(students, ",[147,169772,45628],{"class":5490},[147,169774,12709],{"class":157},[147,169776,147300],{"class":5490},[147,169778,445],{"class":397},[147,169780,34261],{"class":448},[147,169782,12709],{"class":157},[147,169784,152175],{"class":5490},[147,169786,445],{"class":397},[147,169788,477],{"class":448},[147,169790,407],{"class":157},[19,169792,169793],{},"读取 JSON 文件：",[138,169795,169797],{"className":30652,"code":169796,"language":30654,"meta":143,"style":143},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[51,169798,169799,169805,169809,169839,169851,169855],{"__ignoreMap":143},[147,169800,169801,169803],{"class":149,"line":150},[147,169802,30666],{"class":397},[147,169804,147254],{"class":157},[147,169806,169807],{"class":149,"line":312},[147,169808,2674],{"emptyLinePlaceholder":324},[147,169810,169811,169813,169815,169817,169819,169821,169823,169825,169827,169829,169831,169833,169835,169837],{"class":149,"line":1454},[147,169812,108103],{"class":397},[147,169814,146954],{"class":448},[147,169816,401],{"class":157},[147,169818,151994],{"class":504},[147,169820,12709],{"class":157},[147,169822,146964],{"class":504},[147,169824,12709],{"class":157},[147,169826,146969],{"class":5490},[147,169828,445],{"class":397},[147,169830,146974],{"class":504},[147,169832,13988],{"class":157},[147,169834,31657],{"class":397},[147,169836,148316],{"class":5490},[147,169838,4013],{"class":157},[147,169840,169841,169843,169845,169847,169849],{"class":149,"line":1469},[147,169842,153200],{"class":157},[147,169844,445],{"class":397},[147,169846,148327],{"class":157},[147,169848,45628],{"class":5490},[147,169850,407],{"class":157},[147,169852,169853],{"class":149,"line":1475},[147,169854,2674],{"emptyLinePlaceholder":324},[147,169856,169857,169859],{"class":149,"line":1489},[147,169858,30689],{"class":448},[147,169860,165158],{"class":157},[14,169862,169864],{"id":169863},"_811-csv文件","8.11 CSV文件",[19,169866,169867],{},"CSV 是逗号分隔值，常用于表格数据。",[19,169869,169870],{},"写入 CSV：",[138,169872,169874],{"className":30652,"code":169873,"language":30654,"meta":143,"style":143},"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",[51,169875,169876,169883,169887,169895,169913,169929,169945,169949,169953,169993,170007],{"__ignoreMap":143},[147,169877,169878,169880],{"class":149,"line":150},[147,169879,30666],{"class":397},[147,169881,169882],{"class":157}," csv\n",[147,169884,169885],{"class":149,"line":312},[147,169886,2674],{"emptyLinePlaceholder":324},[147,169888,169889,169891,169893],{"class":149,"line":1454},[147,169890,159879],{"class":157},[147,169892,445],{"class":397},[147,169894,55720],{"class":157},[147,169896,169897,169900,169902,169904,169906,169908,169911],{"class":149,"line":1469},[147,169898,169899],{"class":157},"    [",[147,169901,73372],{"class":504},[147,169903,12709],{"class":157},[147,169905,73405],{"class":504},[147,169907,12709],{"class":157},[147,169909,169910],{"class":504},"\"成绩\"",[147,169912,88108],{"class":157},[147,169914,169915,169917,169919,169921,169923,169925,169927],{"class":149,"line":1475},[147,169916,169899],{"class":157},[147,169918,150051],{"class":504},[147,169920,12709],{"class":157},[147,169922,1049],{"class":448},[147,169924,12709],{"class":157},[147,169926,1388],{"class":448},[147,169928,88108],{"class":157},[147,169930,169931,169933,169935,169937,169939,169941,169943],{"class":149,"line":1489},[147,169932,169899],{"class":157},[147,169934,151099],{"class":504},[147,169936,12709],{"class":157},[147,169938,1024],{"class":448},[147,169940,12709],{"class":157},[147,169942,1210],{"class":448},[147,169944,88108],{"class":157},[147,169946,169947],{"class":149,"line":1495},[147,169948,33520],{"class":157},[147,169950,169951],{"class":149,"line":1586},[147,169952,2674],{"emptyLinePlaceholder":324},[147,169954,169955,169957,169959,169961,169964,169966,169968,169970,169972,169974,169976,169978,169981,169983,169985,169987,169989,169991],{"class":149,"line":1592},[147,169956,108103],{"class":397},[147,169958,146954],{"class":448},[147,169960,401],{"class":157},[147,169962,169963],{"class":504},"\"students.csv\"",[147,169965,12709],{"class":157},[147,169967,152139],{"class":504},[147,169969,12709],{"class":157},[147,169971,146969],{"class":5490},[147,169973,445],{"class":397},[147,169975,146974],{"class":504},[147,169977,12709],{"class":157},[147,169979,169980],{"class":5490},"newline",[147,169982,445],{"class":397},[147,169984,7926],{"class":504},[147,169986,13988],{"class":157},[147,169988,31657],{"class":397},[147,169990,148316],{"class":5490},[147,169992,4013],{"class":157},[147,169994,169995,169998,170000,170003,170005],{"class":149,"line":1604},[147,169996,169997],{"class":157},"    writer ",[147,169999,445],{"class":397},[147,170001,170002],{"class":157}," csv.writer(",[147,170004,45628],{"class":5490},[147,170006,407],{"class":157},[147,170008,170009],{"class":149,"line":1886},[147,170010,170011],{"class":157},"    writer.writerows(students)\n",[19,170013,170014],{},"读取 CSV：",[138,170016,170018],{"className":30652,"code":170017,"language":30654,"meta":143,"style":143},"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",[51,170019,170020,170026,170030,170060,170074,170086],{"__ignoreMap":143},[147,170021,170022,170024],{"class":149,"line":150},[147,170023,30666],{"class":397},[147,170025,169882],{"class":157},[147,170027,170028],{"class":149,"line":312},[147,170029,2674],{"emptyLinePlaceholder":324},[147,170031,170032,170034,170036,170038,170040,170042,170044,170046,170048,170050,170052,170054,170056,170058],{"class":149,"line":1454},[147,170033,108103],{"class":397},[147,170035,146954],{"class":448},[147,170037,401],{"class":157},[147,170039,169963],{"class":504},[147,170041,12709],{"class":157},[147,170043,146964],{"class":504},[147,170045,12709],{"class":157},[147,170047,146969],{"class":5490},[147,170049,445],{"class":397},[147,170051,146974],{"class":504},[147,170053,13988],{"class":157},[147,170055,31657],{"class":397},[147,170057,148316],{"class":5490},[147,170059,4013],{"class":157},[147,170061,170062,170065,170067,170070,170072],{"class":149,"line":1469},[147,170063,170064],{"class":157},"    reader ",[147,170066,445],{"class":397},[147,170068,170069],{"class":157}," csv.reader(",[147,170071,45628],{"class":5490},[147,170073,407],{"class":157},[147,170075,170076,170078,170081,170083],{"class":149,"line":1475},[147,170077,3475],{"class":397},[147,170079,170080],{"class":157}," row ",[147,170082,26317],{"class":397},[147,170084,170085],{"class":157}," reader:\n",[147,170087,170088,170090],{"class":149,"line":1489},[147,170089,32725],{"class":448},[147,170091,170092],{"class":157},"(row)\n",[19,170094,170095],{},"使用字典写入：",[138,170097,170099],{"className":30652,"code":170098,"language":30654,"meta":143,"style":143},"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",[51,170100,170101,170107,170111,170119,170147,170175,170179,170183,170221,170242,170263,170268],{"__ignoreMap":143},[147,170102,170103,170105],{"class":149,"line":150},[147,170104,30666],{"class":397},[147,170106,169882],{"class":157},[147,170108,170109],{"class":149,"line":312},[147,170110,2674],{"emptyLinePlaceholder":324},[147,170112,170113,170115,170117],{"class":149,"line":1454},[147,170114,159879],{"class":157},[147,170116,445],{"class":397},[147,170118,55720],{"class":157},[147,170120,170121,170123,170125,170127,170129,170131,170133,170135,170137,170139,170141,170143,170145],{"class":149,"line":1469},[147,170122,148548],{"class":157},[147,170124,62952],{"class":504},[147,170126,51710],{"class":157},[147,170128,150051],{"class":504},[147,170130,12709],{"class":157},[147,170132,69397],{"class":504},[147,170134,51710],{"class":157},[147,170136,1049],{"class":448},[147,170138,12709],{"class":157},[147,170140,151635],{"class":504},[147,170142,51710],{"class":157},[147,170144,1388],{"class":448},[147,170146,5204],{"class":157},[147,170148,170149,170151,170153,170155,170157,170159,170161,170163,170165,170167,170169,170171,170173],{"class":149,"line":1475},[147,170150,148548],{"class":157},[147,170152,62952],{"class":504},[147,170154,51710],{"class":157},[147,170156,151099],{"class":504},[147,170158,12709],{"class":157},[147,170160,69397],{"class":504},[147,170162,51710],{"class":157},[147,170164,1024],{"class":448},[147,170166,12709],{"class":157},[147,170168,151635],{"class":504},[147,170170,51710],{"class":157},[147,170172,1210],{"class":448},[147,170174,5204],{"class":157},[147,170176,170177],{"class":149,"line":1489},[147,170178,33520],{"class":157},[147,170180,170181],{"class":149,"line":1495},[147,170182,2674],{"emptyLinePlaceholder":324},[147,170184,170185,170187,170189,170191,170193,170195,170197,170199,170201,170203,170205,170207,170209,170211,170213,170215,170217,170219],{"class":149,"line":1586},[147,170186,108103],{"class":397},[147,170188,146954],{"class":448},[147,170190,401],{"class":157},[147,170192,169963],{"class":504},[147,170194,12709],{"class":157},[147,170196,152139],{"class":504},[147,170198,12709],{"class":157},[147,170200,146969],{"class":5490},[147,170202,445],{"class":397},[147,170204,146974],{"class":504},[147,170206,12709],{"class":157},[147,170208,169980],{"class":5490},[147,170210,445],{"class":397},[147,170212,7926],{"class":504},[147,170214,13988],{"class":157},[147,170216,31657],{"class":397},[147,170218,148316],{"class":5490},[147,170220,4013],{"class":157},[147,170222,170223,170226,170228,170230,170232,170234,170236,170238,170240],{"class":149,"line":1592},[147,170224,170225],{"class":157},"    fieldnames ",[147,170227,445],{"class":397},[147,170229,52499],{"class":157},[147,170231,62952],{"class":504},[147,170233,12709],{"class":157},[147,170235,69397],{"class":504},[147,170237,12709],{"class":157},[147,170239,151635],{"class":504},[147,170241,33520],{"class":157},[147,170243,170244,170246,170248,170251,170253,170255,170258,170260],{"class":149,"line":1604},[147,170245,169997],{"class":157},[147,170247,445],{"class":397},[147,170249,170250],{"class":157}," csv.DictWriter(",[147,170252,45628],{"class":5490},[147,170254,12709],{"class":157},[147,170256,170257],{"class":5490},"fieldnames",[147,170259,445],{"class":397},[147,170261,170262],{"class":157},"fieldnames)\n",[147,170264,170265],{"class":149,"line":1886},[147,170266,170267],{"class":157},"    writer.writeheader()\n",[147,170269,170270],{"class":149,"line":1891},[147,170271,170011],{"class":157},[14,170273,170275],{"id":170274},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,170277,123562],{},[350,170279,170280,170283,170286],{},[353,170281,170282],{},"读取文本文件。",[353,170284,170285],{},"统计每个单词出现次数。",[353,170287,170288],{},"输出出现次数最多的前 10 个单词。",[19,170290,10309],{},[138,170292,170294],{"className":30652,"code":170293,"language":30654,"meta":143,"style":143},"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",[51,170295,170296,170306,170310,170323,170339,170343,170353,170362,170366,170378,170398,170407,170411,170429,170433,170463,170467,170483],{"__ignoreMap":143},[147,170297,170298,170300,170302,170304],{"class":149,"line":150},[147,170299,31011],{"class":397},[147,170301,108581],{"class":157},[147,170303,30666],{"class":397},[147,170305,108586],{"class":157},[147,170307,170308],{"class":149,"line":312},[147,170309,2674],{"emptyLinePlaceholder":324},[147,170311,170312,170314,170316,170318,170321],{"class":149,"line":1454},[147,170313,168474],{"class":157},[147,170315,445],{"class":397},[147,170317,108815],{"class":157},[147,170319,170320],{"class":504},"\"article.txt\"",[147,170322,407],{"class":157},[147,170324,170325,170327,170329,170331,170333,170335,170337],{"class":149,"line":1469},[147,170326,168657],{"class":157},[147,170328,445],{"class":397},[147,170330,169534],{"class":157},[147,170332,146969],{"class":5490},[147,170334,445],{"class":397},[147,170336,146974],{"class":504},[147,170338,407],{"class":157},[147,170340,170341],{"class":149,"line":1475},[147,170342,2674],{"emptyLinePlaceholder":324},[147,170344,170345,170348,170350],{"class":149,"line":1489},[147,170346,170347],{"class":157},"words ",[147,170349,445],{"class":397},[147,170351,170352],{"class":157}," content.lower().split()\n",[147,170354,170355,170358,170360],{"class":149,"line":1495},[147,170356,170357],{"class":157},"counter ",[147,170359,445],{"class":397},[147,170361,88140],{"class":157},[147,170363,170364],{"class":149,"line":1586},[147,170365,2674],{"emptyLinePlaceholder":324},[147,170367,170368,170370,170373,170375],{"class":149,"line":1592},[147,170369,3299],{"class":397},[147,170371,170372],{"class":157}," word ",[147,170374,26317],{"class":397},[147,170376,170377],{"class":157}," words:\n",[147,170379,170380,170383,170385,170388,170391,170393,170396],{"class":149,"line":1604},[147,170381,170382],{"class":157},"    word ",[147,170384,445],{"class":397},[147,170386,170387],{"class":157}," word.strip(",[147,170389,170390],{"class":504},"\".,!?;:",[147,170392,156658],{"class":448},[147,170394,170395],{"class":504},"'()[]\"",[147,170397,407],{"class":157},[147,170399,170400,170402,170404],{"class":149,"line":1886},[147,170401,3375],{"class":397},[147,170403,39204],{"class":397},[147,170405,170406],{"class":157}," word:\n",[147,170408,170409],{"class":149,"line":1891},[147,170410,148675],{"class":397},[147,170412,170413,170416,170418,170421,170423,170425,170427],{"class":149,"line":1897},[147,170414,170415],{"class":157},"    counter[word] ",[147,170417,445],{"class":397},[147,170419,170420],{"class":157}," counter.get(word, ",[147,170422,590],{"class":448},[147,170424,13988],{"class":157},[147,170426,880],{"class":397},[147,170428,55972],{"class":448},[147,170430,170431],{"class":149,"line":1902},[147,170432,2674],{"emptyLinePlaceholder":324},[147,170434,170435,170438,170440,170442,170445,170447,170449,170451,170453,170455,170457,170459,170461],{"class":149,"line":1916},[147,170436,170437],{"class":157},"items ",[147,170439,445],{"class":397},[147,170441,163767],{"class":448},[147,170443,170444],{"class":157},"(counter.items(), ",[147,170446,154109],{"class":5490},[147,170448,154112],{"class":397},[147,170450,154115],{"class":157},[147,170452,616],{"class":448},[147,170454,112472],{"class":157},[147,170456,163691],{"class":5490},[147,170458,445],{"class":397},[147,170460,31750],{"class":448},[147,170462,407],{"class":157},[147,170464,170465],{"class":149,"line":1921},[147,170466,2674],{"emptyLinePlaceholder":324},[147,170468,170469,170471,170474,170476,170479,170481],{"class":149,"line":1927},[147,170470,3299],{"class":397},[147,170472,170473],{"class":157}," word, count ",[147,170475,26317],{"class":397},[147,170477,170478],{"class":157}," items[:",[147,170480,845],{"class":448},[147,170482,165918],{"class":157},[147,170484,170485,170487],{"class":149,"line":1948},[147,170486,31573],{"class":448},[147,170488,170489],{"class":157},"(word, count)\n",[14,170491,170493],{"id":170492},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[138,170495,170497],{"className":30652,"code":170496,"language":30654,"meta":143,"style":143},"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",[51,170498,170499,170505,170515,170519,170531,170535,170539,170547,170557,170563,170567,170597,170607,170611,170615,170623,170653,170677,170681,170685,170693,170722,170727],{"__ignoreMap":143},[147,170500,170501,170503],{"class":149,"line":150},[147,170502,30666],{"class":397},[147,170504,147254],{"class":157},[147,170506,170507,170509,170511,170513],{"class":149,"line":312},[147,170508,31011],{"class":397},[147,170510,108581],{"class":157},[147,170512,30666],{"class":397},[147,170514,108586],{"class":157},[147,170516,170517],{"class":149,"line":1454},[147,170518,2674],{"emptyLinePlaceholder":324},[147,170520,170521,170523,170525,170527,170529],{"class":149,"line":1469},[147,170522,151987],{"class":448},[147,170524,13838],{"class":397},[147,170526,108815],{"class":157},[147,170528,151994],{"class":504},[147,170530,407],{"class":157},[147,170532,170533],{"class":149,"line":1475},[147,170534,2674],{"emptyLinePlaceholder":324},[147,170536,170537],{"class":149,"line":1489},[147,170538,2674],{"emptyLinePlaceholder":324},[147,170540,170541,170543,170545],{"class":149,"line":1495},[147,170542,32221],{"class":397},[147,170544,152011],{"class":2237},[147,170546,32227],{"class":157},[147,170548,170549,170551,170553,170555],{"class":149,"line":1586},[147,170550,3375],{"class":397},[147,170552,39204],{"class":397},[147,170554,152022],{"class":448},[147,170556,152025],{"class":157},[147,170558,170559,170561],{"class":149,"line":1592},[147,170560,15025],{"class":397},[147,170562,52111],{"class":157},[147,170564,170565],{"class":149,"line":1604},[147,170566,2674],{"emptyLinePlaceholder":324},[147,170568,170569,170571,170573,170575,170577,170579,170581,170583,170585,170587,170589,170591,170593,170595],{"class":149,"line":1886},[147,170570,34452],{"class":397},[147,170572,146954],{"class":448},[147,170574,401],{"class":157},[147,170576,151987],{"class":448},[147,170578,12709],{"class":157},[147,170580,146964],{"class":504},[147,170582,12709],{"class":157},[147,170584,146969],{"class":5490},[147,170586,445],{"class":397},[147,170588,146974],{"class":504},[147,170590,13988],{"class":157},[147,170592,31657],{"class":397},[147,170594,148316],{"class":5490},[147,170596,4013],{"class":157},[147,170598,170599,170601,170603,170605],{"class":149,"line":1891},[147,170600,15025],{"class":397},[147,170602,148327],{"class":157},[147,170604,45628],{"class":5490},[147,170606,407],{"class":157},[147,170608,170609],{"class":149,"line":1897},[147,170610,2674],{"emptyLinePlaceholder":324},[147,170612,170613],{"class":149,"line":1902},[147,170614,2674],{"emptyLinePlaceholder":324},[147,170616,170617,170619,170621],{"class":149,"line":1916},[147,170618,32221],{"class":397},[147,170620,152121],{"class":2237},[147,170622,152124],{"class":157},[147,170624,170625,170627,170629,170631,170633,170635,170637,170639,170641,170643,170645,170647,170649,170651],{"class":149,"line":1921},[147,170626,34452],{"class":397},[147,170628,146954],{"class":448},[147,170630,401],{"class":157},[147,170632,151987],{"class":448},[147,170634,12709],{"class":157},[147,170636,152139],{"class":504},[147,170638,12709],{"class":157},[147,170640,146969],{"class":5490},[147,170642,445],{"class":397},[147,170644,146974],{"class":504},[147,170646,13988],{"class":157},[147,170648,31657],{"class":397},[147,170650,148316],{"class":5490},[147,170652,4013],{"class":157},[147,170654,170655,170657,170659,170661,170663,170665,170667,170669,170671,170673,170675],{"class":149,"line":1927},[147,170656,152160],{"class":157},[147,170658,45628],{"class":5490},[147,170660,12709],{"class":157},[147,170662,147300],{"class":5490},[147,170664,445],{"class":397},[147,170666,34261],{"class":448},[147,170668,12709],{"class":157},[147,170670,152175],{"class":5490},[147,170672,445],{"class":397},[147,170674,477],{"class":448},[147,170676,407],{"class":157},[147,170678,170679],{"class":149,"line":1948},[147,170680,2674],{"emptyLinePlaceholder":324},[147,170682,170683],{"class":149,"line":1953},[147,170684,2674],{"emptyLinePlaceholder":324},[147,170686,170687,170689,170691],{"class":149,"line":1967},[147,170688,159879],{"class":157},[147,170690,445],{"class":397},[147,170692,153205],{"class":157},[147,170694,170695,170698,170700,170702,170704,170706,170708,170710,170712,170714,170716,170718,170720],{"class":149,"line":1972},[147,170696,170697],{"class":157},"students.append({",[147,170699,62952],{"class":504},[147,170701,51710],{"class":157},[147,170703,150051],{"class":504},[147,170705,12709],{"class":157},[147,170707,69397],{"class":504},[147,170709,51710],{"class":157},[147,170711,1049],{"class":448},[147,170713,12709],{"class":157},[147,170715,151635],{"class":504},[147,170717,51710],{"class":157},[147,170719,1388],{"class":448},[147,170721,165315],{"class":157},[147,170723,170724],{"class":149,"line":2001},[147,170725,170726],{"class":157},"save_students(students)\n",[147,170728,170729,170731,170733,170736],{"class":149,"line":2006},[147,170730,30689],{"class":448},[147,170732,401],{"class":157},[147,170734,170735],{"class":504},"\"保存成功\"",[147,170737,407],{"class":157},[14,170739,170741],{"id":170740},"_814-易错点","8.14 易错点",[350,170743,170744,170748,170754,170759,170766,170773],{},[353,170745,170746,169007],{},[51,170747,1194],{},[353,170749,170750,170751,28659],{},"读写中文要指定 ",[51,170752,170753],{},"encoding=\"utf-8\"",[353,170755,170756,170757,28659],{},"打开文件后要关闭，推荐使用 ",[51,170758,108103],{},[353,170760,170761,170762,170765],{},"读取大文件不要直接 ",[51,170763,170764],{},"read()"," 全部内容。",[353,170767,170768,170769,170772],{},"Windows 写 CSV 时建议加 ",[51,170770,170771],{},"newline=\"\"","，避免空行。",[353,170774,170775],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,170777,170779],{"id":170778},"_815-本章练习","8.15 本章练习",[350,170781,170782,170789,170794,170797,170800],{},[353,170783,170784,170785,170788],{},"写入一个 ",[51,170786,170787],{},"students.txt","，每行保存一个学生姓名。",[353,170790,104625,170791,170793],{},[51,170792,170787],{}," 并输出所有学生。",[353,170795,170796],{},"把学生列表保存为 JSON 文件。",[353,170798,170799],{},"从 JSON 文件读取学生数据，计算平均分。",[353,170801,170802,170803,170806,170807,170810],{},"写一个日志函数 ",[51,170804,170805],{},"write_log(message)","，每次调用向 ",[51,170808,170809],{},"app.log"," 追加一行。",[308,170812,170813],{},"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":143,"searchDepth":312,"depth":312,"links":170815},[170816,170817,170821,170822,170828,170829,170830,170831,170832,170833,170834,170835,170836,170837,170838],{"id":168327,"depth":312,"text":168328},{"id":168368,"depth":312,"text":168369,"children":170818},[170819,170820],{"id":168372,"depth":1454,"text":168373},{"id":168406,"depth":1454,"text":168407},{"id":168520,"depth":312,"text":168521},{"id":168613,"depth":312,"text":168614,"children":170823},[170824,170825,170826,170827],{"id":168617,"depth":1454,"text":168618},{"id":168704,"depth":1454,"text":168705},{"id":168774,"depth":1454,"text":168775},{"id":168868,"depth":1454,"text":168869},{"id":168938,"depth":312,"text":168939},{"id":169001,"depth":312,"text":169002},{"id":169162,"depth":312,"text":169163},{"id":169225,"depth":312,"text":169226},{"id":169341,"depth":312,"text":169342},{"id":169551,"depth":312,"text":169552},{"id":169863,"depth":312,"text":169864},{"id":170274,"depth":312,"text":170275},{"id":170492,"depth":312,"text":170493},{"id":170740,"depth":312,"text":170741},{"id":170778,"depth":312,"text":170779},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168319,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170845,"title":170846,"body":170847,"description":321,"extension":322,"meta":173033,"navigation":324,"path":173034,"seo":173035,"stem":173036,"__hash__":173037},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170848,"toc":173000},[170849,170852,170856,170859,170862,170954,170956,170975,170980,170984,170987,170990,171019,171026,171029,171033,171036,171065,171067,171119,171125,171178,171182,171280,171283,171350,171354,171411,171413,171419,171423,171428,171434,171525,171530,171534,171537,171615,171618,171656,171660,171778,171781,171785,171788,171833,171836,171840,171845,171851,171901,171904,171935,171939,171943,171973,171977,172012,172016,172051,172091,172095,172111,172114,172118,172122,172201,172205,172246,172250,172305,172309,172343,172347,172377,172386,172393,172399,172456,172459,172467,172470,172474,172481,172484,172490,172493,172510,172515,172519,172525,172538,172541,172578,172581,172592,172595,172609,172612,172626,172630,172637,172670,172673,172675,172681,172684,172688,172690,172696,172701,172874,172878,172941,172945,172969,172973,172997],[10,170850,170846],{"id":170851},"_9-异常模块与包",[14,170853,170855],{"id":170854},"_91-什么是异常","9.1 什么是异常",[19,170857,170858],{},"异常是程序运行过程中出现的错误。",[19,170860,170861],{},"常见异常：",[537,170863,170864,170873],{},[540,170865,170866],{},[543,170867,170868,170871],{},[546,170869,170870],{},"异常",[546,170872,26143],{},[583,170874,170875,170885,170895,170904,170914,170924,170934,170944],{},[543,170876,170877,170882],{},[588,170878,170879],{},[51,170880,170881],{},"NameError",[588,170883,170884],{},"使用了未定义变量",[543,170886,170887,170892],{},[588,170888,170889],{},[51,170890,170891],{},"TypeError",[588,170893,170894],{},"类型不匹配",[543,170896,170897,170901],{},[588,170898,170899],{},[51,170900,154997],{},[588,170902,170903],{},"值不合法",[543,170905,170906,170911],{},[588,170907,170908],{},[51,170909,170910],{},"IndexError",[588,170912,170913],{},"列表索引越界",[543,170915,170916,170921],{},[588,170917,170918],{},[51,170919,170920],{},"KeyError",[588,170922,170923],{},"字典 key 不存在",[543,170925,170926,170931],{},[588,170927,170928],{},[51,170929,170930],{},"FileNotFoundError",[588,170932,170933],{},"文件不存在",[543,170935,170936,170941],{},[588,170937,170938],{},[51,170939,170940],{},"ZeroDivisionError",[588,170942,170943],{},"除数为 0",[543,170945,170946,170951],{},[588,170947,170948],{},[51,170949,170950],{},"ImportError",[588,170952,170953],{},"导入失败",[19,170955,15408],{},[138,170957,170959],{"className":30652,"code":170958,"language":30654,"meta":143,"style":143},"num = int(\"abc\")\n",[51,170960,170961],{"__ignoreMap":143},[147,170962,170963,170965,170967,170969,170971,170973],{"class":149,"line":150},[147,170964,155950],{"class":157},[147,170966,445],{"class":397},[147,170968,2656],{"class":448},[147,170970,401],{"class":157},[147,170972,156043],{"class":504},[147,170974,407],{"class":157},[19,170976,170977,170978,28659],{},"会触发 ",[51,170979,154997],{},[14,170981,170983],{"id":170982},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,170985,170986],{},"如果不处理异常，程序会直接终止。",[19,170988,170989],{},"例如用户输入年龄：",[138,170991,170993],{"className":30652,"code":170992,"language":30654,"meta":143,"style":143},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[51,170994,170995,171013],{"__ignoreMap":143},[147,170996,170997,170999,171001,171003,171005,171007,171009,171011],{"class":149,"line":150},[147,170998,146709],{"class":157},[147,171000,445],{"class":397},[147,171002,2656],{"class":448},[147,171004,401],{"class":157},[147,171006,54094],{"class":448},[147,171008,401],{"class":157},[147,171010,152557],{"class":504},[147,171012,30771],{"class":157},[147,171014,171015,171017],{"class":149,"line":312},[147,171016,30689],{"class":448},[147,171018,155924],{"class":157},[19,171020,171021,171022,171025],{},"用户输入 ",[51,171023,171024],{},"abc","，程序就会报错退出。",[19,171027,171028],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,171030,171032],{"id":171031},"_93-try-except","9.3 try except",[19,171034,171035],{},"基础语法：",[138,171037,171039],{"className":30652,"code":171038,"language":30654,"meta":143,"style":143},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[51,171040,171041,171048,171053,171060],{"__ignoreMap":143},[147,171042,171043,171046],{"class":149,"line":150},[147,171044,171045],{"class":397},"try",[147,171047,4013],{"class":157},[147,171049,171050],{"class":149,"line":312},[147,171051,171052],{"class":157},"    可能出错的代码\n",[147,171054,171055,171058],{"class":149,"line":1454},[147,171056,171057],{"class":397},"except",[147,171059,4013],{"class":157},[147,171061,171062],{"class":149,"line":1469},[147,171063,171064],{"class":157},"    出错后的处理代码\n",[19,171066,15408],{},[138,171068,171070],{"className":30652,"code":171069,"language":30654,"meta":143,"style":143},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[51,171071,171072,171078,171096,171102,171108],{"__ignoreMap":143},[147,171073,171074,171076],{"class":149,"line":150},[147,171075,171045],{"class":397},[147,171077,4013],{"class":157},[147,171079,171080,171082,171084,171086,171088,171090,171092,171094],{"class":149,"line":312},[147,171081,152549],{"class":157},[147,171083,445],{"class":397},[147,171085,2656],{"class":448},[147,171087,401],{"class":157},[147,171089,54094],{"class":448},[147,171091,401],{"class":157},[147,171093,152557],{"class":504},[147,171095,30771],{"class":157},[147,171097,171098,171100],{"class":149,"line":1454},[147,171099,31573],{"class":448},[147,171101,155924],{"class":157},[147,171103,171104,171106],{"class":149,"line":1469},[147,171105,171057],{"class":397},[147,171107,4013],{"class":157},[147,171109,171110,171112,171114,171117],{"class":149,"line":1475},[147,171111,31573],{"class":448},[147,171113,401],{"class":157},[147,171115,171116],{"class":504},"\"年龄必须是数字\"",[147,171118,407],{"class":157},[19,171120,171121,171122,171124],{},"不建议裸写 ",[51,171123,171057],{},"，最好指定异常类型。",[138,171126,171128],{"className":30652,"code":171127,"language":30654,"meta":143,"style":143},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[51,171129,171130,171136,171154,171160,171168],{"__ignoreMap":143},[147,171131,171132,171134],{"class":149,"line":150},[147,171133,171045],{"class":397},[147,171135,4013],{"class":157},[147,171137,171138,171140,171142,171144,171146,171148,171150,171152],{"class":149,"line":312},[147,171139,152549],{"class":157},[147,171141,445],{"class":397},[147,171143,2656],{"class":448},[147,171145,401],{"class":157},[147,171147,54094],{"class":448},[147,171149,401],{"class":157},[147,171151,152557],{"class":504},[147,171153,30771],{"class":157},[147,171155,171156,171158],{"class":149,"line":1454},[147,171157,31573],{"class":448},[147,171159,155924],{"class":157},[147,171161,171162,171164,171166],{"class":149,"line":1469},[147,171163,171057],{"class":397},[147,171165,152389],{"class":448},[147,171167,4013],{"class":157},[147,171169,171170,171172,171174,171176],{"class":149,"line":1475},[147,171171,31573],{"class":448},[147,171173,401],{"class":157},[147,171175,171116],{"class":504},[147,171177,407],{"class":157},[14,171179,171181],{"id":171180},"_94-捕获多个异常","9.4 捕获多个异常",[138,171183,171185],{"className":30652,"code":171184,"language":30654,"meta":143,"style":143},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[51,171186,171187,171193,171214,171234,171241,171249,171260,171269],{"__ignoreMap":143},[147,171188,171189,171191],{"class":149,"line":150},[147,171190,171045],{"class":397},[147,171192,4013],{"class":157},[147,171194,171195,171198,171200,171202,171204,171206,171208,171210,171212],{"class":149,"line":312},[147,171196,171197],{"class":157},"    nums ",[147,171199,445],{"class":397},[147,171201,52499],{"class":157},[147,171203,616],{"class":448},[147,171205,12709],{"class":157},[147,171207,477],{"class":448},[147,171209,12709],{"class":157},[147,171211,471],{"class":448},[147,171213,33520],{"class":157},[147,171215,171216,171219,171221,171223,171225,171227,171229,171232],{"class":149,"line":1454},[147,171217,171218],{"class":157},"    index ",[147,171220,445],{"class":397},[147,171222,2656],{"class":448},[147,171224,401],{"class":157},[147,171226,54094],{"class":448},[147,171228,401],{"class":157},[147,171230,171231],{"class":504},"\"请输入索引:\"",[147,171233,30771],{"class":157},[147,171235,171236,171238],{"class":149,"line":1469},[147,171237,31573],{"class":448},[147,171239,171240],{"class":157},"(nums[index])\n",[147,171242,171243,171245,171247],{"class":149,"line":1475},[147,171244,171057],{"class":397},[147,171246,152389],{"class":448},[147,171248,4013],{"class":157},[147,171250,171251,171253,171255,171258],{"class":149,"line":1489},[147,171252,31573],{"class":448},[147,171254,401],{"class":157},[147,171256,171257],{"class":504},"\"索引必须是整数\"",[147,171259,407],{"class":157},[147,171261,171262,171264,171267],{"class":149,"line":1495},[147,171263,171057],{"class":397},[147,171265,171266],{"class":448}," IndexError",[147,171268,4013],{"class":157},[147,171270,171271,171273,171275,171278],{"class":149,"line":1586},[147,171272,31573],{"class":448},[147,171274,401],{"class":157},[147,171276,171277],{"class":504},"\"索引越界\"",[147,171279,407],{"class":157},[19,171281,171282],{},"多个异常使用相同处理逻辑：",[138,171284,171286],{"className":30652,"code":171285,"language":30654,"meta":143,"style":143},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[51,171287,171288,171294,171312,171325,171339],{"__ignoreMap":143},[147,171289,171290,171292],{"class":149,"line":150},[147,171291,171045],{"class":397},[147,171293,4013],{"class":157},[147,171295,171296,171298,171300,171302,171304,171306,171308,171310],{"class":149,"line":312},[147,171297,45867],{"class":157},[147,171299,445],{"class":397},[147,171301,2656],{"class":448},[147,171303,401],{"class":157},[147,171305,54094],{"class":448},[147,171307,401],{"class":157},[147,171309,155959],{"class":504},[147,171311,30771],{"class":157},[147,171313,171314,171316,171318,171320,171322],{"class":149,"line":1454},[147,171315,31573],{"class":448},[147,171317,401],{"class":157},[147,171319,845],{"class":448},[147,171321,156209],{"class":397},[147,171323,171324],{"class":157}," num)\n",[147,171326,171327,171329,171331,171333,171335,171337],{"class":149,"line":1469},[147,171328,171057],{"class":397},[147,171330,1932],{"class":157},[147,171332,154997],{"class":448},[147,171334,12709],{"class":157},[147,171336,170940],{"class":448},[147,171338,31060],{"class":157},[147,171340,171341,171343,171345,171348],{"class":149,"line":1475},[147,171342,31573],{"class":448},[147,171344,401],{"class":157},[147,171346,171347],{"class":504},"\"输入不合法\"",[147,171349,407],{"class":157},[14,171351,171353],{"id":171352},"_95-获取异常信息","9.5 获取异常信息",[138,171355,171357],{"className":30652,"code":171356,"language":30654,"meta":143,"style":143},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[51,171358,171359,171365,171379,171390],{"__ignoreMap":143},[147,171360,171361,171363],{"class":149,"line":150},[147,171362,171045],{"class":397},[147,171364,4013],{"class":157},[147,171366,171367,171369,171371,171373,171375,171377],{"class":149,"line":312},[147,171368,45867],{"class":157},[147,171370,445],{"class":397},[147,171372,2656],{"class":448},[147,171374,401],{"class":157},[147,171376,156043],{"class":504},[147,171378,407],{"class":157},[147,171380,171381,171383,171385,171387],{"class":149,"line":1454},[147,171382,171057],{"class":397},[147,171384,152389],{"class":448},[147,171386,64877],{"class":397},[147,171388,171389],{"class":157}," e:\n",[147,171391,171392,171394,171396,171398,171401,171403,171405,171407,171409],{"class":149,"line":1469},[147,171393,31573],{"class":448},[147,171395,401],{"class":157},[147,171397,452],{"class":397},[147,171399,171400],{"class":504},"\"出错了:",[147,171402,1295],{"class":448},[147,171404,474],{"class":157},[147,171406,1345],{"class":448},[147,171408,650],{"class":504},[147,171410,407],{"class":157},[19,171412,146620],{},[138,171414,171417],{"className":171415,"code":171416,"language":5461,"meta":143},[5459],"出错了:invalid literal for int() with base 10: 'abc'\n",[51,171418,171416],{"__ignoreMap":143},[14,171420,171422],{"id":171421},"_96-else和finally","9.6 else和finally",[19,171424,171425,171427],{},[51,171426,1975],{},"：没有异常时执行。",[19,171429,171430,171433],{},[51,171431,171432],{},"finally","：无论是否异常都会执行。",[138,171435,171437],{"className":30652,"code":171436,"language":30654,"meta":143,"style":143},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[51,171438,171439,171445,171463,171471,171481,171487,171508,171514],{"__ignoreMap":143},[147,171440,171441,171443],{"class":149,"line":150},[147,171442,171045],{"class":397},[147,171444,4013],{"class":157},[147,171446,171447,171449,171451,171453,171455,171457,171459,171461],{"class":149,"line":312},[147,171448,45867],{"class":157},[147,171450,445],{"class":397},[147,171452,2656],{"class":448},[147,171454,401],{"class":157},[147,171456,54094],{"class":448},[147,171458,401],{"class":157},[147,171460,155959],{"class":504},[147,171462,30771],{"class":157},[147,171464,171465,171467,171469],{"class":149,"line":1454},[147,171466,171057],{"class":397},[147,171468,152389],{"class":448},[147,171470,4013],{"class":157},[147,171472,171473,171475,171477,171479],{"class":149,"line":1469},[147,171474,31573],{"class":448},[147,171476,401],{"class":157},[147,171478,153377],{"class":504},[147,171480,407],{"class":157},[147,171482,171483,171485],{"class":149,"line":1475},[147,171484,1975],{"class":397},[147,171486,4013],{"class":157},[147,171488,171489,171491,171493,171495,171498,171500,171502,171504,171506],{"class":149,"line":1489},[147,171490,31573],{"class":448},[147,171492,401],{"class":157},[147,171494,452],{"class":397},[147,171496,171497],{"class":504},"\"输入正确:",[147,171499,1295],{"class":448},[147,171501,1939],{"class":157},[147,171503,1345],{"class":448},[147,171505,650],{"class":504},[147,171507,407],{"class":157},[147,171509,171510,171512],{"class":149,"line":1495},[147,171511,171432],{"class":397},[147,171513,4013],{"class":157},[147,171515,171516,171518,171520,171523],{"class":149,"line":1586},[147,171517,31573],{"class":448},[147,171519,401],{"class":157},[147,171521,171522],{"class":504},"\"程序结束\"",[147,171524,407],{"class":157},[19,171526,171527,171529],{},[51,171528,171432],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,171531,171533],{"id":171532},"_97-抛出异常","9.7 抛出异常",[19,171535,171536],{},"程序可以主动抛出异常。",[138,171538,171540],{"className":30652,"code":171539,"language":30654,"meta":143,"style":143},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[51,171541,171542,171551,171563,171576,171596,171600,171604],{"__ignoreMap":143},[147,171543,171544,171546,171549],{"class":149,"line":150},[147,171545,32221],{"class":397},[147,171547,171548],{"class":2237}," set_age",[147,171550,161578],{"class":157},[147,171552,171553,171555,171557,171559,171561],{"class":149,"line":312},[147,171554,3375],{"class":397},[147,171556,15980],{"class":157},[147,171558,1309],{"class":397},[147,171560,4367],{"class":448},[147,171562,4013],{"class":157},[147,171564,171565,171567,171569,171571,171574],{"class":149,"line":1454},[147,171566,103702],{"class":397},[147,171568,152389],{"class":448},[147,171570,401],{"class":157},[147,171572,171573],{"class":504},"\"年龄不能为负数\"",[147,171575,407],{"class":157},[147,171577,171578,171580,171582,171584,171586,171588,171590,171592,171594],{"class":149,"line":1469},[147,171579,31573],{"class":448},[147,171581,401],{"class":157},[147,171583,452],{"class":397},[147,171585,162146],{"class":504},[147,171587,1295],{"class":448},[147,171589,70494],{"class":157},[147,171591,1345],{"class":448},[147,171593,650],{"class":504},[147,171595,407],{"class":157},[147,171597,171598],{"class":149,"line":1475},[147,171599,2674],{"emptyLinePlaceholder":324},[147,171601,171602],{"class":149,"line":1489},[147,171603,2674],{"emptyLinePlaceholder":324},[147,171605,171606,171609,171611,171613],{"class":149,"line":1495},[147,171607,171608],{"class":157},"set_age(",[147,171610,931],{"class":397},[147,171612,616],{"class":448},[147,171614,407],{"class":157},[19,171616,171617],{},"调用者可以捕获：",[138,171619,171621],{"className":30652,"code":171620,"language":30654,"meta":143,"style":143},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[51,171622,171623,171629,171640,171650],{"__ignoreMap":143},[147,171624,171625,171627],{"class":149,"line":150},[147,171626,171045],{"class":397},[147,171628,4013],{"class":157},[147,171630,171631,171634,171636,171638],{"class":149,"line":312},[147,171632,171633],{"class":157},"    set_age(",[147,171635,931],{"class":397},[147,171637,616],{"class":448},[147,171639,407],{"class":157},[147,171641,171642,171644,171646,171648],{"class":149,"line":1454},[147,171643,171057],{"class":397},[147,171645,152389],{"class":448},[147,171647,64877],{"class":397},[147,171649,171389],{"class":157},[147,171651,171652,171654],{"class":149,"line":1469},[147,171653,31573],{"class":448},[147,171655,67272],{"class":157},[14,171657,171659],{"id":171658},"_98-自定义异常","9.8 自定义异常",[138,171661,171663],{"className":30652,"code":171662,"language":30654,"meta":143,"style":143},"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",[51,171664,171665,171679,171683,171687,171691,171699,171709,171720,171730,171734,171738,171744,171761,171772],{"__ignoreMap":143},[147,171666,171667,171669,171672,171674,171677],{"class":149,"line":150},[147,171668,14967],{"class":397},[147,171670,171671],{"class":2237}," BalanceNotEnoughError",[147,171673,401],{"class":157},[147,171675,171676],{"class":448},"Exception",[147,171678,31060],{"class":157},[147,171680,171681],{"class":149,"line":312},[147,171682,149700],{"class":397},[147,171684,171685],{"class":149,"line":1454},[147,171686,2674],{"emptyLinePlaceholder":324},[147,171688,171689],{"class":149,"line":1469},[147,171690,2674],{"emptyLinePlaceholder":324},[147,171692,171693,171695,171697],{"class":149,"line":1475},[147,171694,32221],{"class":397},[147,171696,150349],{"class":2237},[147,171698,162975],{"class":157},[147,171700,171701,171703,171705,171707],{"class":149,"line":1489},[147,171702,3375],{"class":397},[147,171704,150305],{"class":157},[147,171706,1359],{"class":397},[147,171708,162752],{"class":157},[147,171710,171711,171713,171716,171718],{"class":149,"line":1495},[147,171712,103702],{"class":397},[147,171714,171715],{"class":157}," BalanceNotEnoughError(",[147,171717,150400],{"class":504},[147,171719,407],{"class":157},[147,171721,171722,171724,171726,171728],{"class":149,"line":1586},[147,171723,4364],{"class":397},[147,171725,162982],{"class":157},[147,171727,931],{"class":397},[147,171729,150338],{"class":157},[147,171731,171732],{"class":149,"line":1592},[147,171733,2674],{"emptyLinePlaceholder":324},[147,171735,171736],{"class":149,"line":1604},[147,171737,2674],{"emptyLinePlaceholder":324},[147,171739,171740,171742],{"class":149,"line":1886},[147,171741,171045],{"class":397},[147,171743,4013],{"class":157},[147,171745,171746,171748,171750,171753,171755,171757,171759],{"class":149,"line":1891},[147,171747,162653],{"class":157},[147,171749,445],{"class":397},[147,171751,171752],{"class":157}," withdraw(",[147,171754,710],{"class":448},[147,171756,12709],{"class":157},[147,171758,1996],{"class":448},[147,171760,407],{"class":157},[147,171762,171763,171765,171768,171770],{"class":149,"line":1897},[147,171764,171057],{"class":397},[147,171766,171767],{"class":157}," BalanceNotEnoughError ",[147,171769,31657],{"class":397},[147,171771,171389],{"class":157},[147,171773,171774,171776],{"class":149,"line":1902},[147,171775,31573],{"class":448},[147,171777,67272],{"class":157},[19,171779,171780],{},"入门阶段大多数情况使用内置异常即可。",[14,171782,171784],{"id":171783},"_99-traceback","9.9 traceback",[19,171786,171787],{},"调试时可以输出完整异常堆栈。",[138,171789,171791],{"className":30652,"code":171790,"language":30654,"meta":143,"style":143},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[51,171792,171793,171800,171804,171810,171820,171828],{"__ignoreMap":143},[147,171794,171795,171797],{"class":149,"line":150},[147,171796,30666],{"class":397},[147,171798,171799],{"class":157}," traceback\n",[147,171801,171802],{"class":149,"line":312},[147,171803,2674],{"emptyLinePlaceholder":324},[147,171805,171806,171808],{"class":149,"line":1454},[147,171807,171045],{"class":397},[147,171809,4013],{"class":157},[147,171811,171812,171814,171816,171818],{"class":149,"line":1469},[147,171813,2259],{"class":448},[147,171815,401],{"class":157},[147,171817,156043],{"class":504},[147,171819,407],{"class":157},[147,171821,171822,171824,171826],{"class":149,"line":1475},[147,171823,171057],{"class":397},[147,171825,152389],{"class":448},[147,171827,4013],{"class":157},[147,171829,171830],{"class":149,"line":1489},[147,171831,171832],{"class":157},"    traceback.print_exc()\n",[19,171834,171835],{},"日志系统中常把异常堆栈记录到文件。",[14,171837,171839],{"id":171838},"_910-什么是模块","9.10 什么是模块",[19,171841,171842,171843,126253],{},"模块就是一个 ",[51,171844,146515],{},[19,171846,171847,171848,24892],{},"例如创建 ",[51,171849,171850],{},"my_math.py",[138,171852,171854],{"className":30652,"code":171853,"language":30654,"meta":143,"style":143},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[51,171855,171856,171864,171874,171878,171882,171891],{"__ignoreMap":143},[147,171857,171858,171860,171862],{"class":149,"line":150},[147,171859,32221],{"class":397},[147,171861,5483],{"class":2237},[147,171863,151256],{"class":157},[147,171865,171866,171868,171870,171872],{"class":149,"line":312},[147,171867,4364],{"class":397},[147,171869,11143],{"class":157},[147,171871,880],{"class":397},[147,171873,151267],{"class":157},[147,171875,171876],{"class":149,"line":1454},[147,171877,2674],{"emptyLinePlaceholder":324},[147,171879,171880],{"class":149,"line":1469},[147,171881,2674],{"emptyLinePlaceholder":324},[147,171883,171884,171886,171889],{"class":149,"line":1475},[147,171885,32221],{"class":397},[147,171887,171888],{"class":2237}," sub",[147,171890,151256],{"class":157},[147,171892,171893,171895,171897,171899],{"class":149,"line":1489},[147,171894,4364],{"class":397},[147,171896,11143],{"class":157},[147,171898,931],{"class":397},[147,171900,151267],{"class":157},[19,171902,171903],{},"在另一个文件中导入：",[138,171905,171907],{"className":30652,"code":171906,"language":30654,"meta":143,"style":143},"import my_math\n\nprint(my_math.add(1, 2))\n",[51,171908,171909,171916,171920],{"__ignoreMap":143},[147,171910,171911,171913],{"class":149,"line":150},[147,171912,30666],{"class":397},[147,171914,171915],{"class":157}," my_math\n",[147,171917,171918],{"class":149,"line":312},[147,171919,2674],{"emptyLinePlaceholder":324},[147,171921,171922,171924,171927,171929,171931,171933],{"class":149,"line":1454},[147,171923,30689],{"class":448},[147,171925,171926],{"class":157},"(my_math.add(",[147,171928,616],{"class":448},[147,171930,12709],{"class":157},[147,171932,477],{"class":448},[147,171934,30771],{"class":157},[14,171936,171938],{"id":171937},"_911-import导入","9.11 import导入",[367,171940,171942],{"id":171941},"_9111-导入模块","9.11.1 导入模块",[138,171944,171946],{"className":30652,"code":171945,"language":30654,"meta":143,"style":143},"import random\n\nprint(random.randint(1, 10))\n",[51,171947,171948,171954,171958],{"__ignoreMap":143},[147,171949,171950,171952],{"class":149,"line":150},[147,171951,30666],{"class":397},[147,171953,45602],{"class":157},[147,171955,171956],{"class":149,"line":312},[147,171957,2674],{"emptyLinePlaceholder":324},[147,171959,171960,171962,171965,171967,171969,171971],{"class":149,"line":1454},[147,171961,30689],{"class":448},[147,171963,171964],{"class":157},"(random.randint(",[147,171966,616],{"class":448},[147,171968,12709],{"class":157},[147,171970,845],{"class":448},[147,171972,30771],{"class":157},[367,171974,171976],{"id":171975},"_9112-导入指定内容","9.11.2 导入指定内容",[138,171978,171980],{"className":30652,"code":171979,"language":30654,"meta":143,"style":143},"from random import randint\n\nprint(randint(1, 10))\n",[51,171981,171982,171993,171997],{"__ignoreMap":143},[147,171983,171984,171986,171988,171990],{"class":149,"line":150},[147,171985,31011],{"class":397},[147,171987,58069],{"class":157},[147,171989,30666],{"class":397},[147,171991,171992],{"class":157}," randint\n",[147,171994,171995],{"class":149,"line":312},[147,171996,2674],{"emptyLinePlaceholder":324},[147,171998,171999,172001,172004,172006,172008,172010],{"class":149,"line":1454},[147,172000,30689],{"class":448},[147,172002,172003],{"class":157},"(randint(",[147,172005,616],{"class":448},[147,172007,12709],{"class":157},[147,172009,845],{"class":448},[147,172011,30771],{"class":157},[367,172013,172015],{"id":172014},"_9113-起别名","9.11.3 起别名",[138,172017,172019],{"className":30652,"code":172018,"language":30654,"meta":143,"style":143},"import random as rd\n\nprint(rd.randint(1, 10))\n",[51,172020,172021,172032,172036],{"__ignoreMap":143},[147,172022,172023,172025,172027,172029],{"class":149,"line":150},[147,172024,30666],{"class":397},[147,172026,58069],{"class":157},[147,172028,31657],{"class":397},[147,172030,172031],{"class":157}," rd\n",[147,172033,172034],{"class":149,"line":312},[147,172035,2674],{"emptyLinePlaceholder":324},[147,172037,172038,172040,172043,172045,172047,172049],{"class":149,"line":1454},[147,172039,30689],{"class":448},[147,172041,172042],{"class":157},"(rd.randint(",[147,172044,616],{"class":448},[147,172046,12709],{"class":157},[147,172048,845],{"class":448},[147,172050,30771],{"class":157},[138,172052,172054],{"className":30652,"code":172053,"language":30654,"meta":143,"style":143},"from random import randint as rint\n\nprint(rint(1, 10))\n",[51,172055,172056,172072,172076],{"__ignoreMap":143},[147,172057,172058,172060,172062,172064,172067,172069],{"class":149,"line":150},[147,172059,31011],{"class":397},[147,172061,58069],{"class":157},[147,172063,30666],{"class":397},[147,172065,172066],{"class":157}," randint ",[147,172068,31657],{"class":397},[147,172070,172071],{"class":157}," rint\n",[147,172073,172074],{"class":149,"line":312},[147,172075,2674],{"emptyLinePlaceholder":324},[147,172077,172078,172080,172083,172085,172087,172089],{"class":149,"line":1454},[147,172079,30689],{"class":448},[147,172081,172082],{"class":157},"(rint(",[147,172084,616],{"class":448},[147,172086,12709],{"class":157},[147,172088,845],{"class":448},[147,172090,30771],{"class":157},[367,172092,172094],{"id":172093},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[138,172096,172098],{"className":30652,"code":172097,"language":30654,"meta":143,"style":143},"from random import *\n",[51,172099,172100],{"__ignoreMap":143},[147,172101,172102,172104,172106,172108],{"class":149,"line":150},[147,172103,31011],{"class":397},[147,172105,58069],{"class":157},[147,172107,30666],{"class":397},[147,172109,172110],{"class":397}," *\n",[19,172112,172113],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,172115,172117],{"id":172116},"_912-常用内置模块","9.12 常用内置模块",[367,172119,172121],{"id":172120},"_9121-random","9.12.1 random",[138,172123,172125],{"className":30652,"code":172124,"language":30654,"meta":143,"style":143},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[51,172126,172127,172133,172137,172151,172170],{"__ignoreMap":143},[147,172128,172129,172131],{"class":149,"line":150},[147,172130,30666],{"class":397},[147,172132,45602],{"class":157},[147,172134,172135],{"class":149,"line":312},[147,172136,2674],{"emptyLinePlaceholder":324},[147,172138,172139,172141,172143,172145,172147,172149],{"class":149,"line":1454},[147,172140,30689],{"class":448},[147,172142,171964],{"class":157},[147,172144,616],{"class":448},[147,172146,12709],{"class":157},[147,172148,845],{"class":448},[147,172150,30771],{"class":157},[147,172152,172153,172155,172158,172160,172162,172164,172166,172168],{"class":149,"line":1469},[147,172154,30689],{"class":448},[147,172156,172157],{"class":157},"(random.choice([",[147,172159,150051],{"class":504},[147,172161,12709],{"class":157},[147,172163,151099],{"class":504},[147,172165,12709],{"class":157},[147,172167,159894],{"class":504},[147,172169,33417],{"class":157},[147,172171,172172,172174,172177,172179,172181,172183,172185,172187,172189,172191,172193,172195,172197,172199],{"class":149,"line":1475},[147,172173,30689],{"class":448},[147,172175,172176],{"class":157},"(random.sample([",[147,172178,616],{"class":448},[147,172180,12709],{"class":157},[147,172182,477],{"class":448},[147,172184,12709],{"class":157},[147,172186,471],{"class":448},[147,172188,12709],{"class":157},[147,172190,692],{"class":448},[147,172192,12709],{"class":157},[147,172194,718],{"class":448},[147,172196,112472],{"class":157},[147,172198,477],{"class":448},[147,172200,30771],{"class":157},[367,172202,172204],{"id":172203},"_9122-time","9.12.2 time",[138,172206,172208],{"className":30652,"code":172207,"language":30654,"meta":143,"style":143},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[51,172209,172210,172216,172220,172227,172235],{"__ignoreMap":143},[147,172211,172212,172214],{"class":149,"line":150},[147,172213,30666],{"class":397},[147,172215,32103],{"class":157},[147,172217,172218],{"class":149,"line":312},[147,172219,2674],{"emptyLinePlaceholder":324},[147,172221,172222,172224],{"class":149,"line":1454},[147,172223,30689],{"class":448},[147,172225,172226],{"class":157},"(time.time())\n",[147,172228,172229,172231,172233],{"class":149,"line":1469},[147,172230,95343],{"class":157},[147,172232,616],{"class":448},[147,172234,407],{"class":157},[147,172236,172237,172239,172241,172244],{"class":149,"line":1475},[147,172238,30689],{"class":448},[147,172240,401],{"class":157},[147,172242,172243],{"class":504},"\"1秒后执行\"",[147,172245,407],{"class":157},[367,172247,172249],{"id":172248},"_9123-datetime","9.12.3 datetime",[138,172251,172253],{"className":30652,"code":172252,"language":30654,"meta":143,"style":143},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[51,172254,172255,172267,172271,172281,172288],{"__ignoreMap":143},[147,172256,172257,172259,172262,172264],{"class":149,"line":150},[147,172258,31011],{"class":397},[147,172260,172261],{"class":157}," datetime ",[147,172263,30666],{"class":397},[147,172265,172266],{"class":157}," datetime\n",[147,172268,172269],{"class":149,"line":312},[147,172270,2674],{"emptyLinePlaceholder":324},[147,172272,172273,172276,172278],{"class":149,"line":1454},[147,172274,172275],{"class":157},"now ",[147,172277,445],{"class":397},[147,172279,172280],{"class":157}," datetime.now()\n",[147,172282,172283,172285],{"class":149,"line":1469},[147,172284,30689],{"class":448},[147,172286,172287],{"class":157},"(now)\n",[147,172289,172290,172292,172295,172298,172300,172303],{"class":149,"line":1475},[147,172291,30689],{"class":448},[147,172293,172294],{"class":157},"(now.strftime(",[147,172296,172297],{"class":504},"\"%Y-%m-",[147,172299,156854],{"class":448},[147,172301,172302],{"class":504}," %H:%M:%S\"",[147,172304,30771],{"class":157},[367,172306,172308],{"id":172307},"_9124-os","9.12.4 os",[138,172310,172312],{"className":30652,"code":172311,"language":30654,"meta":143,"style":143},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[51,172313,172314,172320,172324,172331],{"__ignoreMap":143},[147,172315,172316,172318],{"class":149,"line":150},[147,172317,30666],{"class":397},[147,172319,45579],{"class":157},[147,172321,172322],{"class":149,"line":312},[147,172323,2674],{"emptyLinePlaceholder":324},[147,172325,172326,172328],{"class":149,"line":1454},[147,172327,30689],{"class":448},[147,172329,172330],{"class":157},"(os.getcwd())\n",[147,172332,172333,172335,172338,172341],{"class":149,"line":1469},[147,172334,30689],{"class":448},[147,172336,172337],{"class":157},"(os.listdir(",[147,172339,172340],{"class":504},"\".\"",[147,172342,30771],{"class":157},[367,172344,172346],{"id":172345},"_9125-sys","9.12.5 sys",[138,172348,172350],{"className":30652,"code":172349,"language":30654,"meta":143,"style":143},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[51,172351,172352,172359,172363,172370],{"__ignoreMap":143},[147,172353,172354,172356],{"class":149,"line":150},[147,172355,30666],{"class":397},[147,172357,172358],{"class":157}," sys\n",[147,172360,172361],{"class":149,"line":312},[147,172362,2674],{"emptyLinePlaceholder":324},[147,172364,172365,172367],{"class":149,"line":1454},[147,172366,30689],{"class":448},[147,172368,172369],{"class":157},"(sys.version)\n",[147,172371,172372,172374],{"class":149,"line":1469},[147,172373,30689],{"class":448},[147,172375,172376],{"class":157},"(sys.path)\n",[14,172378,172380,172381,172383,172384,650],{"id":172379},"_913-if-name-main","9.13 if ",[234,172382,80082],{}," == \"",[234,172385,102330],{},[19,172387,172388,172389,172392],{},"模块被直接运行和被导入时，",[51,172390,172391],{},"__name__"," 的值不同。",[19,172394,172395,172396,24892],{},"创建 ",[51,172397,172398],{},"my_module.py",[138,172400,172402],{"className":30652,"code":172401,"language":30654,"meta":143,"style":143},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[51,172403,172404,172412,172422,172426,172430,172442],{"__ignoreMap":143},[147,172405,172406,172408,172410],{"class":149,"line":150},[147,172407,32221],{"class":397},[147,172409,5483],{"class":2237},[147,172411,151256],{"class":157},[147,172413,172414,172416,172418,172420],{"class":149,"line":312},[147,172415,4364],{"class":397},[147,172417,11143],{"class":157},[147,172419,880],{"class":397},[147,172421,151267],{"class":157},[147,172423,172424],{"class":149,"line":1454},[147,172425,2674],{"emptyLinePlaceholder":324},[147,172427,172428],{"class":149,"line":1469},[147,172429,2674],{"emptyLinePlaceholder":324},[147,172431,172432,172434,172436,172438,172440],{"class":149,"line":1475},[147,172433,1805],{"class":397},[147,172435,31494],{"class":448},[147,172437,101831],{"class":397},[147,172439,101834],{"class":504},[147,172441,4013],{"class":157},[147,172443,172444,172446,172448,172450,172452,172454],{"class":149,"line":1489},[147,172445,31573],{"class":448},[147,172447,166763],{"class":157},[147,172449,616],{"class":448},[147,172451,12709],{"class":157},[147,172453,477],{"class":448},[147,172455,30771],{"class":157},[19,172457,172458],{},"作用：",[350,172460,172461,172464],{},[353,172462,172463],{},"直接运行该文件时，执行测试代码。",[353,172465,172466],{},"被其他文件导入时，不执行测试代码。",[19,172468,172469],{},"这是写模块时很常用的习惯。",[14,172471,172473],{"id":172472},"_914-包","9.14 包",[19,172475,172476,172477,172480],{},"包是包含 ",[51,172478,172479],{},"__init__.py"," 的目录，用于组织多个模块。",[19,172482,172483],{},"目录结构：",[138,172485,172488],{"className":172486,"code":172487,"language":5461,"meta":143},[5459],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[51,172489,172487],{"__ignoreMap":143},[19,172491,172492],{},"导入：",[138,172494,172496],{"className":30652,"code":172495,"language":30654,"meta":143,"style":143},"from utils.file_utils import read_file\n",[51,172497,172498],{"__ignoreMap":143},[147,172499,172500,172502,172505,172507],{"class":149,"line":150},[147,172501,31011],{"class":397},[147,172503,172504],{"class":157}," utils.file_utils ",[147,172506,30666],{"class":397},[147,172508,172509],{"class":157}," read_file\n",[19,172511,172512,172514],{},[51,172513,172479],{}," 可以为空，也可以写包初始化逻辑。",[14,172516,172518],{"id":172517},"_915-第三方包","9.15 第三方包",[19,172520,172521,172522,172524],{},"第三方包通过 ",[51,172523,24104],{}," 安装。",[138,172526,172528],{"className":24095,"code":172527,"language":24097,"meta":143,"style":143},"pip install requests\n",[51,172529,172530],{"__ignoreMap":143},[147,172531,172532,172534,172536],{"class":149,"line":150},[147,172533,24104],{"class":2237},[147,172535,24107],{"class":504},[147,172537,146261],{"class":504},[19,172539,172540],{},"使用：",[138,172542,172544],{"className":30652,"code":172543,"language":30654,"meta":143,"style":143},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[51,172545,172546,172552,172556,172571],{"__ignoreMap":143},[147,172547,172548,172550],{"class":149,"line":150},[147,172549,30666],{"class":397},[147,172551,146261],{"class":157},[147,172553,172554],{"class":149,"line":312},[147,172555,2674],{"emptyLinePlaceholder":324},[147,172557,172558,172561,172563,172566,172569],{"class":149,"line":1454},[147,172559,172560],{"class":157},"response ",[147,172562,445],{"class":397},[147,172564,172565],{"class":157}," requests.get(",[147,172567,172568],{"class":504},"\"https:\u002F\u002Fwww.example.com\"",[147,172570,407],{"class":157},[147,172572,172573,172575],{"class":149,"line":1469},[147,172574,30689],{"class":448},[147,172576,172577],{"class":157},"(response.status_code)\n",[19,172579,172580],{},"查看已安装包：",[138,172582,172584],{"className":24095,"code":172583,"language":24097,"meta":143,"style":143},"pip list\n",[51,172585,172586],{"__ignoreMap":143},[147,172587,172588,172590],{"class":149,"line":150},[147,172589,24104],{"class":2237},[147,172591,119225],{"class":504},[19,172593,172594],{},"导出项目依赖：",[138,172596,172597],{"className":24095,"code":146456,"language":24097,"meta":143,"style":143},[51,172598,172599],{"__ignoreMap":143},[147,172600,172601,172603,172605,172607],{"class":149,"line":150},[147,172602,24104],{"class":2237},[147,172604,146465],{"class":504},[147,172606,26496],{"class":397},[147,172608,146470],{"class":504},[19,172610,172611],{},"安装项目依赖：",[138,172613,172614],{"className":24095,"code":146476,"language":24097,"meta":143,"style":143},[51,172615,172616],{"__ignoreMap":143},[147,172617,172618,172620,172622,172624],{"class":149,"line":150},[147,172619,24104],{"class":2237},[147,172621,24107],{"class":504},[147,172623,119909],{"class":448},[147,172625,146470],{"class":504},[14,172627,172629],{"id":172628},"_916-模块搜索路径","9.16 模块搜索路径",[19,172631,172632,172633,172636],{},"Python 导入模块时会在 ",[51,172634,172635],{},"sys.path"," 中查找。",[138,172638,172640],{"className":30652,"code":172639,"language":30654,"meta":143,"style":143},"import sys\n\nfor path in sys.path:\n    print(path)\n",[51,172641,172642,172648,172652,172664],{"__ignoreMap":143},[147,172643,172644,172646],{"class":149,"line":150},[147,172645,30666],{"class":397},[147,172647,172358],{"class":157},[147,172649,172650],{"class":149,"line":312},[147,172651,2674],{"emptyLinePlaceholder":324},[147,172653,172654,172656,172659,172661],{"class":149,"line":1454},[147,172655,3299],{"class":397},[147,172657,172658],{"class":157}," path ",[147,172660,26317],{"class":397},[147,172662,172663],{"class":157}," sys.path:\n",[147,172665,172666,172668],{"class":149,"line":1469},[147,172667,31573],{"class":448},[147,172669,169392],{"class":157},[19,172671,172672],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,172674,157786],{},[138,172676,172679],{"className":172677,"code":172678,"language":5461,"meta":143},[5459],"random.py\njson.py\ntime.py\n",[51,172680,172678],{"__ignoreMap":143},[19,172682,172683],{},"这些文件名可能导致导入异常。",[14,172685,172687],{"id":172686},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,172689,172483],{},[138,172691,172694],{"className":172692,"code":172693,"language":5461,"meta":143},[5459],"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",[51,172695,172693],{"__ignoreMap":143},[19,172697,172698,24892],{},[51,172699,172700],{},"utils\u002Ffile_utils.py",[138,172702,172704],{"className":30652,"code":172703,"language":30654,"meta":143,"style":143},"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",[51,172705,172706,172712,172722,172726,172730,172740,172750,172758,172764,172768,172795,172805,172809,172813,172823,172849],{"__ignoreMap":143},[147,172707,172708,172710],{"class":149,"line":150},[147,172709,30666],{"class":397},[147,172711,147254],{"class":157},[147,172713,172714,172716,172718,172720],{"class":149,"line":312},[147,172715,31011],{"class":397},[147,172717,108581],{"class":157},[147,172719,30666],{"class":397},[147,172721,108586],{"class":157},[147,172723,172724],{"class":149,"line":1454},[147,172725,2674],{"emptyLinePlaceholder":324},[147,172727,172728],{"class":149,"line":1469},[147,172729,2674],{"emptyLinePlaceholder":324},[147,172731,172732,172734,172737],{"class":149,"line":1475},[147,172733,32221],{"class":397},[147,172735,172736],{"class":2237}," read_json",[147,172738,172739],{"class":157},"(path):\n",[147,172741,172742,172745,172747],{"class":149,"line":1489},[147,172743,172744],{"class":157},"    path ",[147,172746,445],{"class":397},[147,172748,172749],{"class":157}," Path(path)\n",[147,172751,172752,172754,172756],{"class":149,"line":1495},[147,172753,3375],{"class":397},[147,172755,39204],{"class":397},[147,172757,169473],{"class":157},[147,172759,172760,172762],{"class":149,"line":1586},[147,172761,15025],{"class":397},[147,172763,52111],{"class":157},[147,172765,172766],{"class":149,"line":1592},[147,172767,2674],{"emptyLinePlaceholder":324},[147,172769,172770,172772,172774,172777,172779,172781,172783,172785,172787,172789,172791,172793],{"class":149,"line":1604},[147,172771,34452],{"class":397},[147,172773,146954],{"class":448},[147,172775,172776],{"class":157},"(path, ",[147,172778,146964],{"class":504},[147,172780,12709],{"class":157},[147,172782,146969],{"class":5490},[147,172784,445],{"class":397},[147,172786,146974],{"class":504},[147,172788,13988],{"class":157},[147,172790,31657],{"class":397},[147,172792,148316],{"class":5490},[147,172794,4013],{"class":157},[147,172796,172797,172799,172801,172803],{"class":149,"line":1886},[147,172798,15025],{"class":397},[147,172800,148327],{"class":157},[147,172802,45628],{"class":5490},[147,172804,407],{"class":157},[147,172806,172807],{"class":149,"line":1891},[147,172808,2674],{"emptyLinePlaceholder":324},[147,172810,172811],{"class":149,"line":1897},[147,172812,2674],{"emptyLinePlaceholder":324},[147,172814,172815,172817,172820],{"class":149,"line":1902},[147,172816,32221],{"class":397},[147,172818,172819],{"class":2237}," write_json",[147,172821,172822],{"class":157},"(path, data):\n",[147,172824,172825,172827,172829,172831,172833,172835,172837,172839,172841,172843,172845,172847],{"class":149,"line":1916},[147,172826,34452],{"class":397},[147,172828,146954],{"class":448},[147,172830,172776],{"class":157},[147,172832,152139],{"class":504},[147,172834,12709],{"class":157},[147,172836,146969],{"class":5490},[147,172838,445],{"class":397},[147,172840,146974],{"class":504},[147,172842,13988],{"class":157},[147,172844,31657],{"class":397},[147,172846,148316],{"class":5490},[147,172848,4013],{"class":157},[147,172850,172851,172854,172856,172858,172860,172862,172864,172866,172868,172870,172872],{"class":149,"line":1921},[147,172852,172853],{"class":157},"        json.dump(data, ",[147,172855,45628],{"class":5490},[147,172857,12709],{"class":157},[147,172859,147300],{"class":5490},[147,172861,445],{"class":397},[147,172863,34261],{"class":448},[147,172865,12709],{"class":157},[147,172867,152175],{"class":5490},[147,172869,445],{"class":397},[147,172871,477],{"class":448},[147,172873,407],{"class":157},[19,172875,172876,24892],{},[51,172877,154770],{},[138,172879,172881],{"className":30652,"code":172880,"language":30654,"meta":143,"style":143},"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",[51,172882,172883,172894,172898,172911,172931],{"__ignoreMap":143},[147,172884,172885,172887,172889,172891],{"class":149,"line":150},[147,172886,31011],{"class":397},[147,172888,172504],{"class":157},[147,172890,30666],{"class":397},[147,172892,172893],{"class":157}," read_json, write_json\n",[147,172895,172896],{"class":149,"line":312},[147,172897,2674],{"emptyLinePlaceholder":324},[147,172899,172900,172902,172904,172907,172909],{"class":149,"line":1454},[147,172901,159879],{"class":157},[147,172903,445],{"class":397},[147,172905,172906],{"class":157}," read_json(",[147,172908,151994],{"class":504},[147,172910,407],{"class":157},[147,172912,172913,172915,172917,172919,172921,172923,172925,172927,172929],{"class":149,"line":1469},[147,172914,170697],{"class":157},[147,172916,62952],{"class":504},[147,172918,51710],{"class":157},[147,172920,150051],{"class":504},[147,172922,12709],{"class":157},[147,172924,151635],{"class":504},[147,172926,51710],{"class":157},[147,172928,1388],{"class":448},[147,172930,165315],{"class":157},[147,172932,172933,172936,172938],{"class":149,"line":1475},[147,172934,172935],{"class":157},"write_json(",[147,172937,151994],{"class":504},[147,172939,172940],{"class":157},", students)\n",[14,172942,172944],{"id":172943},"_918-易错点","9.18 易错点",[350,172946,172947,172950,172955,172960,172963,172966],{},[353,172948,172949],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[353,172951,172952,172953,28659],{},"能指定异常类型就不要裸写 ",[51,172954,171057],{},[353,172956,172957,172959],{},[51,172958,171432],{}," 无论是否出错都会执行。",[353,172961,172962],{},"模块文件名不要和标准库重名。",[353,172964,172965],{},"导入自己写的模块时，要注意运行目录。",[353,172967,172968],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,172970,172972],{"id":172971},"_919-本章练习","9.19 本章练习",[350,172974,172975,172978,172981,172987,172994],{},[353,172976,172977],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[353,172979,172980],{},"写函数读取文件，如果文件不存在则返回空字符串。",[353,172982,172395,172983,172986],{},[51,172984,172985],{},"math_utils.py","，实现加减乘除函数并导入使用。",[353,172988,172989,172990,172993],{},"创建一个 ",[51,172991,172992],{},"utils"," 包，把 JSON 读写函数放进去。",[353,172995,172996],{},"写一个程序，捕获除零异常和输入格式异常。",[308,172998,172999],{},"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":143,"searchDepth":312,"depth":312,"links":173001},[173002,173003,173004,173005,173006,173007,173008,173009,173010,173011,173012,173018,173025,173027,173028,173029,173030,173031,173032],{"id":170854,"depth":312,"text":170855},{"id":170982,"depth":312,"text":170983},{"id":171031,"depth":312,"text":171032},{"id":171180,"depth":312,"text":171181},{"id":171352,"depth":312,"text":171353},{"id":171421,"depth":312,"text":171422},{"id":171532,"depth":312,"text":171533},{"id":171658,"depth":312,"text":171659},{"id":171783,"depth":312,"text":171784},{"id":171838,"depth":312,"text":171839},{"id":171937,"depth":312,"text":171938,"children":173013},[173014,173015,173016,173017],{"id":171941,"depth":1454,"text":171942},{"id":171975,"depth":1454,"text":171976},{"id":172014,"depth":1454,"text":172015},{"id":172093,"depth":1454,"text":172094},{"id":172116,"depth":312,"text":172117,"children":173019},[173020,173021,173022,173023,173024],{"id":172120,"depth":1454,"text":172121},{"id":172203,"depth":1454,"text":172204},{"id":172248,"depth":1454,"text":172249},{"id":172307,"depth":1454,"text":172308},{"id":172345,"depth":1454,"text":172346},{"id":172379,"depth":312,"text":173026},"9.13 if name == \"main\"",{"id":172472,"depth":312,"text":172473},{"id":172517,"depth":312,"text":172518},{"id":172628,"depth":312,"text":172629},{"id":172686,"depth":312,"text":172687},{"id":172943,"depth":312,"text":172944},{"id":172971,"depth":312,"text":172972},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170846,"description":321},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":173039,"title":173040,"body":173041,"description":173204,"extension":322,"meta":173205,"navigation":324,"path":173206,"seo":173207,"stem":173208,"__hash__":173209},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":173042,"toc":173199},[173043,173046,173049,173052,173063,173065,173139,173142,173145,173148,173151,173154,173157,173160,173163,173166,173169],[10,173044,173040],{"id":173045},"python教程",[19,173047,173048],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,173050,173051],{},"建议学习环境：",[350,173053,173054,173057,173060],{},[353,173055,173056],{},"Python 版本：Python 3.10 及以上。",[353,173058,173059],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[353,173061,173062],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,173064,117348],{"id":117348},[350,173066,173067,173073,173079,173085,173091,173097,173103,173109,173115,173121,173127,173133],{},[353,173068,173069],{},[637,173070,173072],{"href":173071},".\u002Fch1-Python","Python环境与第一个程序",[353,173074,173075],{},[637,173076,173078],{"href":173077},".\u002Fch2","基础语法、变量与字符串",[353,173080,173081],{},[637,173082,173084],{"href":173083},".\u002Fch3","判断语句",[353,173086,173087],{},[637,173088,173090],{"href":173089},".\u002Fch4","循环语句",[353,173092,173093],{},[637,173094,173096],{"href":173095},".\u002Fch5","函数基础",[353,173098,173099],{},[637,173100,173102],{"href":173101},".\u002Fch6","数据容器",[353,173104,173105],{},[637,173106,173108],{"href":173107},".\u002Fch7","函数进阶",[353,173110,173111],{},[637,173112,173114],{"href":173113},".\u002Fch8","文件操作",[353,173116,173117],{},[637,173118,173120],{"href":173119},".\u002Fch9","异常、模块与包",[353,173122,173123],{},[637,173124,173126],{"href":173125},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[353,173128,173129],{},[637,173130,173132],{"href":173131},".\u002Fch11","面向对象基础",[353,173134,173135],{},[637,173136,173138],{"href":173137},".\u002Fch12","综合案例与复习路线",[14,173140,173141],{"id":173141},"学习路线",[19,173143,173144],{},"第一阶段：能运行程序。",[19,173146,173147],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,173149,173150],{},"第二阶段：能组织数据。",[19,173152,173153],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,173155,173156],{},"第三阶段：能封装逻辑。",[19,173158,173159],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,173161,173162],{},"第四阶段：能做小项目。",[19,173164,173165],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,173167,173168],{"id":173168},"参考资料",[350,173170,173171,173178,173185,173192],{},[353,173172,173173,173174],{},"黑马程序员 Python 入门教程推荐：",[637,173175,173176],{"href":173176,"rel":173177},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[24138],[353,173179,173180,173181],{},"Python 官方中文教程：",[637,173182,173183],{"href":173183,"rel":173184},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[24138],[353,173186,173187,173188],{},"Python 标准库文档：",[637,173189,173190],{"href":173190,"rel":173191},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[24138],[353,173193,173194,173195],{},"pyecharts 文档：",[637,173196,173197],{"href":173197,"rel":173198},"https:\u002F\u002Fpyecharts.org\u002F",[24138],{"title":143,"searchDepth":312,"depth":312,"links":173200},[173201,173202,173203],{"id":117348,"depth":312,"text":117348},{"id":173141,"depth":312,"text":173141},{"id":173168,"depth":312,"text":173168},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23651},"\u002Fwiki\u002F2024-10-10-python",{"title":173040,"description":173204},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426812]